在usb example裡面檔案:
lite為精簡版,省略了很多usb枝幹上的功能,保留了usb通訊部分的主幹功能,我使用的是全功能版。
函式 board_initpins()中,主要是port以及gpio相關的初始化。
1、使能port的時鐘,當外設時鐘沒有開啟時,程式不能讀出外設暫存器的值,同時也不能使用外設。
2、通過port設定gpio引腳功能,此處為設定lpuart功能。晶元手冊p115。
3、將鍵盤涉及到的gpio引腳統統都設為gpio引腳(自己定義的函式)。
4、進行uart相關配置。
5、將usb 鍵盤對應的相關引腳都設定為輸入引腳。
board_bootclockrun(),設定晶元時鐘為48mhz,匯流排時鐘為24mhz。
board_initdebugconsole(),主要是初始化uart相關的配置,例入波特率等等。
使能usb工作時鐘。
這段**是由巨集定義給包裹起來的,根據注釋可以粗略判斷出,主要是針對khci usb中的ram特定的,將ram裡面的資料全部清0。
對composite結構體進行簡單的初始化。
usb_deviceclassinit,這個函式比較重要,在上乙個步驟中被初始化的g_usbdevicecomposite.devicehandle,將被在這個函式中重新賦予新的含義,裡面設計到很多函式指標,推薦使用source insight可以看得清楚些。
另外,我這裡將mouse的相關函式給遮蔽掉了,因為我需要實現的是keyboard。
configlist也就是g_usbdevicecompositeconfiglist
可以看到usb_devicehidkeyboardcallback顯然是個很重要的主,我們進去look look。
從這個函式裡面又會碰到另乙個很重要的函式,usb_devicehidkeyboardaction(),這個函式裡面也就是ksdk中需要我們自己寫的使用者處理操作函式。
這個案例預設鍵盤是不斷發出pageup和pagedown鍵值,這裡只是演示,所以若是要實現真正的產品,那是必須要把這段**注釋掉,來從新寫一段新的功能函式**的。
opencv例程分析(1)
show image include include opencv2 opencv.hpp include opencv2 core core.hpp include opencv2 highgui highgui.hpp using namespace cv using namespace std...
例程的分析和總結
分析1 volatile 是什麼?怎麼用?答 簡單的說,就是不讓編譯器進行優化,即每次讀取或者修改值的時候,都必須重新從內 存或者暫存器中讀取或者修改,防止從快取處讀取的值是過期了的,所以加了這個volatile 可以保證每次讀的值絕對是實時的 一般說來,volatile 用在如下的幾個地方 1.中...
ZigBee HA示例程式分析
zigbee協議棧中自帶的homeautomation例程,雖然也是操作燈泡,但是,是通過zcl來統一處理的,符合ha profile規範,互連互操作性較好。下面就簡要分析以下zcl的使用。在任務陣列中,多定義了zcl層。technorati 標籤 zigbee ha 示例程式 osal sampl...