Board logo

标题: DM9000AE读问题 [打印本页]

作者: tomipig    时间: 2008-3-27 16:08     标题: DM9000AE读问题

#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 //从此寄存器读出的值应该为0x0A

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 0xFFC00A00");

// setup EBIU_AMGCTL reg (enable all banks)

asm("p0.l = EBIU_AMGCTL & 0xFFFF;");

asm("p0.h = (EBIU_AMGCTL >> 16) & 0xFFFF;");

asm("r0 = 0x0f;");

asm("w[p0] = r0;");

id = DM9000_ior(DM9000_VIDL);

id |= DM9000_ior(DM9000_VIDH) << 8;

printf("id is %x\n",id); //打印出的应该是0x0A46,但是实际上刚好相//反为0x460A

}

上面的程序实现对DM9000AE0x280x29两个寄存器的读操作。

你好,我对DM9000AE的不同寄存器进行连续读就会得出不正确的结果,如上所示。如果只对一个寄存器进行循环读好像出了第一次读出的数据有问题后面好像是正确的,第一次读出的数据还是上一次读/写操作是的数据。

DM9000A的片选引脚(CS#)接的是BF533ASM2引脚,CMD接的是BF533A2引脚,SD0—SD15接的是BF533D0— D15IOR#IOW#分别接的是BF533~AOE~AWE






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0