嵌入式计算系统课件:嵌入式系统设备驱动程序_第1页
嵌入式计算系统课件:嵌入式系统设备驱动程序_第2页
嵌入式计算系统课件:嵌入式系统设备驱动程序_第3页
嵌入式计算系统课件:嵌入式系统设备驱动程序_第4页
嵌入式计算系统课件:嵌入式系统设备驱动程序_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统设备驱动程序嵌入式系统驱动程序概述设备驱动程序的概念嵌入式系统中驱动程序重要性设备驱动程序的设计方法硬件操作驱动程序接口模式驱动程序实现流程计算机与机械计算器的区别?VS.计算机组成应用的实现软件实现了具体应用,它按照各种不同的业务需求而设计,满足了用户的需求代码最终会落实为硬件上的组合逻辑与时序逻辑应用软件和硬件之间的鸿沟设计网页或者服务器程序的时候关心网卡的中断、寄存器、存储空间、I/O 端口、片选吗?使用printf()函数输出信息的时候,了解底层究竟是怎样把相应的信息输出到屏幕吗?应用软件工程师希望看到一个没有硬件的纯粹软件世界谁来实现硬件对应用软件工程师的隐形?驱动工程师驱

2、动程序概念“驱使硬件设备行动”让硬件设备工作起来的软件设备驱动硬件应用程序/操作系统内核驱动程序的概念目的:应用软件只需要调用系统软件的应用编程接口(API)就可让硬件去完成要求的工作完成的功能:1、对设备初始化和释放。2、把数据从内核/应用程序传送到硬件和从硬件读取数据。3、读取应用程序传送给设备文件的数据和回送应用程序请求的数据。4、检测和处理设备出现的错误。设备驱动程序驱动功能硬件操作为操作系统/应用软件提供设备操作接口 设备操作接口(功能定义)驱动= + 硬件操作(功能实现)基于GPRS&GPS的防盗追踪系统设备驱动开发的重要性嵌入式系统的特征驱动是嵌入式代码开发的第一项工作驱动测试时

3、嵌入式系统软件测试的第一项工作硬件操作操作步骤初始化配置功能操作(实现一项具体的功能)关键因素寄存器时序:时间先后顺序,规定的时间做规定的事硬件设备分类CPU内部设备计时器(Timer)、看门狗(WTD)接口控制器(GPIO、A/D、 UART、I2C、SPI)外部设备无逻辑电路:LED 指示灯、按键、模拟传感器有逻辑电路:射频芯片、数字传感器CPU内部设备操作参考资料:CPU datasheetMSP430TimerA timer is a counter whichCounts in a certain way (up, down, continuous) at every clock t

4、ickCan be used in two ways:Triggers interrupts when reaching a given value(compare mode)orRecords its timer value on other interrupts(capture mode)匹配模式捕获模式Timer预分频器计数器(TAR)时钟源使能0 x0000 0000定时器控制寄存器( TACTL )复位捕获寄存器 (TACCR0)捕获寄存器( TACCR1)捕获控制寄存器(CCI)捕获功能匹配功能CCIA, CCIB,VCC,GND中断标志寄存器(IR)比较器定时器计数值 匹配寄存器

5、(TACCR0)匹配寄存器( TACCR1)TACLKACLKSMCLKINCLKTimer 操作流程计算定时器的时钟源和分频设置工作模式使能定时器中断设置匹配值启动定时器初始化功能操作Timer 操作int main( void ) P1DIR |= 0 x03; P1OUT = 0 x00;TACTL |= TASSEL_1+ID_1; /设置时钟源和分频TAR=0; /计数值清零TACCTL0 = CCIE; /设置比较模式 允许计时器中断TACCR0 = 1000; /设置比较值TACTL |= MC_1 ; /设置计数模式 开始计时 _bis_SR_register(GIE+LPM3

6、_bits); /开启全局中断#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A (void) P1OUT = 0 x03;interruptinterrupt无逻辑电路外设操作外设CPU接口接口控制器硬件接口初始化硬件接口操作初始化功能操作参考资料:电路原理图外设手册CPU datasheetLED指示灯控制设置管脚为输出设置管脚输出值初始化功能操作GPIO寄存器PxDIRPxOUTinout10PxINPxDIR: 1 输出管脚, 0 输入管脚PxOUT: 1 输出高电平, 0 输出低电平PxIN: 输入管脚电平值LED ON初始化;P

7、1.0 and P1.1 as output亮灯操作:P1.0=1 and P1.1=1#include io430.h#include in430.hint main( void ) P1DIR |= 0 x03; P1OUT |= 0 x03; while(1);有逻辑电路外设操作处理逻辑CPU接口接口控制器接口控制器外设参考资料:电路原理图外设 datasheetCPU datasheet射频芯片有逻辑电路外设操作处理逻辑CPU接口接口控制器接口控制器外设硬件接口驱动外设驱动DS18b20One wire读取DS18b20温度读取DS18b20温度值Onewire操作接口单总线读写操作时

8、序OneWire 读写操作/定义Onewire端口sbit DQ=P27; /延时函数void delay(unsigned int i) while(i-);/读一个字节unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; / startdat=1;DQ = 1; / return to highdelay(5);if(DQ)dat|=0 x80;delay(5);return(dat);OneWire 读写操作/定义Onewire端口sbit DQ=P27;

9、 /延时函数void delay(unsigned int i) while(i-);/写一个字节void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01;/写入 delay(5); DQ = 1; /释放总线 dat=1; delay(5);DS18b20DS18b20DS18b20读取温度步骤1. DS18B20开始转换:1.1 DS18B20初始化。1.2 写入跳过ROM的字节命令,0 xCC。1.3 写入开始转换的功能命令,0 x44。1.4 延迟大约

