請問
我依照下列流程在驅動源程序 config GPMC ,並透過應用程序控制
但寫資料時,實際量測波形,gpmc_ad0,ad1...動作都正確
但gpmc_csn1 卻無反應
請問是遺漏了什麼???
=================================== board-am335xevm.c
/*pin mux for FIFO writing*/
static struct pinmux_config fifo_pin_mux[] =
{
{"gpmc_ad0.gpmc_ad0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad1.gpmc_ad1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad2.gpmc_ad2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad3.gpmc_ad3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad4.gpmc_ad4", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad5.gpmc_ad5", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad6.gpmc_ad6", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad7.gpmc_ad7", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad8.gpmc_ad8", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad9.gpmc_ad9", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad10.gpmc_ad10", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad11.gpmc_ad11", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad12.gpmc_ad12", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad13.gpmc_ad13", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad14.gpmc_ad14", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_ad15.gpmc_ad15", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_csn1.gpio1_30", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
{"gpmc_csn2.gpio1_31", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
{"gpmc_csn3.gpio2_0", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
{"gpmc_clk.gpio2_1", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
{"lcd_vsync.gpio2_22", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
{"lcd_pclk.gpio2_24", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
{"gpmc_wen.gpmc_wen", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_ben1.gpmc_dir", OMAP_MUX_MODE4 | AM33XX_PULL_DISA},
{NULL, 0},
};
...
=================================== gpmc driver
#define GPMC_CS 1
...
//配置GPMC 寄存器
val = gpmc_cs_read_reg(GPMC_CS, GPMC_CS_CONFIG7);
val &= ~GPMC_CONFIG7_CSVALID; /*disable chip-select*/
gpmc_cs_write_reg(GPMC_CS, GPMC_CS_CONFIG7, val);
gpmc_cs_configure(GPMC_CS, GPMC_SET_IRQ_STATUS, 0); /*set irq status*/
gpmc_cs_configure(GPMC_CS, GPMC_ENABLE_IRQ, 0); /*disable irqs*/
gpmc_cs_write_reg(GPMC_CS,GPMC_CS_CONFIG1, GPMC_CONFIG1_READTYPE_ASYNC | /*set read type Asynchronous*/
GPMC_CONFIG1_WRITETYPE_ASYNC | /*set write type Asynchronous*/
GPMC_CONFIG1_DEVICESIZE_16 | /*set device size 16bit*/
GPMC_CONFIG1_DEVICETYPE_NOR | /*set device type NOR*/
GPMC_CONFIG1_FCLK_DIV3); /*GPMC_CLK frequency=GPMC_FCLK frequency/3*/
val = gpmc_cs_read_reg(GPMC_CS, GPMC_CS_CONFIG1);
val &= NONE_MUXADDATA; /*Non-multiplexed attached device*/
gpmc_cs_write_reg(GPMC_CS, GPMC_CS_CONFIG1, val);
ret = gpmc_cs_set_timings(GPMC_CS, &fifo_timings); /*set timing parameters*/
// 申請gpmc 片選空間並用ioremap 函數映射為內核虛擬地址
/*********** 為FIFO 申請GPMC chip-select 空間**********/
if (gpmc_cs_request(GPMC_CS, FIFO_SIZE, &mem_base)<0)
{
printk(KERN_ERR "gpmc_cs_request failed.\n");
return -1;
}
/*********** 為FIFO 申請虛擬內存空間**********/
if (!request_mem_region(mem_base, FIFO_SIZE, GPMC_DRIVER_NAME))
{
printk(KERN_ERR "request_mem_region failed.\n");
return -1;
}
/****** 物理地址映射為虛擬地址*****/
fifo_base = ioremap (mem_base, FIFO_SIZE);

