1.看原理圖中知芯片上66引腳控制一個LED
2.在Datasheet中找出GPIO pin
3.在ProgrammingGuid System Contrl中找到GPIO控制寄存器地址:
4.控制GPIO的寄存器偏移地址是,起始地址是
,但這個起始地址是物理地址,因此還要確定相應的虛擬地址(這個可以根據mips手冊或者內核源代碼去查到),本屌絲在內核源代碼中查找到虛擬地址為:0xb0000000;(注下圖為內核源代碼rt_mmap.h中定義)
5.從分析
中知道此寄存器地址的每一位控制着不同的pin腳的GPIO模式,那么本屌絲又去查看datasheet知:GPIO#68(即68引腳)對應GPIO控制寄存器的“RGMII2_GPIO_MODE”,如下圖:
,因此查看”21. GPIOMODE: GPIO Purpose Select (offset: 0x0060)“知道該寄存器地址的第10位控制着”RGMII2_GPIO_MODE”,如下圖:
從那么有以上1~5這五能夠確定: 怎樣設置pin:68 GPIO模式.
6.那么怎么把數據輸送到pin68引腳呢?查看“ProgrammingGuid 中的PROGRAMMABLE I/O” :
知pin68對應的寄存器基地址Register Descriptions (base: 0x1000_0600)對應虛擬地址為 #define RALINK_PIO_BASE 0xB0000600,偏移地址0x70
查看此寄存器地址對應的各位知:共32位每一位分別對應40~71引腳,那么68引腳對應(68-40)即28
8.通過以上1~7卻定了:(1)怎么設置pin68引腳為GPIO MODE; (2)控制pin68的數據輸入輸出方向;(3)從哪個地址位輸入數據到pin68