DM3730 x-loader 分析 五
我們來做一個實驗,實驗目的是在x-loader中點亮LED燈,因此先分析x-loader\include\asm\arch-omap3\gpio.h,在實驗中會用到這里面的函數。
下面是gpio.h源碼:
43-50行:/*定義gpio_bank 類型的變量數組gpio_bank_34xx[6],宏替換后可寫成如下
static struct gpio_bank gpio_bank_34xx[6] = {
? ? ? ? { (void *)0x48310000, 4 }, ? /*(void *)0x48310000 把0x48310000強制轉換成地址,這樣C語言才能識別*/
{ (void *)0x49050000, 4 },
{ (void *)0x49052000, 4 },
{ (void *)0x49054000, 4 },
{ (void *)0x49056000, 4 },
? ? ? ? { (void *)0x49058000, 4 },};
struct gpio_bank { ?
void *base;
int method;?}; /*gpio_bank?結構體定義*/
在sprugn4r.pdf P3500找到地址對應含義,DM3730中gpio0~gpio192分成6個組。
52行:/*定義gpio_bank類型指針gpio_bank,并指向gpio_bank_34xx[6]?數組的第一個元素*/
54行:/*定義get_gpio_bank(int gpio)函數,它的返回值是gpio_bank類型的指針(地址),也就是指向 ?gpio_bank_34xx[6]數組里面的某個元素地址*/
56行:/*gpio右移5位,實際是gpio除以32,得到gpio組值,返回組地址*/
89-62行:/*?get_gpio_index(int gpio)行數目的得到gpio組內編號,例如gpio171=10101011 & 11111=0d1011,整好等于11,對應ds P3489,gpio171 = GPIO6【11】*/
64-81行:/*check_gpio(int gpio)函數,判斷gpio是否在0-192之間,是返回0,不是報錯返回-1。*/
84-89行:void *reg = bank->base; ?/*定義指針reg,reg=(*bank).base*/
? ? ? ??u32 l; ?/*unsigned int I*/
? ? ? ? ? ? ? ? switch (bank->method) ?/* switch (4) */
? ? ? ??case METHOD_GPIO_24XX: ?/* case 4: */
? ? ? ? ? ? ? ? ? ? ? ? ? reg += OMAP24XX_GPIO_OE;/* reg = reg + 0x0034 ,0x0034正好是GPIO_OE寄存器的偏移地址, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?運行后reg指向gpio1-6某個組的GPIO_OE寄存器地址*/
94-100行:/*讀出gpio1-6某個組的GPIO_OE寄存器里面的值賦給I,如果is_input=1,I的某位值制1,否則I的某位清零*/
以上分析_set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)這個函數,通過傳遞
gpio組地址,gpio組內編號,設置輸入輸出1或者0,配置GPIO_OE寄存器,GPIO_OE寄存器含義如下:
102-110行:/*omap_set_gpio_direction(int gpio, int is_input)這個函數是實際要用到的配置gpio輸入輸出函數*/
108行:/*bank指向gpio_bank_34xx[6]數組里面的某個元素地址*/
109行:_set_gpio_direction(bank, get_gpio_index(gpio), is_input)/*函數參數傳遞*/
以上分析完如何設置相應gpio輸入輸出GPIO_OE寄存器
112-142行:同樣操作GPIO_SETDATAOUT和GPIO_CLEARDATAOUT寄存器,根據輸入的gpio,得到gpio組編號以及組內編號,對應寄存
器里相應位置寫入0或者1.
143-161行:/*操作GPIO_DATAIN寄存器,設置輸入并讀取相應gpio的值*/
159-160行:/*GPIO_DATAIN寄存器中相應gpio位置的值保留*/
下面我們把代碼添加到omap3stalker.c文件中,323行和325-332行
運行信息如下:打印出 my gpio out end
總結
以上是生活随笔為你收集整理的DM3730 x-loader 分析 五的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 下常见的反调试方法
- 下一篇: Cisco Client - Reaso