找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5017|回復: 0
收起左側

CC2530的按鍵流程

[復制鏈接]
ID:76127 發(fā)表于 2015-4-18 00:27 | 顯示全部樓層 |閱讀模式
按鍵有兩種實現(xiàn)方式查詢和中斷,其初始位置在OnBoard.c中InitBoard()中
      OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE;  //中斷方式
    //OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;  查詢方式
    HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
   OnBoard_KeyCallback--按鍵回調函數(shù)
1,查詢法函數(shù)調用流程如下:      
    HalKeyConfig()配置一定時器為輪詢按鍵作準備——>
    時間一到觸發(fā)系統(tǒng)任務事件調用hal_driver.c中Hal_ProcessEvent()—— >
    調用HalKeyPoll()得到按鍵值——>
    調用OnBoard.c中OnBoard_KeyCallback()進一步處理——>
    調用OnBoard_SendKeys()構造消息包,準備觸發(fā)應用按鍵事件【注意這個應用之前必須通過RegisterForKeys()注冊接收按鍵事件的任務ID】——>
    調用osal_msg_send()向系統(tǒng)發(fā)送消息——>
    調用osal_set_event()設置事件發(fā)生標志——>
    調用SampleApp_ProcessEvent()處理事件——>
    最終調用SampleApp_HandleKeys()處理具體按鍵事件

2,中斷法函數(shù)調用流程如下:      
    HalKeyConfig()進行按鍵中斷配置——>
    按鍵引起中斷進入中斷函數(shù)HAL_ISR_FUNCTION()(該函數(shù)在hal_key.c中)——>
    調用halProcessKeyInterrupt()對按鍵中斷進行下一步處理:清除中斷標志,啟動一定時器——>
    相應事件為HAL_KEY_EVENT,時間為HAL_KEY_DEBOUNCE_VALUE。(且#define HAL_KEY_DEBOUNCE_VALUE 25,即25ms,這與開頭的英文說明一致,在中斷發(fā)生后,需等待25ms再讀鍵值,以消除按鍵的回跳。)
    25ms到了以后,觸發(fā)HAL層任務HAL_KEY_EVENT事件,調用HAL層任務事件處理函數(shù)Hal_ProcessEvent()
    時間一到觸發(fā)系統(tǒng)任務事件調用HAL\Common\hal_driver.c中Hal_ProcessEvent()——>
    調用HalKeyPoll()得到按鍵值——>
    調用OnBoard.c中OnBoard_KeyCallback()進一步處理——>
    調用OnBoard_SendKeys()構造消息包,準備觸發(fā)應用按鍵事件【注意這個應用之前必須通過RegisterForKeys()注冊接收按鍵事件的任務ID】——>

    調用osal_msg_send()向系統(tǒng)發(fā)送消息——>
    調用osal_set_event()設置事件發(fā)生標志——>
    調用SampleApp_ProcessEvent()處理事件——>
    最終調用SampleApp_HandleKeys()處理具體按鍵事件


注:
1,根據(jù)實際需要在在hal_key.c中HalKeyConfig()中,修改代碼,其中原有程序查詢方式下只對上,下,左,右四個按鍵進行配置處理;中斷方式只是sw6,sw7進行配置處理。
2,在應用層SampleApp_HandleKeys()添加具體按鍵事件


相關帖子

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表