#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);
}
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX4V1VkVDbXllck1mYoZFShZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TO4cTOygjMwEDMygDM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
參照datasheet配置gpio,想把第9位拉高,可不管怎麼配置,都改變不了第9位gpio的狀态。
通過讀RALINK_REG_PIO2100DATA,第9位已經置1,但是去量引腳還是低電平(硬體是絕對沒問題的),求解?????????????