3387|7

2167

帖子

8

TA的资源

五彩晶圆(初级)

楼主
 

求大神解决两句C语言代码,在stm32开发中遇到的。 [复制链接]


首先,小白一个,还没入门,高手别见笑,多包涵
如题,最近在看用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的,程序太大了,只想要一个很简单的,访问以下寄存器,发个数据什么的,现在还不会用呢.跪求,,,,,,,,

此帖出自stm32/stm8论坛

最新回复

#define DM9000_IO_DATA   *((__IO uint16_t *)0x60020000) // 意思是把0x60020000的类型强制转为16位无符号整形的地址, *((__IO uint16_t *)0x60020000)实际上就是读取该地址的参数值,DM9000_IO_DATA   也就代表这个参数值,并且是一个占2个字节内存空间的参数值。后面那个函数返回的实际上也就是0x60020000这个地址的参数值。  详情 回复 发表于 2015-6-13 01:17
点赞 关注
个人签名坐而言不如起而行
 

回复
举报

151

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
就是代表指向0x60000000地址的指针,这里就是直接对0x60000000内存单元进行读写操作
此帖出自stm32/stm8论坛
 
 

回复

1412

帖子

15

TA的资源

版主

板凳
 
把0x60000000这个数用(__IO uint16_t *)强制转换为地址,然后再用* 对该地址进行访问。转为16位的是因为你想在从这个地址开始读取/写入两个字节的内容。也就是访问两个字节
此帖出自stm32/stm8论坛

点评

哦,明白一些了,dm9000a是工作在16位模式下的,所以要16位的?SD0~SD15接在了FSMC_D0~D15,如果访问0x60000000地址那么A16(CMD)就会被拉低,往里面写数据16位的,就相当于FSMC_D15~D0把这16位数据传到了dm9000a的SD1  详情 回复 发表于 2015-6-7 11:52
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 

回复

964

帖子

24

TA的资源

纯净的硅(初级)

4
 
打算开始学stm32 但是51学的不咋的 是升入学51好还是学stm32好?
此帖出自stm32/stm8论坛

点评

我也是刚开始玩stm32,51用过,不过也没怎么精通,大学毕业设计用51做了一套板子。现在的是项目需要,而且stm32速度更快,功能更强所以就用它了,慢慢学习中  详情 回复 发表于 2015-6-7 11:40
 
个人签名这个人不懒,但是仕么都没留下
 
 

回复

2167

帖子

8

TA的资源

五彩晶圆(初级)

5
 
天天1 发表于 2015-6-7 09:24
打算开始学stm32 但是51学的不咋的 是升入学51好还是学stm32好?

我也是刚开始玩stm32,51用过,不过也没怎么精通,大学毕业设计用51做了一套板子。现在的是项目需要,而且stm32速度更快,功能更强所以就用它了,慢慢学习中
此帖出自stm32/stm8论坛
 
个人签名坐而言不如起而行
 
 

回复

2167

帖子

8

TA的资源

五彩晶圆(初级)

6
 
youki12345 发表于 2015-6-6 22:57
把0x60000000这个数用(__IO uint16_t *)强制转换为地址,然后再用* 对该地址进行访问。转为16位的是因为你想在从这个地址开始读取/写入两个字节的内容。也就是访问两个字节

哦,明白一些了,dm9000a是工作在16位模式下的,所以要16位的?SD0~SD15接在了FSMC_D0~D15,如果访问0x60000000地址那么A16(CMD)就会被拉低,往里面写数据16位的,就相当于FSMC_D15~D0把这16位数据传到了dm9000a的SD15~SD0上是吧?

最后,谢谢哈
此帖出自stm32/stm8论坛
 
个人签名坐而言不如起而行
 
 

回复

1412

帖子

15

TA的资源

版主

7
 
基本上就这个意思,建议看看微机原理的书,,里面有讲怎么算地址空间的。
此帖出自stm32/stm8论坛
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

8
 
#define DM9000_IO_DATA   *((__IO uint16_t *)0x60020000) //
意思是把0x60020000的类型强制转为16位无符号整形的地址, *((__IO uint16_t *)0x60020000)实际上就是读取该地址的参数值,DM9000_IO_DATA   也就代表这个参数值,并且是一个占2个字节内存空间的参数值。后面那个函数返回的实际上也就是0x60020000这个地址的参数值。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表