资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实践3 平台移植 1 1实践3 平台移植 实践指导 邯评铜袋鳖自刺川牟伦岛板躁膜护挑渴抬掀譬车冗说蓑嗓笆居二搭聋扫恕TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2 2实践指导实践指导 实践实践3.G.1ADC驱动的开发。【分析】(1) 通过ADC(数模转换)驱动的开发理解发布平台上驱动开发的一般方法。(2) 根据ADC特点,设计ADC驱动,包括ADC接口、实现接口的模块、提供接口的配件。(3) 编写应用程序,测试ADC驱动。(4) 将ADC驱动移动到平台的驱动目录中。(5) 将驱动目录位置加入到“.platform”文件中。(6) 重新编译应用程序,测试ADC驱动。穿粪违滑擅明世册齿扛肮硼汇贮仲隆刨曝啊簇汪旋倍介乡引松嘴怕骏尘叮TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 3 3【参考解决方案】【参考解决方案】1程序目录建立程序目录建立在cygwin的“opt/mytinos/apps/”目录下建立“AdTest”目录。2ADC驱动设计驱动设计在“opt/mytinos/apps/AdTest/”目录下建立4个文件:Adc.h:定义与ADC控制相关的宏和常量。AdcControl.nc:ADC接口文件。AdcP.nc:实现ADC接口的模块文件。AdcC.nc:ADC配件文件,用于封装AdcP模块,以对外提供ADC的控制。酉咖咸施澎沫猎效砍返臀将茹边圈纳碗吃压准酬馏责傀凭梭殆蝗痘搂馈峦TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 4 4(1)编写Adc.h文件,代码如下:/设置ADCCON3寄存器#define ADC_SINGLE_CONVERSION(settings) do ADCCON3 = settings; while(0)/设置ADCCON2寄存器#define ADC_SEQUENCE_SETUP(settings) do ADCCON2 = settings; while(0)/参考电压常量#define ADC_REF_1_25_V 0x00 #define ADC_REF_P0_7 0x40 #define ADC_REF_AVDD 0x80#define ADC_REF_P0_6_P0_7 0xC0 花擂赂公阁碟彼烽激唇寇缄倪吭绪缨键丘羚偶痴史辛夸翅闻影尺污惦裔技TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 5 5/ 分辨率 (精度):#define ADC_8_BIT 0x00#define ADC_10_BIT 0x10#define ADC_12_BIT 0x20#define ADC_14_BIT 0x30/ 输入通道#define ADC_AIN0 0x00 #define ADC_AIN1 0x01 #define ADC_AIN2 0x02#define ADC_AIN3 0x03#define ADC_AIN4 0x04 #define ADC_AIN5 0x05#define ADC_AIN6 0x06#define ADC_AIN7 0x07拽搔恿颊捻割支庄贿颅缎栋遇岔擎榔耗瑰炭宴境莹蘸题数拇贡聪蕴符盒珠TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 6 6#define ADC_AIN0_AIN1 0x08#define ADC_AIN2_AIN3 0x09 #define ADC_AIN4_AIN5 0x0A #define ADC_AIN6_AIN7 0x0B#define ADC_GND 0x0C#define ADC_PVR 0x0D #define ADC_TEMP_SENS 0x0E #define ADC_VDD_3 0x0F 款浦蟹龙砚嘻嫂纲访囤傅订虹迅凋灭躬爽汰忧耪居蜡翼棺熙搅虐释姬莱宣TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 7 7/-/开启ADC连续转换#define ADC_SAMPLE_CONTINUOUS() do ADCCON1 &= 0x30; ADCCON1 |= 0x10; while (0)/ 停止ADC的连续转换#define ADC_STOP() do ADCCON1 |= 0x30; while (0)/初始化单端输入的ADC转换#define ADC_SAMPLE_SINGLE() do ADC_STOP(); ADCCON1 |= 0x40; while (0)各脱咯应苗策衍霜英子簇聂埔露徐桌颓嘉亮怜算镭霍饥系菲犯役鲤烛冗贯TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 8 8/设置ADC从通道0开始#define ADC_TRIGGER_FROM_TIMER1() do ADC_STOP(); ADCCON1 &= 0x10;while (0)/判断转换是否结束#define ADC_SAMPLE_READY() (ADCCON1 & 0x80)/设置或清除ADC通道#define ADC_ENABLE_CHANNEL(ch) ADCCFG |= (0x01ch)#define ADC_DISABLE_CHANNEL(ch) ADCCFG &= (0x01ch)武允汲擞丘优拂揉杆邻蓉断赔沧空牛落阎煮藤胚辛就料辜时杠舶粕盂氮担TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 9 9(2) 编写AdcControl接口代码:interface AdcControl /* *启用ADC. * 参数reference 参考电压 * 参数resolution 精度(分辨率) * 参数input 通道 */ command void enable(uint8_t reference, uint8_t resolution, uint8_t input); /* * 停用ADC */ command void disable();捡蕴常炭惋产享川褐僵勇酗蛇坝专率碾毖劈赖橇琅片挎柬驹桅蝶暴腥氨竭TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 1010(3) 编写AdcP模块,用于实现AdcControl接口,代码如下:#include Adc.h#define ADC_MAX_RETRY 0x7fffmodule AdcP provides interface Init; provides interface AdcControluint8_t id; provides interface Readuint8_t id;聚笼腺呕冬恼杖阂缓副眺怂失绿叠盖拌谤似帚花枯浦败薪垫织账政笺掸蛋TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 1111implementation 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; 冤疟览阳佳虞扭萤别绅姨买兄纵哺谴斩吞瘪肝路潦杭增撤驶阑凰舌斤桨笑TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 1212 for (i = 0; i = 0) ); if (retry = 0) 雀斯蝴偏功涯仅派玻遍巫逆局比嘴傻愉劈荤粹哨腰鞋拥泵地泵校往葬债雌TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 1616 /获取采样结果 value = (int16_t) (ADCL); value |= (int16_t) (ADCH 8); / 禁止 ADC_DISABLE_CHANNEL(inputsid); signal Read.readDoneid(SUCCESS, value); else / 禁止 ADC_DISABLE_CHANNEL(inputsid);signal Read.readDoneid(FAIL, 0); 磊泌咀稻月疮我辗隧寇衰酚右孤亚涡纳瞥珊宜癸殊惯捍斑矮挝搪六田疥滦TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 1717 return SUCCESS; task void signalReadDone() /signal Read.readDonetmp(SUCCESS, value); default event void Read.readDoneuint8_t id(error_t result, int16_t val) 芹士宙惹著莉课欢孩讲擂微檀吴泞此景篡谤购藏额筹柞上抢粱厨臆辱遵淫TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 1818上述代码,AdcP模块实现了三个接口:Init接口:实现该接口的目的是进行ADC的初始化。AdcControl接口:实现该接口是模块的主要职责,具体实现ADC的启用和停止。Read接口:实现该接口的目的是真正实现ADC数据的读取。喧么窟妇围搭镊蒸轨宝灵皑舶文轿话檀艾介驱汉坡逗六虽挪翼摩涨荡责只TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 1919(4) 编写ADC配件,代码如下:generic configuration AdcC() provides interface AdcControl; provides interface Read;implementation components MainC, AdcP; MainC.SoftwareInit - AdcP.Init; enum ID = unique(UNIQUE_ADC_PORT), ;消臣皂潘恭席皋侦晚粟知荐铁辐擅采蓟瞥懂绑法株绷鸦美陋堵结什屈熔疡TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2020 AdcControl = AdcP.AdcControlID; Read = AdcP.ReadID;奥银虫韶响馏狄勇傣良欲葫蒸琵钮赫躬相明风腆悸蕴怒挤毅酚证出撞份辩TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 21213编写编写ADC测试程序测试程序在“opt/mytinos/apps/AdTest/”目录下建立三个文件:ADTestC.nc:应用程序核心应用模块。ADTestAppC.nc:应用程序顶层配置文件。Makefile:make脚本文件。企去痛冶提洽术拔厩司队夸垫亲政僻言啸盐咯库滋助境酉央皱恰闽浴苫瑰TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2222(1) 编写ADTestC.nc文件,代码如下:#include Adc.hmodule ADTestCuses interface Boot;interface AdcControl as ADSensorControl;interface Read as ADSensorRead;interface Leds;笛东滁黍柏胀启伪九怂惰椽朱气婆陋鹿旧瞎傣腰蚊歇沦垫筛请颇困导冷卉TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践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();event void Boot.booted()post sensorTask();殿凹趴揩魂炔租简晋巷蔚倪它颁错矛虱过嘲岔窖朱纺苦魏胀仗喻悸侵坚巴TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2424event void ADSensorRead.readDone(error_t result, int16_t val) call Leds.led1On(); 晃酿目喜欲酶恒每橇诊尧反壕输莆霓奈尼矣端描屈周寿液做桶群冀遣骚惹TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2525(2) 编写ADTestAppC.nc文件,代码如下:configuration ADTestAppCimplementationcomponents ADTestC as App; components new AdcC() as ADSensor;components MainC,LedsC;嘛丸冯楼废精链观扫医恼粤痈吭拯锨侗沫吁困轩畏邢血阐胖附怎耘御丽炒TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2626App.ADSensorControl - ADSensor; App.ADSensorRead - ADSensor;App.Boot - MainC.Boot;App.Leds - LedsC;所趾双顽赎谜厢排阑谬炼佛黑感疤属颜膨耪历闺由辛炊严沫阔贤瞳皑佣偷TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2727(3) 编写Makefile文件,代码如下:COMPONENT=LedOnAppCinclude $(MAKERULES)(4) 连接好硬件设备,在打开Cygwin后,进入“opt/mytinos/apps/Adtest/”目录,在命令行上运行“make cc2530 install”命令。执行结果如图S3-1所示,表示程序已经编译成功并下载至设备内。蒂痰掂羊矣洼借摈摸室昭骆惜瓷趴病侧即甚潮赊后经谍畅泅瞥悔迭哩迫加TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2828图S3-1 编译下载程序 面妻骂贺晕踊贺哭债咎彤硫库赤漫鹊藉扣莆母小专肌居顷度柴欣笺鸿钨傣TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 2929(5) 观察执行结果,将看到LED0和LED1同时亮,这是因为ADC的转换时间很短,几乎感觉不到时间差。疫找歌呈泉慑堵破接斥殉段豫捡硅牡莹篙诧斤虽消抚幅恶来娜侧奶券练格TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践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所示。壬学恩叫父艾啦吼夷棠郊送坝促贡克涅娟公隙啮昂历豪疯沪蓬木湍槽襄护TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 3131图S3-2 移动驱动文件到平台驱动目录 颜忍形如峭胰蝗拨宏劳恿遭捆瘪卑岭甥礼巾匿翟搂蜘熬饥劲届缎肾辫凌松TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 32325将驱动目录位置加入到将驱动目录位置加入到“.platform”文件中文件中打开“opt/mytinyos/tos/platforms/cc2530/.platform”文件,添加驱动目录,如图S3-3所示。6重新编译应用程序,测试重新编译应用程序,测试ADC驱动驱动在命令行上重新运行“make cc2530 install”命令,若没有错误,则显示如图S3-1所示的运行结果。抱峡俺趟横嚼羽炭卞扭腥嘛婿干舞荒绚滨尖辑荐蛙骂伸蜂豌高融鳃末坠诵TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植实践3 平台移植 3333图S3-3 添加驱动搜索目录 利蔑蓄袄狼汪祟君磺工弊恫郎剂范钉狗寡诫琢膛豁真臻且兄陛蔑薪滥倪恫TinyOS操作系统开发技术及实践(西电版)践3 平台移植TinyOS操作系统开发技术及实践(西电版)践3 平台移植
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号