μC/OS-II实时内核下的A/D驱动程序设计 03
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
μC/OS-II实时内核下的A/D驱动程序设计 03
2 C8051F015单片机的A/D转换器
2.1 C8051C015单片机
C8051C015的美国Cygnal公司新推出的高速SOC型C8051Fxxx系列单片机。它的内核CIP-51与MCS-51的指令集完全兼容,CIP-51的系统时钟频率在0~25MHz。C8051Fxxx系列单片机采用流水线结构,与标准的8051相比,指令执行速度有很大的提高。CIP-51内核的指令执行时间是以系统时钟为单位,70%的指令执行时间为1个或2个系统时钟周期。C8051F015具有32KB的内存、2304B的RAM(片内256B、片外2048B)。CIP-51内核具有标准8052的所有外设部件,片上还集成有9通道10位A/D转换接口电路、SMBus/I2C、SPI串行接口。
2.2 C8051F015的A/D转换电路
C8051F015的A/D转换电路包括1个9通道可配置模拟多路开关AMUX(8路用于外部模拟输入、1路用于芯片环境温度的测量)、1个可编程增益放大器PGA和1个100ksps 10位分辨率的逐次逼近型ADC。A/D中还集成了跟踪保持电路和可编程窗口检测器。
ADC有4种启动方式:软件命令、定时器2溢出、定时器3溢出及外部信号输入。寄存器ADC0CN是配置启动和跟踪方式的控制寄存器。每次转换结束时,ADC0CH的ADBUSY(忙标志)的下降沿触发中断,也可用软件查询这个状态位。
2.3 ADC转换速度
C8051Fxxx系列单片机中ADC的速率都是可编程设置的。表1给出了所需最小分频系数与SYSCLK(系统时钟)的关系(ADC0CF为ADC配置寄存器)。
表1 ADC时钟分频系数与SYSCLK频率的关系 SYSCLK频率/MHz | ADC时钟分频系数 | ADC0CF的ADCSC2~1 | 时钟频率<2.5 | 1 | 000 | 2.5~5 | 2 | 001 | 5~10 | 4 | 010 | 10~20 | 8(复位值) | 011 | 时钟频率>20 | 16 | 1xx |
在C8051F015单片机中,ADC的转换时钟周期至少在400ns,转换时钟应不大于2MHz。一般在启动ADC之前都要处于跟踪方式,而ADC一次转换完成要用16个系统时钟。另外,在转换之前还要加上3个系统时钟的跟踪/保持捕获时间,所以完成一次转换需19个ADC转换时钟(9.5μs)。
图1中的方法简单,转换时间在ms级以上,一般用于变化慢的模拟输入信号,不适用于C8051F015。图2中的方法,为了减少μC/OS-II内核调用ISR所用时间,ISR一般都用于汇编语言编写。从程序1中ISR伪代码可以看出,尽管ISR用汇编语言编写。代码效率高,但μC/OS-II调用ISR的时间与调用等待信号时间之和大于A/D的转换时间,所以CPU用于ISR和循环检测的开销大。
图3所示的方法显然适合于C8051F015单片机,其优点是:可以获得快速的转换时间;不需要增加一个复杂的ISR;转换时信号改变时间更短;CPU的开销小;循环检测程序可被中断,为中断信号服务。
3 A/D驱动程序的编写
外设驱动程序是实时内核和硬件之间的接口,是连接底层硬件和内核的纽带。编写驱动程序模块应满足以下主要功能:①对设备初始化;②把数据从内核传送到硬件从硬件读取数据;③读取应用程序传送给设备的数据和回送应用程序请求的数据;④监测和处理设备出现的异常。
A/D转换电路作为一个模拟输入模块,μC/OS-II内核应把它作为一个独立的任务(以下称为ADTask())来调用。A/D驱动程序模块流程如图4所示。ADInit()初始化所有的模拟输入通道、硬件ADC以及应用程序调用A/D模块的参量,并且ADInit()创建任务ADTask()。ADTb1[]是一个模拟输入通道信息、ADC硬件状态等参数配置以及转换结果存储表。ADUpdate()负责读取所有模拟输入通道, |
|
|
|
|
|