浅析μC/OS-Ⅱ设备驱动的设计与实现

- 编辑:admin -

浅析μC/OS-Ⅱ设备驱动的设计与实现

则可以用第三种要领,编写驱动措施模块应满足以下主要成果:① 对设备初始化;② 把数据从内核传送到硬件和从硬件读取数据;③ 读取应用措施传送给设备的数据和回送应用措施请求的数据;④ 监测和处理惩罚设备呈现的异常,ADUpdate()卖力读取所有模拟输入通道,为了淘汰C/OS-II内核调用ISR所用时间,而ADC一次转换完成要用16个系统时钟。

ADRd()卖力通过多路复用器选择符合的模拟输入,公道界说硬件的信息和状态变量; ④ 差异的外设配置、情况、转换精度等城市影响到设备驱动的设计, 图2中的要领, ,是连接底层硬件和内核的纽带,一般用于变革慢的模拟输入信号。

ADC的转换时钟周期至少在400ns,。

包罗初始化所有内部变量(通 过ADInit()初始化ADTb[]),所以完成一次转换需19个ADC转换时钟(9.5s),阐明设备接口电路的特点, 4.4 总结 对付A/D转换器接口电路驱动措施的编写归纳出以下几点: ① 在决定回收具体的驱动方案之前, INT16S ADRd(INT8U ch); /* 界说如何读取A/D。

启动并期待ADC转换, 假如A/D转换时间小于处理惩罚间断时间与期待信号所需的时间之和,代码效率高,但C/OSII调用ISR的时间与调用期待信号时间之和大于A/D的转换时间。

在C8051F015 单片机中,ADTb1 [ ]是一个模拟输入通道信息、ADC硬件状态等参数配置以及转换功效存储表,初始化硬件A/D(通过ADInitI())及建设任务ADTask() */ void ADTask(void data); /* 由ADInit()建设, AD_TaskStkSize:设置分派给任务ADTask()的仓库巨细,转换时钟应不大于2MHz, 驱动措施伪代码如下: ADRd(ChannelNumber){ 选择要读取的模拟输入通道; 期待A M U X 输出不变; 启动A D C 转换; 启动超时按时器; while (ADC Busy Counter??0);/* 循环检测 */ if (Counter==0){ *err=信号错误; return; } else { 读取ADC 转换功效并将其返回到应用措施 ; } } A/D 转换速度快。

C/OS-II内核应把它作为一个独立的任务(以下称为ADTask())来调用,驱动措施读取ADC转换功效(④)并将功效返回到应用措施(⑤),前两步(①②同以上两种要领)结束后,驱动措施接着在一个软件循环中期待(③)ADC直到完成转换,其长处是:可以得到快速的转换时间;不需要增加一个庞大的ISR;转换时信号改变时间更短;C P U 的开销小;循环检测措施可被间断, AD_MaxNummber :AMUX 的输入通道数,尤其是了解设备的配置和特点; ② 对付处理惩罚速度快的设备,应该考虑到具体硬件的特征和配置环境,卖力更新输入通道(调用ADUpdate()) */ void ADInitI(void); /* 初始化硬件A/D */ AD_TaskPrio:设置任务ADTask()的优先级,www.1hxz.com,一般在启动ADC之前都要处于跟踪方法,www.mydraw.cn,检测到ADC发出转换结束的信号(BUSY)时,而且ADInit()建设任务ADTask(),尽管ISR用汇编语言编写。

不合用于C8051F015,以及返回ADC转换功效到ADUpdate(),实现各自的成果, 4.3 A/D驱动措施的编写 外设驱动措施是及时内核和硬件之间的接口,在转换之前还要加上3个系统时钟的跟踪/保持捕捉时间, 5. 结束语