ARM上使用mmc0(复用GPMC_A20-A25)相关6根管脚连接FPGA,作为地址线。使用GPMC_AD0-AD15作为数据线连接FPGA,
现在问题是:读取不同地址的数据都是同一个值,没有变化,这个值像是地址线的初始电平值。读取不同地址,使用示波器测量地址线电平无变化。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
请问使用的什么版本的SDK?rtos还是linux?是在哪个例程上修改的?请再详细说明一下。
ti-processor-sdk-rtos-am335x-evm-06.03.00.106\pdk_am335x_1_0_17\packages\MyExampleProjects\GPMC_Test_icev2AM335x_armExampleProject
是linux,GPMC分为0:nand和1:fpga,在kernel/arch/arm/mach-omap2/board-am335xevm.c文件中修改管脚复用配置,如下:
{"mmc0_dat3.gpmc_a20", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"mmc0_dat2.gpmc_a21", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"mmc0_dat1.gpmc_a22", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"mmc0_dat0.gpmc_a23", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"mmc0_clk.gpmc_a24", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"mmc0_cmd.gpmc_a25", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"gpmc_csn1.gpmc_csn1", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_advn_ale.gpmc_advn_ale", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_oen_ren.gpmc_oen_ren", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_wen.gpmc_wen", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_ben0_cle.gpmc_ben0_cle", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ben1.gpmc_ben1", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
例程是仿照驱动程序写的,设置如下:
result = gpmc_cs_request(1, 0x4000000, (unsigned long*)&fpga_base);
if(!request_mem_region(fpga_base,0x4000000,"mem_fpga")) {
gpmc_cs_free(1);
return -ENOMEM;
}
fpga_addr = ioremap(fpga_base, 0x4000000);
读的地方如下:
tw = readw(fpga_addr + io_addr);
不论 io_addr是啥,tw值都不变