付費下載
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
CC2430中的Key中斷程CC2430Key 2009-03-2401:14 閱讀156 評論1 字號:大大小小CC2430中的Key中斷程序這篇文章是關于TI的CC2430中按鍵中斷的詳細說明,是在看ZStack代碼后的總結,按鍵中斷涉化,消息的傳遞,等等。希望通過這篇文章對你使用ZStack有一定的幫助。voidosalTaskAdd(constpTaskInitFnpfnInit,constbyte該函數(shù)將一個任務加入,由操作系統(tǒng)自動分 TASK_ID{/*ThistaskmustbeloadedfirstbecauseHal_Init()initializesmanythingsthatothertask_initfunctionsmayneed.osalTaskAdd(Hal_Init,Hal_ProcessEvent,OSAL_TASK_PRIORITY_LOWosalTaskAdd(ma osalTaskAdd(MT_TaskInit,MT_ProcessEvent,OSAL_TASK_PRIORITY_LOW);osalTaskAdd(nwk_init,nwk_event_loop,OSAL_TASK_PRIORITY_MED);osalTaskAdd(APS_Init,APS_event_loop,OSAL_TASK_PRIORITY_LOW);osalTaskAdd(ZDApp_Init,ZDApp_event_loop,OSAL_TASK_PRIORITY_LOW);osalTaskAdd(SampleApp_Init,SampleApp_ProcessEvent,OSAL_TASK_PRIORITY_LOW}byteosal_set_event(bytetask_id,UINT16event_flag任務,這個數(shù)據(jù)包里一般情況下也攜帶了標志event_flag。OSAL任務初始化里有這樣一個語句:voidosalAddTasks(void){:voidHal_Init(uint8task_id{/*RegistertaskID*/}uint16Hal_ProcessEvent(uint8task_id,uint16events{uint8if(events& //如果是HAL_KEY_EVENT就執(zhí)行下面的操{/*Checkforkeys*//*ifinterruptdisabled,donextpolling*/if(!Hal_KeyIntEnable){//實現(xiàn)按鍵的重復查詢,osal_start_timerEx//在100毫秒系統(tǒng)時間后,將HAL_KEY_EVENT傳遞給Hal_TaskID所對應//任務,啟動該任務,這里順便提到HAL_KEY_EVENT在hal_drivers.h中給了定義。定//#define //#define //#defineHAL_SLEEP_TIMER_EVENT}#endif//returnevents^}#define#define/*p0#define/*5#define/*PortSelectRegisterforSW5#define/*PortDirectionRegisterforSW5#define/*PortInputModeRegisterforSW5#define/*InterruptEnableRegisterforSW5#define/*InterruptEnablebitforSW5#define/*TypeofinterruptforSW5#define/*EdgeTypeenablebitSW5#define/*PortInterruptControlforSW5#define/*InterruptenablebitforSW5#define/*PortInterruptFlagforSW5voidHalKeyInitvoid)voidHalKeyConfigboolinterruptEnablehalKeyCBack_tcback)uint8HalKeyReadvoid)voidHalKeyPollvoid)voidhalProcessKeyInterruptvoid)voidHalKeyEnterSleepvoid)uint8HalKeyExitSleepvoid)HAL_ISR_FUNCTIONhalKeyPort0IsrP0INT_VECTOR)p0口;HAL_ISR_FUNCTIONhalKeyPort1IsrP1INT_VECTOR)p1口;HAL_ISR_FUNCTIONhalKeyPort2IsrP2INT_VECTOR)p2口;voidHalKeyInit(void{/*Initializepreviouskeyto0*/halKeySavedKeys=0;#ifdefinedHAL_KEY_SW_5_SEL&=~(HAL_KEY_SW_5_BIT); /*p0SEL的第5位置0,把P0.5作為普通IO口*/HAL_KEY_SW_5_DIR&=~(HAL_KEY_SW_5_BIT); /*p0DIR的第5位置0,把P0.5作為輸*/HAL_KEY_SW_5_INP|=HAL_KEY_SW_5_BIT; /*Setpininputmodeto三態(tài)*//*回調函數(shù)的初始化,賦值為NULL*/ =NULL;HalKeyConfigured=FALSE;#endif/*HAL_KEY}{/*/*pHalKeyProcessFunction*/pHalKeyProcessFunction=cback;/**/if(Hal_KeyIntEnable){要p2口的中斷。///#ifdefined///#undef /*Dis-allowSW5whenkeyinterruptis#ifdefinedPICTL&=~(HAL_KEY_SW_5_EDGEBIT); /**/#if(HAL_KEY_SW_5_EDGE==HAL_KEY_FALLING_EDGE)HAL_KEY_SW_5_ICTL|= /*允許中斷HAL_KEY_SW_5_PXIFG=~(HAL_KEY_SW_5_BIT); /**/斷模式*/if(HalKeyConfigured=={}HalKeyConfigured=TRUE;#endif/*HAL_KEY}uint8HalKeyRead(void{uint8keys=#ifdefined /*Keyisactivehigh{keys|=}#endif/*HAL_KEY}voidHalKeyPollvoidHalKeyPoll{uint8keys=#ifdefined /*Keyisactivehigh{keys|=}/*InvokeCallbackifnewkeysweredepressed*/if(keys&&(pHalKeyProcessFunction)){}#endif/*HAL_KEY}{ #ifdefined /*1{HAL_KEY_SW_5_PXIFG=~(HAL_KEY_SW_5_BIT); /**/valid=TRUE;}if{ /*和相關#endif/*HAL_KEY}HAL_ISR_FUNCTION(halKeyPort0Isr,P0INT_VECTOR{/*P0IFisclearedbyHWforCHVER<REV_Eif(CHVER>=REV_E{/*Makesurethatweclearallenabled,butunusedP0IFGForP0wecanonlyenableordisablehighorlownibble,notbitbit.ForP1andP2enablingofsinglebitsarepossible,willnotanyunusedpinsgenerateinterruptsonP1orWecouldhavecheckedforlowandhighnibbleinP0,butisn'tnecessaryaslongasweonlyclearunusedpinP0IFG=(HAL_KEY_P0INT_LOW_USED|HAL_KEY_POINT_HIGH_USED);P0IF=0;}}找到hal_mcu.h這個文件,這里有中斷服務程序的原型。 HAL_ISR_FUNCTION(f,v)我們在使用的時候修改相應的參f表示中斷服務函數(shù),v *0,0x03RF0,0x03RFTXFIFOUnderflowandRXFIFO1,0x0BADCEndof2,0x133,0x1B4,0x235,0x2BSleepTimer6,0x33Port27,0x3B8,0x43 9,0x4BTimer1(16-VECT(10,0x53Timer2(MACVECT(11,0x5BTimer3(8-VECT(12,0x63Timer4(8-VECT(13,0x6BPort0VECT(14,0x73VECT(15,0x7BPort1VECT(16,0x83RFGeneral*byteRegisterForKeys(bytetask_id){//Allowonlythefirst{return(true}return(false}byteOnBoard_SendKeys(bytekeys,bytestate){keyChange_t{//SendtheaddresstothemsgPtr=(keyChange_t*)osal_msg_allocate(sizeof(keyChange_t));if(msgPtr){msgPtr->state=state;msgPtr->keys=}return(ZSuccess}return(ZFailure}typedef{ state;// //}voidInitBoard(bytelevel{if(level==OB_COLD //{/*InitializeKeystuffHalKeyConfig(OnboardKeyIntEnable,OnBoard_KeyCallback);//這里就是3.2中提到的按鍵配置}}voidOnBoard_KeyCallback(uint8keys,uint8state){uint8//shiftkey(S1)isusedtogeneratekey//applicationsshouldnotuseS1whenkeyinterruptisshift=(OnboardKeyIntEnable==HAL_KEY_INTERRUPT_ENABLE)?false:((keys&HAL_KEY_SW_6)?true:false);}{////////第一次初始化平臺*****1*******InitBoard(OB_COLD);硬件驅動初始化******2******第二次初始化平臺*******4*******InitBoard(OB_READY);osal_start_system}voidInitBoard(bytelevel{if(level==OB_COLD}}{#if(definedHAL_KEY)&&(HAL_KEY==}osalAddTasks();//任務加入}voidosalAddTasks(void{osalTaskAdd(Hal_Init,Hal_ProcessEvent,OSAL_TASK_PRIORITY_LOWosalTaskAdd(SampleApp_Init,SampleApp_ProcessEvent,OSAL_TASK_PRIORITY_LOW}voidInitBoard(bytelevel{if(level==OB_COLD}else//以下執(zhí)行第二次初始化{OnboardKeyIntEnable=HAL_KEY_INTERRUPT_DISABLE;}}經(jīng)介紹過了,這里終于看到了回調函數(shù)OnBoard_KeyCallback。voidOnBoard_KeyCallback(uint8keys,uint8state{uint8shift=(OnboardKeyIntEnable==HAL_KEY_INTERRUPT_ENABLE)?false:((keys&HAL_KEY_SW_6)?true:false);}好了,執(zhí)行完初始化以后,osal_start_system()把所有任務交給操作系HAL_ISR_FUNCTION(halKeyPort0Isr,P0INT_VECTOR{}voidhalProcessKeyInterrupt(void){ #ifdefined /*判斷中斷標志位有效{HAL_KEY_SW_5_PXIFG=~(HAL_KEY_SW_5_BIT); /*清除中斷標志位*/valid=TRUE;}if{uint16Hal_ProcessEvent(uint8task_id,uint16events){if(events&{/*Checkforkeys*/#endif//returnevents^}voidHalKeyPoll(void){uint8keys=#ifdefined /*Keys{keys|=}/*keys的值改變了的話*/if(keys&&(pHalKeyProcessFunction)){}#endif/*HAL_KEY}voidOnBoard_KeyCallback(uint8keys,uin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- IPQC培訓資料教學課件
- 2026年中小銀行數(shù)據(jù)管理策略與實踐報告-
- 跨境電商2025年倉儲管理服務協(xié)議
- 車場管理考試試題及答案
- 鋼廠環(huán)保考試題目及答案
- 2025-2026五年級音樂期末檢測試卷
- 2025-2026二年級音樂期末魯教版卷
- 2025-2026九年級道德與法治上學期測試卷
- 衛(wèi)生局基本建設管理制度
- 羽毛球衛(wèi)生管理制度
- 尼帕病毒病預防控制技術指南總結2026
- 2026屆大灣區(qū)普通高中畢業(yè)年級聯(lián)合上學期模擬考試(一)語文試題(含答案)(含解析)
- 浸沒光刻機照明系統(tǒng)光學元件應力雙折射的多維探究與優(yōu)化策略
- DBJ50T-100-2022 建筑邊坡工程施工質量驗收標準
- 《透水混凝土路面應用技術規(guī)程》DB33∕T 1153-2018
- FZ∕T 73037-2019 針織運動襪行業(yè)標準
- 電外科設備安全使用
- (完整版)四年級上冊數(shù)學豎式計算題100題直接打印版
- 新生兒疫苗接種的注意事項與應對措施
- 青島生建z28-75滾絲機說明書
- DEFORM在汽車零件冷鍛工藝中的應用
評論
0/150
提交評論