代码如下:
#define HWREG(x) (*((volatile unsigned int*)(x)))
HWREG(0x01E26018) = 1 << 18; //SET_DATA01
HWREG(0x01E2601C) = 1 << 18; //CLR_DATA01
分别将GPIO1[2]置高和拉低
这两行代码开始都有效的 今天用时发现引脚上没有电平跳变了
换成操作OUT_DATA01寄存器(0x01E26014)又能控制了 这是为什么?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
代码如下:
#define HWREG(x) (*((volatile unsigned int*)(x)))
HWREG(0x01E26018) = 1 << 18; //SET_DATA01
HWREG(0x01E2601C) = 1 << 18; //CLR_DATA01
分别将GPIO1[2]置高和拉低
这两行代码开始都有效的 今天用时发现引脚上没有电平跳变了
换成操作OUT_DATA01寄存器(0x01E26014)又能控制了 这是为什么?
在仿真Register页面操作:的往SET_DATA01寄存器中写0x00040000,可以将该IO置高,但同时CLR_DATA01寄存器值也变为了0x00040000,之后无论往CLR_DATA01寄存器中写0x00000000还是0x00040000都没有任何效果
还有SET_DATA0, CLR_DATA0这两个寄存器的操作效率比DAT_DATA0要高?
也就是说操作这两个寄存器能实现的IO最大翻转速率比DAT_DATA0要高
没有效率谁高之说。
看一下下面的e2e帖子。
https://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/117985
xiaolin chen1 说:的往SET_DATA01寄存器中写0x00040000,可以将该IO置高,但同时CLR_DATA01寄存器值也变为了0x00040000,
这个现象是正常的,两个寄存器的值是同时变的,一样的。
xiaolin chen1 说:之后无论往CLR_DATA01寄存器中写0x00000000还是0x00040000都没有任何效果
不管是set, 还是clear,都是对相应的bit写1进行设置或将已设置的清除。这也是跟data寄存器操作的区别,data寄存器是写什么就输出什么,而这两个寄存器是要写1.