GPIO基址 0x18040000,共有0-22个GPIO,可以配置成输出或输入。
GPIO_OE 0x18040000 寄存器控制GPIO是输入还是输出。32位寄存器,一位对应一个GPIO,0表示输出,1表示输入。
可以配置成输出128种信号中的一个。用8位存储signal编号,编号0表示普通的输出GPIO,可以控制输出低电平还是高电平。比如 UART1_SOUT的Mux Selection Value是18。复位时,每个GPIO有自己默认的输出类型。
GPIO FUNCTION 0-5,共6个寄存器,控制GPIO 0-22的输出MUX。比如Function 0,控制GPIO 0 -3的输出MUX。
ath> md.l 1804002C 6
1804002c: 21000073 00000020 00000000 00000000 !..s... ........
1804003c: 00000000 00160000 ........
0x16对应MUX Type 22 为UART1 SOUT,Function 5的15:8位为GPIO 21,所以GPIO 21为UART输出脚。
如果一个GPIO作为普通输出GPIO用,首先配置GPIO_OE为输出模式,然后配置Function寄存器,MUX配置为0. 然后通过 GPIO Per Bit Clear (GPIO_CLEAR) 和GPIO Per Bit Set (GPIO_SET) 控制输出的电平。输出电平可以通过GPIO Output Value (GPIO_OUT)读取。
GPIO输入的信号也可以Route到不同的Signal,比如用作UART输入等。但是配置输入模式和配置输出默认不同。配置输入模式是把某个signal配置为某个GPIO的编号。比如:
ath> md.l 18040044 1
18040044: 00001280 ....
15:8 的值为12,则UART输入GPIO为,0x12=GPIO 18
注意
GPIO 15-17 默认用作JTAG信号,如果要用作GPIO第一步要将GPIO FUNCTION 寄存器的 disable jtag 置位。