10、750900毫秒2. DS18B20读暂存数据:2.1 DS18B20初始化。2.2 写入跳过ROM的字节命令,0 xCC。2.3 写入读暂存的功能命令,0 xBE。2.4 读入第0个字节LSByte,转换结果的低八位。2.5 读入第1个字节MSByte,转换结果的高八位。2.6 DS18B20复位,表示读取暂存结束DS18b20初始化/18b20初始化函数int Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay(80); /精确延时 大于 480us DQ =

11、 1; /拉高总线/稍做延时后 delay(10); /如果x=0则初始化成功 /x=1则初始化失败 x=DQ; delay(5);return x;DS18b20读取温度/读取温度unsigned char ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;/float tt=0;Init_DS18B20(); /1.1WriteOneChar(0 xCC); /1.2WriteOneChar(0 x44); /1.3delay(200); /1.4Init_DS18B20(); /2.1Wr

12、iteOneChar(0 xCC); /2.2WriteOneChar(0 xBE); /2.3a=ReadOneChar(); /2.4b=ReadOneChar(); /2.5Init_DS18B20(); /2.6b4;t=b;return(t);硬件操作硬件操作初始化+功能操作根据手册介绍的操作流程编程资料:原理图+手册关键因素:寄存器操作和时序嵌入式驱动程序的接口模式模式一:应用程序直接操作硬件int main( void ) P1DIR |= 0 x03; P1OUT = 0 x00;TACTL |= TASSEL_1+ID_1; TAR=0; TACCTL0 = CCIE; TA

13、CCR0 = 1000; TACTL |= MC_1 ; _bis_SR_register(GIE+LPM3_bits); #pragma vector=TIMERA0_VECTOR_interrupt void Timer_A (void) P1OUT = 0 x03;问题?应用程序接口模式/读取温度unsigned char ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;/float tt=0;Init_DS18B20();WriteOneChar(0 xCC); / 跳过读序号列号的操

14、作WriteOneChar(0 x44); / 启动温度转换delay(200);Init_DS18B20();WriteOneChar(0 xCC); /跳过读序号列号的操作 WriteOneChar(0 xBE); /读取温度寄存器等a=ReadOneChar();b=ReadOneChar();b4;t=b;return(t);/写一个字节void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; delay(5); DQ = 1; dat=1; del

15、ay(5);应用程序接口模式硬件(OneWire, DS18b20)设备驱动应用程序1应用程序2应用程序NReadOneChar()WriteOneChar()Init_DS18B20()ReadTemperature()应用程序接口模式void leds_init () P1DIR |= 0 x03; P1OUT = 0 x00;void leds_toggle() P1OUT = 0 x03;void leds_on() P1OUT |= 0 x03;void leds_off() P1OUT &=0 x03;#include io430.h#include in430.h“int mai

16、n( void )led_init();TACTL |= TASSEL_1+ID_1; TAR=0; TACCTL0 = CCIE; TACCR0 = 1000; TACTL |= MC_1 ; _bis_SR_register(GIE+LPM3_bits);#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A (void) leds_toggle();应用程序接口模式void TimerA_init() /设置时钟源和分频TACTL |= TASSEL_1+ID_1;/计数值清零TAR = 0;/设置比较模式 允许计时器中断TACCTL0

17、= CCIE;void TimerA_start(uint16_t val) TACCR0 = val; /设置比较值 TACTL |= MC_1 ; /设置计数模式, 开始int main( void )led_init();timerA_init();timerA_start(1000);_bis_SR_register(GIE+LPM3_bits);#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A (void) leds_toggle();应用程序接口模式硬件(Timer, LED)设备驱动Timer_init();Timer_st

18、art();Led_init();Led_on();应用程序1应用程序2应用程序N问题?模式三:操作系统内核接口模式字符设备驱动块设备驱动网络设备驱动字符设备文件块设备文件Socket字符设备块设备网络设备协议栈应用程序内核Linux驱动程序接口Linux设备驱动程序接口应用程序进程与内核的接口内核与文件系统的接口文件系统与设备驱动程序的接口设备驱动程序与硬件设备的接口问题?三种模式比较直接操作硬件:优点:执行速度快缺点:无程序复用、代码量大、可读性差、缺少保护应用程序调用接口:优点:程序复用、结构清晰、可读性高缺点:难改动、难维护操作系统内核调用接口优点:容易改动和维护缺点:编程难度大设备驱

19、动程序的开发流程硬件功能定义 执行流程程序代码接口定义射频驱动程序CPUSPI控制器SPI控制器NanoLOCAtmega128SPIIRQ/RSTBasebandController射频驱动程序SPI驱动射频驱动SPI操作接口功能定义基本功能初始化Reset发送接收接口函数定义MyBoolT NtrxInit(void) /初始化void NanoReset()/Resetvoid NTRXSendMessage (MyByte8T *addr, MyPtrT payload, MyWord16T len) /发送void NTRXRxReceive (void)/接收发送执行流程将发送数据

20、写入发送缓冲区将数据包头写入包头缓冲区开启射频发送功能查询是否发送结束?发送结束是否(1)(2)(3)(4)(5)子函数实现举例void NTRXTxData (MyPtrT payload, MyWord16T len) NTRXSetIndexReg (3); NTRXWriteSPI (NA_RamTxBuffer_O & 0 xff, (MyByte8T *)payload, (MyByte8T)(len & 0 xff); /SPI读写void NTRXTxStart (void)MyByte8T value; /* mark buffers as valid and start transmission */ value = (NTRX_TX_BUFF0 | NTRX_TX_BUFF1 | NTRX_TX_START); NTRXWriteSingleSPI (NA_TxBufferCm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论