天天看點

RT5350 gpio設定

#define RALINK_PRGIO_ADDR RALINK_PIO_BASE // Programmable I/O

#define RALINK_SYSCTL_ADDR       RALINK_SYSCTL_BASE

#define GPIO_MODE (RALINK_SYSCTL_ADDR + 0x60) 

#define RALINK_REG_PIO2100INT (RALINK_PRGIO_ADDR + 0x00)   //設定中斷

#define RALINK_REG_PIO2100EDGE (RALINK_PRGIO_ADDR + 0x04)  //觸發方式

#define RALINK_REG_PIO2100RENA (RALINK_PRGIO_ADDR + 0x08)  //上升沿觸發

#define RALINK_REG_PIO2100FENA (RALINK_PRGIO_ADDR + 0x0C)  //下降沿觸發

#define RALINK_REG_PIO2100DATA (RALINK_PRGIO_ADDR + 0x20)  //IO口資料位

#define RALINK_REG_PIO2100DIR (RALINK_PRGIO_ADDR + 0x24)         //IO方向

#define RALINK_REG_PIO2100PIO (RALINK_PRGIO_ADDR + 0x28)         //反轉對應的IO時,對應的位也要置1

#define RALINK_REG_PIO2100SET (RALINK_PRGIO_ADDR + 0x2C)         

#define RALINK_REG_PIO2100RESET (RALINK_PRGIO_ADDR + 0x30)

#define RALINK_REG_PIO2100TOGGLE (RALINK_PRGIO_ADDR + 0x34)

#define WORK_LED (1<<9)

static void init_gpio()

{

int gpiomode = le32_to_cpu(*(volatile u32 *)(GPIO_MODE));

gpiomode |= GPIOMODE_JTAG|(7<<2);

*(volatile u32 *)(GPIO_MODE) = cpu_to_le32(gpiomode);

*(volatile u32 *)(RALINK_REG_PIO2100DIR) |= cpu_to_le32(WORK_LED) ;   //set  pin outpuT 

*(volatile u32 *)(RALINK_REG_PIO2100PIO) |= cpu_to_le32(WORK_LED) ;

 tem = *(volatile u32 *)(RALINK_REG_PIO2100SET);

tem |= cpu_to_le32(WORK_LED) ;

*(volatile u32 *)(RALINK_REG_PIO2100SET) =tem;

*(volatile u32 *)(RALINK_REG_PIO2100TOGGLE)|=cpu_to_le32(WORK_LED);

*(volatile u32 *)(RALINK_REG_PIO2100DATA)|=cpu_to_le32(WORK_LED);

*(volatile u32 *)(RALINK_REG_PIO2100DIR) = 0;

int gpiodata = *(volatile u32 *)RALINK_REG_PIO2100DATA;

printk("gpiodata === %x\n",gpiodata);

}

RT5350 gpio設定

參照datasheet配置gpio,想把第9位拉高,可不管怎麼配置,都改變不了第9位gpio的狀态。

通過讀RALINK_REG_PIO2100DATA,第9位已經置1,但是去量引腳還是低電平(硬體是絕對沒問題的),求解?????????????

繼續閱讀