6402|13

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于LPC2103芯片GPIO操作? [复制链接]

PINSEL0 = 0x00; /* 设置P0.0~P0.15都为GPIO */ 这个我明白
请帮忙分析如下三个语句是如何操作的,尤其是等号后面的“&”“|”操作的作用?

PINSEL0 = PINSEL0 & 0xFFFFFFFC; /* 设置P0.0为GPIO */ 这个地方是如何操作的,实现设定P0.0为GPIO而不影响其他引脚

PINSEL0 = (PINSEL0 & 0xFFFFFFFC) | 0x01; /* 设置P0.0的功能为TxD0 */

PINSEL0 = (PINSEL0 & 0xFFF0FFFF) | (0x05 << 16); /* 设置P0.8/P0.9的功能为TxD1/RxD1*/

最新回复

两位对应一个IO口,手册上有说  详情 回复 发表于 2010-1-3 13:12
点赞 关注

回复
举报

91

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
用1进行与操作.....不改变
用0进行或操作.....不改变

PINSEL0 = (PINSEL0 & 0xFFFFFFFC) | 0x01;
前面的 & 0xFFFFFFFC 表示除了最后两位都不改变
后面的 | 0x01       表示除了最后一位都不改变

PINSEL0 = (PINSEL0 & 0xFFF0FFFF) | (0x05 < < 16);
这个也差不多.....只改变位16-19
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
兄台能具体一点吗,我还是有些不明白阿!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
前面一条指令只把最后两位变成01
后面一条指令只把位19-16变成0101
其它位都保持不变

.........LZ还是再去看看书....复习下C语言吧.........
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼上是正解...
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
——————
0 | 1 = 1
1 | 1 = 1
结论:某一位或上1,则将该为置1

0 & 1 = 0
1 & 1 = 1
结论:某一位与上1,对该位无影响

0 | 0 = 0
1 | 0 = 1
结论:某一位或上0,对该位无影响

0 & 0 = 0
1 & 0 = 0
结论:某一位与上0,则将该为置0
——————

1> PINSEL0 = PINSEL0 & 0xFFFFFFFC;
FFFFFFFC = 1111 1111 1111 1111 1111 1111 1111 1100
所以此句将最低两位置0,对其他位无影响
查看datasheet,观其功能,设置P0.0为GPIO

2> PINSEL0 = (PINSEL0 & 0xFFFFFFFC) | 0x01;
同上,此句代码先将最低两位置0,然后又将最后一位置1
综合起来就是将最低两位设置为01
查看datasheet,观其功能,设置P0.0的功能为TxD0

3> PINSEL0 = (PINSEL0 & 0xFFF0FFFF) | (0x05 < < 16);
与上1111 1111 1111 0000 1111 1111 1111 1111
先将PINSEL0的16,17,18,19位置0,对其他位无影响
0x05 = 0000 0101 将其左移16位,为:
    0000 0000 0000 0101 0000 0000 0000 0000
或上此数,实将第16,17,18,19位,设为0101
这是此句代码的实际作用
查看datasheet,观其功能,设置P0.8/P0.9的功能为TxD1/RxD1
——————————————————————————
JOYZML(菜鸟朱铭雷)
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
附加一句:
如楼主还是看不明白
建议去查阅一下C语言工具书
勿于浮沙筑高台
个人建议
欢迎交流学习
——————————————————————————
JOYZML(菜鸟朱铭雷)
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

9
 
1> PINSEL0 = PINSEL0 & 0xFFFFFFFC;
FFFFFFFC = 1111 1111 1111 1111 1111 1111 1111 1100
所以此句将最低两位置0,对其他位无影响
查看datasheet,观其功能,设置P0.0为GPIO
如上所述,是不是可以理解为每一位对应一个引脚,那么是不是右侧(最低)的一位应该对应第一个引脚?为什么最低两位确定引脚为P0.0?

2> PINSEL0 = (PINSEL0 & 0xFFFFFFFC) | 0x01;
同上,此句代码先将最低两位置0,然后又将最后一位置1
综合起来就是将最低两位设置为01
查看datasheet,观其功能,设置P0.0的功能为TxD0
此处OK!谢兄台!
3> PINSEL0 = (PINSEL0 & 0xFFF0FFFF) | (0x05 < < 16);
与上1111 1111 1111 0000 1111 1111 1111 1111
先将PINSEL0的16,17,18,19位置0,对其他位无影响
0x05 = 0000 0101 将其左移16位,为:
    0000 0000 0000 0101 0000 0000 0000 0000
或上此数,实将第16,17,18,19位,设为0101
这是此句代码的实际作用
查看datasheet,观其功能,设置P0.8/P0.9的功能为TxD1/RxD1
如果最低位对应P0.0引脚的话,那么是不是应该19,18,17,16位设置为0101,不知我的理解对否,还请兄弟多指教!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
如上所述,是不是可以理解为每一位对应一个引脚,
那么是不是右侧(最低)的一位应该对应第一个引脚?
为什么最低两位确定引脚为P0.0?

解释:楼主去down一份LPC2103的芯片手册
到上面查阅一下PINSEL0寄存器,便一目了然
里面某几位是控制什么的,如何设置,会写的清清楚楚
这几个问题你都会理解了
——————————————————————————
JOYZML(菜鸟朱铭雷)
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
楼主去周立功网站下载下:LPC21XX的手册即可。

网址:
http://www.zlgmcu.com/philips/NXP_ARM_2200.asp

另外NXP官网上也有配套的KEIL C源码
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
这个手册我有,只是把C语言与硬件对应起来还是有些困难,谢谢各位的指点,我会细细的看看资料。不过不理解的地方还请各位帮助,谢谢,祝新年快乐!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
有这个手册
你就查阅一下
PINSEL0
这个寄存器
看看每一位是控制什么的
怎么设置
甚至你ctrl + F
搜索一下PINSEL0
就都明白了
——————————————————————————
JOYZML(菜鸟朱铭雷)
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

14
 
两位对应一个IO口,手册上有说
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表