你好,我使用的是C6747芯片。1、通过控制GPIO的OUTDATA寄存器来对相应的I/O引脚进行控制,但在使用过程中发现OUTDATA寄存器只能被赋值一次,继续操作同样的I/O引脚,OUTDATA寄存器相应的位则不能被赋新值,除非用CLRDATA寄存器清除寄存器的值,这是为什么?2、操作OUTDATA寄存器,寄存器相应I/O口只能被赋1,赋0却不起作用,是因为OUTDATA寄存器初始值为0吗?3、操作OUTDATA、SETDATA、CLRDATA寄存器中的任意一个寄存器,另外两个都会随之变化,它们三个到底是什么关系?谢谢
Shine:
1. 应该直接赋值OUTDAT就可以了,不需要CLRDATA寄存器清除,请问你代码是怎么写的?2. 如果已经是0的话,赋值0还是0啊。
3. 他们的关系见下面的文档图。
Figure 20-1. GPIO Block Diagramhttp://www.ti.com/lit/ug/spruh91b/spruh91b.pdf
招财猫了个咪:
回复 Shine:
你好,我是先定义了一个结构体,如下图,然后将对应引脚复用为I/O口,并配置方向为输出,先通过GPIO_01->OUTDATA[1] = 0X03j将对应的两个引脚写1,然后再执行GPIO_01->OUTDATA[1] = 0X00,将相应I/O引脚写0,但此时OUTDATA寄存器的值并不会改变。
Shine:
回复 招财猫了个咪:
试试最简单的写法,直接对OUTDATA寄存器读写。
招财猫了个咪:
回复 Shine:
我这样控制寄存器没有问题:GPIO_01-> OUT_DATA[1] = ( 0X03 << 5 );但是下面进行了或运算就不行:GPIO_01-> OUT_DATA[1] |= ( 0X03 << 5 );请问是OUTDATA寄存器不支持逻辑运算吗?