/*
DM9000 采用地址数据复用,访问一般存储器时,有地址线、数据线,地址线选中目标,然后数据值写到目标中。
但是对于 DM9000 来说,分两次进行,第一次数据线写 DM9000 的寄存器地址,第二次写寄存器数据。
也就是说,DM_ADDR这个值只要保证处于 0x30000000 ~ 0x3FFFFFFF 之间且不同于DM9K_DATA就可以,目的是选中 DM9000。
*/
#define DM9K_ADDR 0x30000000
#define DM9K_DATA 0x30000004
#define DM_ADDR *(volatile u16_t *) DM9K_ADDR
#define DM_DATA *(volatile u16_t *) DM9K_DATA
#pragma optimize=none
inline static u16_t ior(u16_t reg_addr)
{
DM_ADDR = reg_addr;
return DM_DATA;
}
#pragma optimize=none
inline static void iow(u16_t reg_addr, u16_t reg_data)
{
DM_ADDR = reg_addr;
DM_DATA = reg_data;
}
如图,与地址相关的总线,只使用了 NCS2 和 A2,
关于IAR jlink调试时,运行的位置与代码不对应,首先clean一下工程,rebuild,如果还是这样,看一下当前的文件是不是该工程中的文件。
有时,把一个工程目录复制一个备份,用 iar 打开备份时,有可能出现运行的位置与代码不对应,在iar中把鼠标放在source browse窗口中文件名上面,发现工程的文件不是在该目录下,而是在原来的目录。把原来的目录修改一个名字,rebuild,就可以了。
Jlink 调试时,经常出现 BAD jtag communication : write to Expected 0x1,got 0x0 ……
可以尝试将option -->debugger -->J-link-->setup -->speed 改为adaptive;