《TinyOS操作系統(tǒng)開發(fā)技術(shù)及實(shí)踐(西電版)實(shí)踐3平臺移植》由會員分享,可在線閱讀,更多相關(guān)《TinyOS操作系統(tǒng)開發(fā)技術(shù)及實(shí)踐(西電版)實(shí)踐3平臺移植(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,實(shí)踐3 平臺移植,*,實(shí)踐3 平臺移植,實(shí)踐指導(dǎo),實(shí)踐指導(dǎo) 實(shí)踐3.G.1ADC驅(qū)動的開發(fā)?!痉治觥?1)通過ADC(數(shù)模轉(zhuǎn)換)驅(qū)動的開發(fā)理解發(fā)布平臺上驅(qū)動開發(fā)的一般方法。(2)根據(jù)ADC特點(diǎn),設(shè)計ADC驅(qū)動,包括ADC接口、實(shí)現(xiàn)接口的模塊、提供接口的配件。(3)編寫應(yīng)用程序,測試ADC驅(qū)動。(4)將ADC驅(qū)動移動到平臺的驅(qū)動目錄中。(5)將驅(qū)動目錄位置參加到“.platform文件中。(6)重新編譯應(yīng)用程序,測試ADC驅(qū)動。,【參考解決方案】1程序目錄建立在cygwin的“opt/mytinos/apps/目錄下建立“AdTest目錄。2ADC驅(qū)動設(shè)計在“opt/m
2、ytinos/apps/AdTest/目錄下建立4個文件:Adc.h:定義與ADC控制相關(guān)的宏和常量。AdcControl.nc:ADC接口文件。AdcP.nc:實(shí)現(xiàn)ADC接口的模塊文件。AdcC.nc:ADC配件文件,用于封裝AdcP模塊,以對外提供ADC的控制。,編寫Adc.h文件,代碼如下:/設(shè)置ADCCON3存放器#define ADC_SINGLE_CONVERSION(settings)do ADCCON3=settings;while(0)/設(shè)置ADCCON2存放器#define ADC_SEQUENCE_SETUP(settings)do ADCCON2=settings;wh
3、ile(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,/分辨率(精度):#define ADC_8_BIT 0 x00#define ADC_10_BIT 0 x10#define ADC_12_BIT 0 x20#define ADC_14_BIT 0 x30/輸入通道#define ADC_AIN0 0 x00#define ADC_AIN1 0 x01#define ADC_AIN2 0 x02
4、#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,#define ADC_AIN0_AIN1 0 x08#define ADC_AIN2_AIN3 0 x09#define ADC_AIN4_AIN5 0 x0A#define ADC_AIN6_AIN7 0 x0B#define ADC_GND 0 x0C#define ADC_PVR 0 x0D#define ADC_TEMP_SENS 0 x0E#define ADC_
5、VDD_3 0 x0F,/-/開啟ADC連續(xù)轉(zhuǎn)換#define ADC_SAMPLE_CONTINUOUS()do ADCCON1 while(0),/設(shè)置ADC從通道0開始#define ADC_TRIGGER_FROM_TIMER1()do ADC_STOP();ADCCON1 while(0)/判斷轉(zhuǎn)換是否結(jié)束#define ADC_SAMPLE_READY()(ADCCON1&0 x80)/設(shè)置或去除ADC通道#define ADC_ENABLE_CHANNEL(ch)ADCCFG|=(0 x01ch)#define ADC_DISABLE_CHANNEL(ch)ADCCFG&=(0
6、x01ch),(2)編寫AdcControl接口代碼:interface AdcControl /*啟用ADC.*參數(shù)reference 參考電壓 *參數(shù)resolution 精度(分辨率)*參數(shù)input 通道 */command void enable(uint8_t reference,uint8_t resolution,uint8_t input);/*停用ADC */command void disable();,(3)編寫AdcP模塊,用于實(shí)現(xiàn)AdcControl接口,代碼如下:,#include Adc.h#define ADC_MAX_RETRY 0 x7fffmodule
7、AdcP,provides interface Init;provides interface AdcControluint8_t id;provides interface Readuint8_t id;,implementation 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()
8、uint8_t i;,for(i=0;i=0),/獲取采樣結(jié)果 value=(int16_t)(ADCL);value|=(int16_t)(ADCH AdcP.Init;enum ID=unique(UNIQUE_ADC_PORT),;,AdcControl=AdcP.AdcControlID;Read=AdcP.ReadID;,3編寫ADC測試程序在“opt/mytinos/apps/AdTest/目錄下建立三個文件:ADTestC.nc:應(yīng)用程序核心應(yīng)用模塊。ADTestAppC.nc:應(yīng)用程序頂層配置文件。Makefile:make腳本文件。,(1)編寫ADTestC.nc文件,代碼如
9、下:,#include Adc.hmodule ADTestCuses interface Boot;interface AdcControl as ADSensorControl;interface Read as ADSensorRead;interface Leds;,implementationuint8_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 ADSens
10、orRead.read();event void Boot.booted()post sensorTask();,event void ADSensorRead.readDone(error_t result,int16_t val)call Leds.led1On();,(2)編寫ADTestAppC.nc文件,代碼如下:,configuration ADTestAppCimplementationcomponents ADTestC as App;components new AdcC()as ADSensor;components MainC,LedsC;,App.ADSensorCon
11、trol-ADSensor;App.ADSensorRead-ADSensor;App.Boot-MainC.Boot;App.Leds-LedsC;,(3)編寫Makefile文件,代碼如下:COMPONENT=LedOnAppCinclude$(MAKERULES)(4)連接好硬件設(shè)備,在翻開Cygwin后,進(jìn)入“opt/mytinos/apps/Adtest/目錄,在命令行上運(yùn)行“make cc2530 install命令。執(zhí)行結(jié)果如圖S3-1所示,表示程序已經(jīng)編譯成功并下載至設(shè)備內(nèi)。,圖S3-1 編譯下載程序,(5)觀察執(zhí)行結(jié)果,將看到LED0和LED1同時亮,這是因?yàn)锳DC的轉(zhuǎn)換時間
12、很短,幾乎感覺不到時間差。,4將ADC驅(qū)動移動到平臺的驅(qū)動目錄中(1)在“opt/mytinyos/tos/目錄內(nèi)建立“adc子目錄。(2)將“opt/mytinos/apps/AdTest/目錄下的“Adc.h、“AdcControl.nc、“AdcP.nc、“AdcC.nc文件移動(剪切)到“opt/mytinyos/tos/adc/目錄下,結(jié)果如圖S3-2所示。,圖S3-2 移動驅(qū)動文件到平臺驅(qū)動目錄,5將驅(qū)動目錄位置參加到“.platform文件中翻開“opt/mytinyos/tos/platforms/cc2530/.platform文件,添加驅(qū)動目錄,如圖S3-3所示。6重新編譯應(yīng)用程序,測試ADC驅(qū)動在命令行上重新運(yùn)行“make cc2530 install命令,假設(shè)沒有錯誤,那么顯示如圖S3-1所示的運(yùn)行結(jié)果。,圖S3-3 添加驅(qū)動搜索目錄,