1.相关文件:
\u-boot-mt7688\include\configs\rt2880.h
\u-boot-mt7688\include\rt_mmap.h
\u-boot-mt7688\lib_mips\board.c
2. 相关寄存器映射
#define RALINK_SYSCTL_BASE 0xB0000000
#define RALINK_TIMER_BASE 0xB0000100
#define RALINK_INTCL_BASE 0xB0000200
#define RALINK_MEMCTRL_BASE 0xB0000300
#define RALINK_PCM_BASE 0xB0000400
#define RALINK_UART_BASE 0xB0000500
#define RALINK_PIO_BASE 0xB0000600
#define RALINK_GDMA_BASE 0xB0000700
#define RALINK_NAND_CTRL_BASE 0xB0000800
#define RALINK_I2C_BASE 0xB0000900
#define RALINK_I2S_BASE 0xB0000A00
#define RALINK_SPI_BASE 0xB0000B00
#define RALINK_UART_LITE_BASE 0xB0000C00
#define RALINK_FRAME_ENGINE_BASE 0xB0100000
#define RALINK_ETH_SW_BASE 0xB0110000
#define RALINK_11N_MAC_BASE 0xB0180000
#define RALINK_USB_OTG_BASE 0xB01C0000
#define RT2880_SYS_CNTL_BASE (RALINK_SYSCTL_BASE)
#define RT2880_PRGIO_ADDR (RALINK_SYSCTL_BASE + 0x600) // Programmable I/O
#define RT2880_REG_PIODIR (RT2880_PRGIO_ADDR + 0x00)
0xb0000600 == RT2880_REG_PIODIR GPIO0--GPIO31 direction control register
0xb0000604 == RT2880_REG_PIODIR+0x04 GPIO32--GPIO63 direction control register
0 : GPIO input mode
1 : GPIO output mode
0xb0000620 == GPIO0--GPIO31 data register
0xb0000624 == GPIO32--GPIO63 data register
0xb0000644 == GPIO_DCLR GPIO32-GPIO63 data clear register
1: set the GPIO DATA register
0: no effect
3. 举例
//gpio41 input gpio_ctrl_1 bit9=0
val=RALINK_REG(RT2880_REG_PIODIR+0x04);
val&=~1<<10;
RALINK_REG(RT2880_REG_PIODIR+0x04)=val;
//gpio42 output gpio_ctrl_1 bit10=0
val=RALINK_REG(RT2880_REG_PIODIR+0x04);
val|= 1<<11;
RALINK_REG(RT2880_REG_PIODIR+0x04)=val;
/*======================================================= gpio41 input gpio_ctrl_1 bit9=0 ;Key_on if key_on Key pressed,then gpio42=pwr_hold output 1 gpio42 output =======================================================*/ int detect_powerkey(void) { u32 val; val=RALINK_REG(0xb0000624);//624 if(val&1<<10){ return 0; } else{ printf("PowerKey button pressed!\n"); return 1; } }