代码如下:
#define HWREG(x) (*((volatile unsigned int*)(x)))
HWREG(0x01E26018) = 1 << 18; //SET_DATA01
HWREG(0x01E2601C) = 1 << 18; //CLR_DATA01
分别将GPIO1[2]置高和拉低
这两行代码开始都有效的 今天用时发现引脚上没有电平跳变了
换成操作OUT_DATA01寄存器(0x01E26014)又能控制了 这是为什么?
Shine:
查过SET_DATA0, CLR_DATA0的值吗?
user4256844:
回复 Shine:
在仿真Register页面操作:的往SET_DATA01寄存器中写0x00040000,可以将该IO置高,但同时CLR_DATA01寄存器值也变为了0x00040000,之后无论往CLR_DATA01寄存器中写0x00000000还是0x00040000都没有任何效果
user4256844:
回复 Shine:
还有SET_DATA0, CLR_DATA0这两个寄存器的操作效率比DAT_DATA0要高?
也就是说操作这两个寄存器能实现的IO最大翻转速率比DAT_DATA0要高
Shine:
回复 user4256844:
没有效率谁高之说。看一下下面的e2e帖子。https://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/117985
user4256844:
回复 Shine:
这个帖子中的问题在于将SET_DATA与CLR_DATA寄存器进行了 |= 赋值操作
而我的代码中是直接将要操作的位写1的
Shine:
回复 user4256844:
那你用帖子里提到的rcsl中的例程可以吗?如果例程也不行的话,那就要排查硬件问题了。
Tony Tang:
回复 user4256844:
xiaolin chen1的往SET_DATA01寄存器中写0x00040000,可以将该IO置高,但同时CLR_DATA01寄存器值也变为了0x00040000,
这个现象是正常的,两个寄存器的值是同时变的,一样的。
xiaolin chen1之后无论往CLR_DATA01寄存器中写0x00000000还是0x00040000都没有任何效果
不管是set, 还是clear,都是对相应的bit写1进行设置或将已设置的清除。这也是跟data寄存器操作的区别,data寄存器是写什么就输出什么,而这两个寄存器是要写1.
TI中文支持网
