《【精品】tinyos操作系统开发技术及实践(西电版实践3平台移植(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】tinyos操作系统开发技术及实践(西电版实践3平台移植(可编辑.ppt(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、TinyOS操作系统开发技术及实践(西电版)实践3 平台移植实践3 平台移植 2 2实践指导实践指导 实践实践3.G.1ADC驱动的开发。【分析】(1)通过ADC(数模转换)驱动的开发理解发布平台上驱动开发的一般方法。(2)根据ADC特点,设计ADC驱动,包括ADC接口、实现接口的模块、提供接口的配件。(3)编写应用程序,测试ADC驱动。(4)将ADC驱动移动到平台的驱动目录中。(5)将驱动目录位置加入到“.platform”文件中。(6)重新编译应用程序,测试ADC驱动。实践3 平台移植 3 3【参考解决方案】【参考解决方案】1程序目录建立程序目录建立在cygwin的“opt/mytinos
2、/apps/”目录下建立“AdTest”目录。2ADC驱动设计驱动设计在“opt/mytinos/apps/AdTest/”目录下建立4个文件:Adc.h:定义与ADC控制相关的宏和常量。AdcControl.nc:ADC接口文件。AdcP.nc:实现ADC接口的模块文件。AdcC.nc:ADC配件文件,用于封装AdcP模块,以对外提供ADC的控制。实践3 平台移植 4 4(1)编写Adc.h文件,代码如下:/设置ADCCON3寄存器#define ADC_SINGLE_CONVERSION(settings)do ADCCON3=settings;while(0)/设置ADCCON2寄存器#
3、define ADC_SEQUENCE_SETUP(settings)do ADCCON2=settings;while(0)/参考电压常量#define ADC_REF_1_25_V 0 x00#define ADC_REF_P0_7 0 x40#define ADC_REF_AVDD 0 x80#define ADC_REF_P0_6_P0_7 0 xC0 实践3 平台移植 5 5/分辨率(精度):#define ADC_8_BIT 0 x00#define ADC_10_BIT 0 x10#define ADC_12_BIT 0 x20#define ADC_14_BIT 0 x30/输
4、入通道#define ADC_AIN0 0 x00#define ADC_AIN1 0 x01#define ADC_AIN2 0 x02#define ADC_AIN3 0 x03#define ADC_AIN4 0 x04#define ADC_AIN5 0 x05#define ADC_AIN6 0 x06#define ADC_AIN7 0 x07实践3 平台移植 6 6实践3 平台移植 7 7实践3 平台移植 8 8/设置ADC从通道0开始#define ADC_TRIGGER_FROM_TIMER1()do ADC_STOP();ADCCON1&=0 x10;while(0)/判断
5、转换是否结束#define ADC_SAMPLE_READY()(ADCCON1&0 x80)/设置或清除ADC通道#define ADC_ENABLE_CHANNEL(ch)ADCCFG|=(0 x01ch)#define ADC_DISABLE_CHANNEL(ch)ADCCFG&=(0 x01ch)实践3 平台移植 9 9(2)编写AdcControl接口代码:interface AdcControl /*启用ADC.*参数reference 参考电压 *参数resolution 精度(分辨率)*参数input 通道 */command void enable(uint8_t refer
6、ence,uint8_t resolution,uint8_t input);/*停用ADC */command void disable();实践3 平台移植 10 10(3)编写AdcP模块,用于实现AdcControl接口,代码如下:#include Adc.h#define ADC_MAX_RETRY 0 x7fffmodule AdcP provides interface Init;provides interface AdcControluint8_t id;provides interface Readuint8_t id;实践3 平台移植 11 11implementatio
7、n uint8_t referencesuniqueCount(UNIQUE_ADC_PORT);uint8_t resolutionsuniqueCount(UNIQUE_ADC_PORT);uint8_t inputsuniqueCount(UNIQUE_ADC_PORT);uint8_t counter;command error_t Init.init()uint8_t i;实践3 平台移植 12 12 for(i=0;i=0);if(retry=0)实践3 平台移植 16 16 /获取采样结果 value=(int16_t)(ADCL);value|=(int16_t)(ADCH 8
8、);/禁止 ADC_DISABLE_CHANNEL(inputsid);signal Read.readDoneid(SUCCESS,value);else /禁止 ADC_DISABLE_CHANNEL(inputsid);signal Read.readDoneid(FAIL,0);实践3 平台移植 17 17 return SUCCESS;task void signalReadDone()/signal Read.readDonetmp(SUCCESS,value);default event void Read.readDoneuint8_t id(error_t result,in
9、t16_t val)实践3 平台移植 18 18上述代码,AdcP模块实现了三个接口:Init接口:实现该接口的目的是进行ADC的初始化。AdcControl接口:实现该接口是模块的主要职责,具体实现ADC的启用和停止。Read接口:实现该接口的目的是真正实现ADC数据的读取。实践3 平台移植 19 19(4)编写ADC配件,代码如下:generic configuration AdcC()provides interface AdcControl;provides interface Read;implementation components MainC,AdcP;MainC.Softwa
10、reInit-AdcP.Init;enum ID=unique(UNIQUE_ADC_PORT),;实践3 平台移植 2020 AdcControl=AdcP.AdcControlID;Read=AdcP.ReadID;实践3 平台移植 21 213编写编写ADC测试程序测试程序在“opt/mytinos/apps/AdTest/”目录下建立三个文件:ADTestC.nc:应用程序核心应用模块。ADTestAppC.nc:应用程序顶层配置文件。Makefile:make脚本文件。实践3 平台移植 2222(1)编写ADTestC.nc文件,代码如下:#include Adc.hmodule A
11、DTestCuses interface Boot;interface AdcControl as ADSensorControl;interface Read as ADSensorRead;interface Leds;实践3 平台移植 2323implementationuint8_t m_len;uint8_t m_send_buf2;task void sensorTask()call Leds.led0On();call ADSensorControl.enable(ADC_REF_AVDD,ADC_14_BIT,ADC_AIN7);call ADSensorRead.read()
12、;event void Boot.booted()post sensorTask();实践3 平台移植 2424event void ADSensorRead.readDone(error_t result,int16_t val)call Leds.led1On();实践3 平台移植 2525(2)编写ADTestAppC.nc文件,代码如下:configuration ADTestAppCimplementationcomponents ADTestC as App;components new AdcC()as ADSensor;components MainC,LedsC;实践3 平台
13、移植 2626App.ADSensorControl-ADSensor;App.ADSensorRead-ADSensor;App.Boot-MainC.Boot;App.Leds-LedsC;实践3 平台移植 2727(3)编写Makefile文件,代码如下:COMPONENT=LedOnAppCinclude$(MAKERULES)(4)连接好硬件设备,在打开Cygwin后,进入“opt/mytinos/apps/Adtest/”目录,在命令行上运行“make cc2530 install”命令。执行结果如图S3-1所示,表示程序已经编译成功并下载至设备内。实践3 平台移植 2828图S3
14、-1 编译下载程序 实践3 平台移植 2929(5)观察执行结果,将看到LED0和LED1同时亮,这是因为ADC的转换时间很短,几乎感觉不到时间差。实践3 平台移植 30304将将ADC驱动移动到平台的驱动目录中驱动移动到平台的驱动目录中(1)在“opt/mytinyos/tos/”目录内建立“adc”子目录。(2)将“opt/mytinos/apps/AdTest/”目录下的“Adc.h”、“AdcControl.nc”、“AdcP.nc”、“AdcC.nc”文件移动(剪切)到“opt/mytinyos/tos/adc/”目录下,结果如图S3-2所示。实践3 平台移植 31 31图S3-2 移动驱动文件到平台驱动目录 实践3 平台移植 32325将驱动目录位置加入到将驱动目录位置加入到“.platform”文件中文件中打开“opt/mytinyos/tos/platforms/cc2530/.platform”文件,添加驱动目录,如图S3-3所示。6重新编译应用程序,测试重新编译应用程序,测试ADC驱动驱动在命令行上重新运行“make cc2530 install”命令,若没有错误,则显示如图S3-1所示的运行结果。实践3 平台移植 3333图S3-3 添加驱动搜索目录