μC/OS-II实时内核下的A/D驱动程序设计
- 编辑:admin -μC/OS-II实时内核下的A/D驱动程序设计
片上还集成有9通道10位A/D转换接口电路、SMBus /I2C、SPI串行接口,所以CPU用于ISR和循环检测的开销大。
要害词:C/OS-II A/D 驱动措施 C8051F015 A/D转换是单片机数据收罗系统的重要构成部门, ,驱动措施接着在一个软件循环中期待(③)ADC直到完成转换,从措施1中ISR伪代码可以看出,图2中的要领,在转换之前还要加上3个系统时钟的跟踪/保持捕捉时间,ADUpdate()卖力读取所有模拟输入通道,信号量凌驾(③),它的内核CIP-51与MCS-51的指令集完全兼容,ADTb1[]是一个模拟输入通道信息、ADC硬件状态等参数配置以及转换功效存储表,并将转换功效返回到应用措施(⑤),一般在启动ADC之前都要处于跟踪方法,则可以用第三种要领,最后驱动措施读取ADC转换功效(④), 2 C8051F015单片机的A/D转换器 2.1 C8051C015单片机 C8051C015的美国Cygnal公司新推出的高速SOC型C8051Fxxx系列单片机,也可用软件查询这个状态位,要对各个模拟输入通道进行校准和赔偿(凡是在应用措施中编写通道赔偿函数),为间断信号处事,在C/OS-II内核移植到8位单片机C8051F015的基本上,情况、转换精度城市影响到转换功效,以及返回ADC转换功效到ADUpdate(),典范的A/D转换典范的A/D转换电路由模拟多路复用器(MUX)、放大器和模数转换器(ADC)三部门构成,这些要领和思想为在C/OS-II下会见其它类型的A/D提供了很好的借鉴,须有内存中开辟缓冲区; ③在应用措施读取设备之前,指令执行速度有很大的提高,驱动措施伪代码如下: ADRd(ChannelNumber){ 选择要读取的模拟输入通道; 期待AMUX输出不变; 启动ADC转换; 启动超时按时器; while(ADC Busy %26;amp; Counter 0);/*循环检测*/ if(Counter==0){ *err=信号错误; return; }else{ 读取ADC转换功效并将其返回到应用措施; } } A、D转换速度快, A/D转换电路作为一个模拟输入模块,表1给出了所需最小分频系数与SYSCLK(系统时钟)的干系(ADC0CF为ADC配置寄存器),启动并期待ADC转换,有,假如ADC在划定的时限内没有完成转换,及时内核下A/D驱动措施的实现历程主取决于A/D转换器的转换时间,寄存器ADC0CN是配置启动和跟踪方法的控制寄存器,ISR给信号量发一个信号(⑤),转换时间在ms级以上,www.53d.org,ADC发生的其间断信号,必然要初始化硬件(调用初始化函数),尽管ISR用汇编语言编写,C8051Fxxx系列单片机回收流水线布局,应用措施调用图1所示的驱动措施。
要求ISR执行时间与调用期待信号的时间之和为A/D转换时间。
是连接底层硬件和内核的纽带,介绍编写 A/D驱动措施的一般思想和要领,A/D中还集成了跟踪保持电路和可编程窗口检测器,一般的A/D中不带有FIFO缓冲区, 摘要:详细阐明在C/OS-II及时内核下驱动措施读取A/D的三种要领;论述 C8051F015单片机的A/D转换器的配置、转换特点及其驱动措施读取A/D回收的要领;针对C8051F015单片机阐明A/D驱动措施设计的要领和思想,而ADC一次转换完成要用16个系统时钟,驱动措施检测ADC的状态(BUSY)信号,如图3所示,并通报要读取的通道,CIP-51的系统时钟频率在0~25MHz。
AD ADTbl[AD_MaxNummber]:AD类型的数组(AD是界说的数据布局), 图4 A/D驱动措施模块流程图 3 A/D驱动措施的编写 外设驱动措施是及时内核和硬件之间的接口。
尤其是了解A/D的转换速度; ②对付转换速度快的A/D转换器,初始化硬件A/D(通过ADInitI())及建设任务ADTask()*/ void ADTask (void data); /*由ADInit()建设,假如在循环期待中,代码效率高,驱动措施回收什么要领读取A/D采样数据是首先考虑的问题,本文首先比力和阐明C/OS-II下A/D采样数据的三种要领;其次介绍C8051F015单片机A/D模数转换器配置及特点;最后,ADRd()卖力通过多路复用器选择符合的模拟输入, 图1中的要领简朴,延时时间必需比ADC转换时间长,而且ADInit()建设任务ADTask(),每次转换结束时,转换时钟应不大于2MHz,其长处是:可以得到快速的转换时间;不需要增加一个庞大的ISR;转换时信号改变时间更短;CPU的开销小;循环检测措施可被间断,。
前两步(①②同以上两种要领)结束后,驱动措施和间断处事子措施(ISR)的伪代码如下: ADRd(ChannelNumber) { 选择要读取的模拟输入通道; 期待AMUX输出不变; 启动ADC转换; 期待来自ADC转换结束间断发生的信号量; if(超时){ *eer=信号错误; return; }else{ 读取ADC转换功效并将其返回到应用措施; } } ADCoversion Complete ISR { 生存全部CPU寄存器; /*将CPU的PSW、ACC、B、DPL、DPH及Rn入栈*/ 通知内核进入ISR(调用OSIntEnter()或OSIntNesting直接加1); 发送ADC转换完成信号; /*操作C/OS-II内核的OSSemPost()*/ 通知内核退出ISR(调用OSIntExit()); 规复所有CPU寄存器;/*将CPU的PSW、ACC、B、DPL、DPH及Rn出栈*/ 执行间断返回指令(即RETI); } 在这种要领里,这种驱动措施的实现是最好的。
接着。
C8051F015具有32KB的内存、2304B 的RAM(片内256B、片外2048B), AD_MaxNummber:AMUX的输入通道数,通知驱动措施, 假如A/D转换时间小于处理惩罚间断时间与期待信号所需的时间之和。
所以完成一次转换需19个ADC转换时钟(9.5s),下面描述读取A/D的三种要领,并之不变下来,与尺度的8051对比, 1 C/OS-II及时内核下的A/D读要领 及时内核下,检测到ADC发出转换结束的信号(BUSY)时,在循环期待时,A/D驱动措施模块流程如图4 所示, AD_TaskStkSize:设置分派给任务ADTask()的仓库巨细。
包罗初始化所有内部变量(通过ADInit()初始化ADTb[]),很多因素将影响读取A/D,但最主要的取决于A/D的转换时间,延时几s以便使信号通过MUX通报,公道界说硬件的信息和状态变量; ④差异的输入通道收罗到差异类型数据。
则驱动措施不再期待下去, 2.3 ADC转换速度 C8051Fxxx系列单片机中ADC的速率都是可编程设置的,70%的指令执行时间为1个或2个系统时钟周期,CIP-51内核具有尺度8052的所有外设部件, 图2所示的是第2种读取要领。
为了淘汰C/OS-II内核调用 ISR所用时间, AD_TaskDly:设定更新通道的隔断时间,则结束期待循环(循环等超时),驱动措施读取ADC转换功效(④)并将功效返回到应用措施(⑤), 图3所示的要领显然适合于C8051F015单片机,然后驱动措施延时一段时间以完成转换(③_,ADC被触发开始转换(②), 图1所示的是第1种读取要领,驱动措施通过MUX选择要读取的模拟通道(①)开始读,假设A/D转换器的转换时间较慢(5ms以上),ISR一般都用于汇编语言编写,当模拟转换完成后,C/OS-II内核应把它作为一个独立的任务(以下称为ADTask())来调用,可能呈现CPU的处理惩罚速度与A/D转换速度不匹配,不合用于C8051F015, 在C/OS-II这时内核下各原型函数、数据布局和常量的界说如下: INT16S ADRd(INT8U ch); /*界说如何读取A/D。
ADC0CH的ADBUSY(忙符号)的下降沿触发间断, 2.2 C8051F015的A/D转换电路 C8051F015的A/D转换电路包罗1个9通道可配置模拟多路开关AMUX(8路用于外部模拟输入、1路用于芯片情况温度的丈量)、1个可编程增益放大器PGA和1个100ksps 10位鉴别率的逐次迫近型ADC,如A/D的转换时间、模拟值的转换频率、输入通道数等,ADC已经完成转换,www.aepnet.com,卖力更新输入通道(调用ADUpdate ())*/ void ADInitI (void); /*初始化硬件A/D*/ AD_TaskPrio:设置任务ADTask()的优先级,阐明接口电路的特点,A/D必需通过AIRd()来驱动*/ void ADUpdate(void); /*一按时间内更新输入通道*/ void ADInit(void); /*A/D模块初始化代码, CIP-51内核的指令执行时间是以系统时钟为单元,会见ADRd()并通报给它一个通道数, 表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单片机中。
但C/OS-II调用ISR 的时间与调用期待信号时间之和大于A/D的转换时间,一般用于变革慢的模拟输入信号,假如期待时间凌驾设定的按时值(软件按时),若ADC转换完成。
4 结论 对付A/D转换器接口电路驱动措施的编写归纳出以下几点: ①在决定回收具体的驱动方案之前,ADC的转换时钟周期至少在400ns,ADInit()初始化所有的模拟输入通道、硬件ADC以及应用措施调用A/D模块的参量。
编写驱动措施模块应满足以下主要成果:①对设备初始化;②把数据从内核传送到硬件从硬件读取数据;③读取应用措施传送给设备的数据和回送应用措施请求的数据;④监测和处理惩罚设备呈现的异常, ADC有4种启动方法:软件呼吁、按时器2溢出、按时器3溢出及外部信号输入,pdf转换器,另外。