打印

ARM求教

[复制链接]
707|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hegawell|  楼主 | 2015-1-16 14:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
pb1005| | 2015-1-16 21:13 | 只看该作者
这个是51单片机吗,是ARM吗?

使用特权

评论回复
板凳
icekoor| | 2015-1-16 23:08 | 只看该作者
抛砖引玉
unsigned char a = 0x31;
p0.4 = a & 0x01;
p0.5 = (a>>1) & 0x01;
p0.7 = (a>>2) & 0x01;
p0.8 = (a>>3) & 0x01;
p0.9 = (a>>4) & 0x01;
p0.10 = (a>>5) & 0x01;

使用特权

评论回复
地板
江陵龙少| | 2015-1-17 10:43 | 只看该作者
楼主的问题很典型,不能以解决问题而结束,而应该形成编程思想,
首先,不管是arm还是单片机都会涉及到对gpio比特位的读写,
其次,对gpio有读和写2种操作,
第三,对于具体的单片机或arm,读写gpio口的方式会有不同,比如单片机可位寻址,对于stm 32有比特位带法,对于nxp的arm一个gpio口组(16个比特),至少对应3个不同功能的寄存器来控制它,一个写1置位,写0无影响;一个写1置0,写0无影响,还有一个状态寄存器,只读。
最后,由于不同器件操作不同,对于某个特定器件,应该以宏定义形成头文件方式,供调用,形成一劳永逸。
说得有点多了,呵呵!

使用特权

评论回复
5
江陵龙少| | 2015-1-17 10:45 | 只看该作者
思想决定高度!

使用特权

评论回复
6
永远在路上| | 2015-1-17 22:55 | 只看该作者
我认为:若是ARM(如ARM9),则一般不可位操作吧。一般是由一组GPIO端口控制。则需要GPxCON,GPXDAT,GPXUP三个寄存器控制,尤其是前两个。若控制输出,则至少先让对应引脚的GPxCON的对应两位为01,再使GPxDAT的相应位与你要输出的二进制位值相等即可。单片机端口就没这么麻烦了。

使用特权

评论回复
7
ningling_21| | 2015-1-20 09:51 | 只看该作者
不连续的位只能分开来操作,不能同时

使用特权

评论回复
8
ayb_ice| | 2015-1-20 10:29 | 只看该作者
这都不会吗

使用特权

评论回复
9
prettyxp| | 2015-1-21 11:56 | 只看该作者
本帖最后由 prettyxp 于 2015-1-21 12:03 编辑

GPIO0_DATA = ((0x31 & 0x3) | ((0x31 & 0xc) << 1) << 4);
写那么多代码,占空间呀!

使用特权

评论回复
10
prettyxp| | 2015-1-21 11:57 | 只看该作者
本帖最后由 prettyxp 于 2015-1-21 12:04 编辑

GPIO0_DATA |=[size=14.4444446563721px]((0x31 & 0x3) | ((0x31 & 0xc) << 1) << 4);
完美一点是这样写法

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

1

粉丝