首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DM9000AE读问题

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

返回列表