主题 : 寄存器GPCCON的配置问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 6046
精华: 0
发帖: 6
金钱: 60 两
威望: 60 点
综合积分: 12 分
注册时间: 2009-05-17
最后登录: 2009-08-15
楼主  发表于: 2009-06-16 22:07

 寄存器GPCCON的配置问题

       今天看了一个实例,说的是端口C接连个LED,然后现在要配置GPCCON:

         rGPCCON=rGPCCON & 0x00000001 | 0xfffffffc;

        从注释看是为了将GPCCON最低两位设为01,以保证C口第一位输出,其他位置1,保留;但为什么写如此复杂的代码?直接rGPCCON=0x ffffffd;不行吗?d就是1101。
    另外如果rGPCCON原来最后两位是00,按照实例的代码,最后也还是00,根本达不到设为01的目的啊,

        刚接触嵌入式的C编程,感觉比PC上的C难懂很多~·
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
1楼  发表于: 2009-06-17 11:26
最低两位可能为01,也可能为00;
有可能是程序写错了,毕竟人都会犯错;
位操作在底层很常用,要掌握好;
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2009-06-17 12:13
rGPCCON=0x ffffffd是不对的,这样会把[31:2]都置为1, 而这个操作本来的目的只是将[1:0]写成01b, 其他bit不变;
我是不会用rGPCCON=rGPCCON & 0x00000001 | 0xfffffffc;这种白痴写法,让自己和别人都看不懂。老老实实分两句写:
复制代码
  1. rGPCCON = rGPCCON & 0xffffffc ; /* 将[1:0]清零,更简洁的写法是rGPCCON &= ~0x3 */
  2. rGPCCON = rGPCCON | 0x1; /* 将[1:0]置成01b,更简洁的写法是rGPCCON |= 0x1 */


C语言的位操作在ARM或是PC上是一样的,只是在PC上很少接触底层硬件操作所以用的不多,而在嵌入式系统上,这是最基本的操作硬件方式。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."