- 论坛徽章:
- 0
|
最近刚接触arm linux驱动开发,想通过s3c2440的总线控制器bank3外扩fpga。
bank3的地址:0x18000000;
源码
#define fpga_Address 0x18000000
int fpga_init(void)
{
unsigned short mem;
int memfd;
memfd=open ("/dev/mem",O_RDWR);
if (memfd < 0)
{
perror ("open error");
return -1;
}
sp=(unsigned char *)mmap(0,1000,PROT_READ|PROT_WRITE,MAP_SHARED,memfd,fpga_Address);
return 0;
} //通过mmap映射fpga物理地址sp
写fpga
void fpga_w(unsigned int add,unsigned short idata)
{
*(unsigned int*)(sp + add) = idata;
int a = msync(sp,1000,MS_SYNC);
if(a<0) perror ("msync error");
printf("write fpga add:%x,data:%x",(sp + add),idata);
printf("\n");
}
读fpga
unsigned short fpga_r(unsigned int add)
{
unsigned short data;
data = *(unsigned int*)(sp + add);
printf("read rmstsw add:%x,data:%x,\n",(sp + add),data);
return data;
}
主程序
int main()
{
printf("0\n");
fpga_init();
printf("1\n");
fpga_w(0x10,16000);
fpga_r(0x10);
}
问题:
1、msync(sp,1000,MS_SYNC);程序报错
2、用逻辑分析仪测bnak3上无读写操作
3、*(unsigned int*)(sp + add) = idata; 是否能对物理内存进行操作
|
|