#include <stdio.h>
#define DM9000_IO 0x20000000
#define DM9000_DATA 0x20100004
#define DM9000_outb(d,r) ( *(volatile unsigned char *)r = d )
#define DM9000_inb(r) (*(volatile unsigned char *)r)
#define DM9000_VIDL
0x28 //从此寄存器读出的值应该为0x46
#define DM9000_VIDH
0x29 //从此寄存器读出的值应该为0x
static unsigned char DM9000_ior(int reg)
{
DM9000_outb(reg, DM9000_IO);
return DM9000_inb(DM9000_DATA);
}
static void DM9000_iow(int reg, unsigned char value)
{
DM9000_outb(reg, DM9000_IO);
DM9000_outb(value, DM9000_DATA);
}
void main(void)
{
unsigned short int id=0;
asm("#define
EBIU_AMGCTL 0xFFC
// setup EBIU_AMGCTL reg (enable all banks)
asm("p0.l = EBIU_AMGCTL & 0xFFFF;");
asm("p0.h = (EBIU_AMGCTL >> 16) & 0xFFFF;");
asm("r0
= 0x
asm("w[p0] = r0;");
id = DM9000_ior(DM9000_VIDL);
id |= DM9000_ior(DM9000_VIDH) << 8;
printf("id
is %x\n",id); //打印出的应该是0x
}
上面的程序实现对DM9000AE的0x28和0x29两个寄存器的读操作。
你好,我对DM9000AE的不同寄存器进行连续读就会得出不正确的结果,如上所示。如果只对一个寄存器进行循环读好像出了第一次读出的数据有问题后面好像是正确的,第一次读出的数据还是上一次读/写操作是的数据。
DM
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |