我用的是S3C2440,写成流式驱动程序,把物理内存0X10000000映射虚拟内存为0XA4000080,编译后下载驱动到平台,读数据不准确,没法写数据,但我用裸机测试过(ADS1.2软件),FPGA的接口是OK的,只是没有用映射虚拟内存的方法,相关的程序如下,请各位老师帮帮忙忙除一下错,
#define PC104bus2 (*(volatile unsigned *)0x10000082)
#define PC104bus4 (*(volatile unsigned *)0x10000084)
#define PC104bus6 (*(volatile unsigned *)0x10000086)
#define PC104bus8 (*(volatile unsigned *)0x10000088)
#define PC104_BASE 0xA4000080
typedef struct {
unsigned int PC104bus2;
unsigned int PC104bus4;
unsigned int PC104bus6;
unsigned int PC104bus8;
}PC104reg;
volatile PC104reg *s2440PC104 = (PC104reg *)PC104_BASE;
// PC104bus Virtual alloc
s2440PC104 = (volatile PC104reg *) VirtualAlloc(0,sizeof(PC104reg),MEM_RESERVE, PAGE_NOACCESS);
if(s2440PC104 == NULL)
{
RETAILMSG(1,(TEXT("For s2440PC104: VirtualAlloc faiLED!\r\n")));
}
if(!VirtualCopy((PVOID)s2440PC104,(PVOID)(PC104_BASE),sizeof(PC104reg),PAGE_READWRITE | PAGE_NOCACHE ))
{
RETAILMSG(1,(TEXT("For s2440PC104: VirtualCopy faiLED!\r\n")));
}
s2440MEM->rBWSCON = (s2440MEM->rBWSCON & ~(0xf<<8))|(0x1<<8);
s2440MEM->rBANKCON2 = 0x54a0;
DWORD LED_Write(DWORD hOpenContext,LPVOID pSourceBytes,DWORD NumberOfBytes)
{ unsigned int *pReadBuffer;
pReadBuffer = (unsigned int *)MapPtrToProcess((LPVOID)pSourceBytes,GetCallerProcess());
if(NumberOfBytes == 2)
{
s2440PC104->PC104bus2 = *pReadBuffer;
}
}
DWORD LED_Read(DWORD hOpenContext,LPVOID pBuffer, DWORD Count)
{ unsigned int *pReadBuffer;
unsigned int adcvalue;
pReadBuffer = (unsigned int *)MapPtrToProcess(pBuffer,GetCallerProcess());
*pReadBuffer = s2440PC104->PC104bus8;
}
谢谢了!