系统频率150MHz
GpioDataRegs.GPADAT.bit.GPIO24=1;
GpioDataRegs.GPADAT.bit.GPIO26=1;
如果两行写在一起的话,24号端口赋值失败,26号端口正常,24号端口用置位和清零寄存器同样失败
GpioDataRegs.GPADAT.bit.GPIO24=1;
×
×
GpioDataRegs.GPADAT.bit.GPIO26=1;
如果在中间插入其他语句,则赋值成功,程序正常运行,也就是说不能连续对同一数据寄存器进行操作,是不是端口的锁存器速度跟不上程序运行的速度,造成数据丢失?
jh chen:
借用回复:
有的芯片对IO口的操作有些需要注意的地方,例如对TMS320x2833x, 2823x的某一个GPIO进行置1清零操作,不建议直接对其DAT数据寄存器进行赋值,而是建议使用SET、CLEAR或TOGGLE来完成。
这在其相关文档中有说明:
When using the GPxDAT register to change the level of an output pin, you should be cautious not toaccidentally change the level of another pin. For example, if you mean to change the output latch levelof GPIOA0 by writing to the GPADAT register bit 0, using a read-modify-write instruction. The problemcan occur if another I/O port A signal changes level between the read and the write stage of theinstruction. You can also change the state of that output latch. You can avoid this scenario by usingthe GPxSET, GPxCLEAR, and GPxTOGGLE registers to load the output latch instead.
如果你是要置1,
GpioDataRegs.GPASET.bit.GPIO24=1;
GpioDataRegs.GPASET.bit.GPIO26=1;
如果你是要置0,
GpioDataRegs.GPACLEAR.bit.GPIO24=1;
GpioDataRegs.GPACLEAR.bit.GPIO26=1;
系统频率150MHz
GpioDataRegs.GPADAT.bit.GPIO24=1;
GpioDataRegs.GPADAT.bit.GPIO26=1;
如果两行写在一起的话,24号端口赋值失败,26号端口正常,24号端口用置位和清零寄存器同样失败
GpioDataRegs.GPADAT.bit.GPIO24=1;
×
×
GpioDataRegs.GPADAT.bit.GPIO26=1;
如果在中间插入其他语句,则赋值成功,程序正常运行,也就是说不能连续对同一数据寄存器进行操作,是不是端口的锁存器速度跟不上程序运行的速度,造成数据丢失?
Victor Zheng:
回复 jh chen:
您好
楼上说的对。不要直接操作data寄存器会有读-修改-写的错误用set或clear寄存器。