TI中文支持网
TI专业的中文技术问题搜集分享网站

关于linux的mmap函数写入寄存器和读出同一个寄存器值不相同的问题?求工程师指导!

各位工程师,好,我使用的是AM1808微处理器,搭载的是linux系统,我想要使用EMIFA接口和FPGA连接,但是,我没有使用驱动。我像直接使用linux系统下的/dev/mem文件下的mmap 函数要做硬件地址映射。我现在需要做的工作是配置EMIFA的PIN的复用功能,所以,我需要对寄存器PINMUX5  到PINMUX12进行配置。但是,我发现,我使用mmap函数映射出来的地址,当在对同一个地址进行读写的时候。得到的数据不一样,而每次读出的数据都一样,初次判断为寄存器写入没有写入。我的程序如下,请工程师给予指导。谢谢。

#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define PINMUX_ADDR 0x01C14000
int main(int argc,char **argv)
{
char *FPGA_PIN_base;
int data=0x1F0F0F0F; int fd;
fd = open("/dev/mem",O_RDWR|O_SYNC); //鎵撳紑mem鏂囦欢锛岃闂洿鎺ュ湴鍧€
if(fd == -1)
{
printf("ERROR OF OPEN mem!\n");
exit(-1);
}
printf("OPEN the mem!\n");
//////////////////////////////////////////////////////////////////////////////////////////// FPGA_PIN_base=(char *)mmap(0,1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,PINMUX_ADDR);
printf("FPGA_PIN=0x%x.PINMUX=0x%x\n",FPGA_PIN_base,data);
///////////////////////////////////////////////////////////////////////////////////////////////////
data = *(volatile unsigned int *)(FPGA_PIN_base+0x134);
printf("FPGA_PIN=0x%x.PINMUX5=0x%x\n",FPGA_PIN_base+0x134,data);
printf("FPGA_PIN=0x%x.PINMUX5=0x%x\n",FPGA_PIN_base+0x134,*(volatile unsigned int *)(FPGA_PIN_base+0x134));

*(volatile unsigned int *)(FPGA_PIN_base+0x134)=0x23; //PINMUX5 0x01C14000+0x134=0x01C14134

data = *(volatile unsigned int *)(FPGA_PIN_base+0x134);
printf("FPGA_PIN=0x%x.PINMUX5=0x%x\n",FPGA_PIN_base+0x134,data);
printf("FPGA_PIN=0x%x.PINMUX5=0x%x\n",FPGA_PIN_base+0x134,*(volatile unsigned int *)(FPGA_PIN_base+0x134));

return 0;
}

Gary Wu:

想请问一下,为什么不修改驱动,配置EMIFA时序来与FPGA通信?

WU LANBIN:

回复 Gary Wu:

因为我的项目要求很急,而且,我不太能明白你们那个引脚复用配置是如何进行的。是不是mux.h里面的 enum davinci_da850_index这个里面的和da850.c的static const struct mux_config da850_pins[]这个里面一一对应就好了。还是要求我设置其他地方。这个地方我很模糊,请求工程师指导。是否还有其他地方需要修改。谢谢。

赞(0)
未经允许不得转载:TI中文支持网 » 关于linux的mmap函数写入寄存器和读出同一个寄存器值不相同的问题?求工程师指导!
分享到: 更多 (0)