TI中文支持网
TI专业的中文技术问题搜集分享网站

6748 GPIO的SET CLR寄存器写入无效

代码如下:

#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.

赞(0)
未经允许不得转载:TI中文支持网 » 6748 GPIO的SET CLR寄存器写入无效
分享到: 更多 (0)