求大神解决两句C语言代码,在stm32开发中遇到的。

2019-03-23 18:34发布


首先,小白一个,还没入门,高手别见笑,多包涵
如题,最近在看用stm32的FSMC驱动dm9000a的例程,用的bank1,FSMC_A16与DM9000a的CMD连接,16bit模式,FSMC_A[24:0]对应HADDR[25:1],有几行C语言代码不是很明白,在下边


#define DM9000_IO_CMD    *((__IO uint16_t *)0x60000000) //

#define DM9000_IO_DATA   *((__IO uint16_t *)0x60020000) //


......


static u16 ior(u16 reg)

{

    u16 read_data = 0;

        DM9000_IO_CMD =  reg;

        read_data = DM9000_IO_DATA;

    return read_data;

}

*((__IO uint16_t *)0x60000000)这个表达式意思是:这是个指针的指针?转不过来了,谁能说明白一些?为什么是16位?




最后谁有关于FSMC或是DM9002单片机驱动的资料,比较详细的。手上资料不全,都是直接上了TCP/UIP的,程序太大了,只想要一个很简单的,访问以下寄存器,发个数据什么的,现在还不会用呢.跪求,,,,,,,,

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
graylira
2019-03-24 16:44
#define DM9000_IO_DATA   *((__IO uint16_t *)0x60020000) //
意思是把0x60020000的类型强制转为16位无符号整形的地址, *((__IO uint16_t *)0x60020000)实际上就是读取该地址的参数值,DM9000_IO_DATA   也就代表这个参数值,并且是一个占2个字节内存空间的参数值。后面那个函数返回的实际上也就是0x60020000这个地址的参数值。

一周热门 更多>