代码很简单,.就是写下边几个IO口输出为0, 但是实际运行时,如果不加那些 NOP 延时的话.输出口会出现两个不能写为0的情况. 单步调试并没有这样的问题.
请问这是什么原因. 我只是想知道为什么会这样. 虽然用清除寄存器或别的方法可以避免这个问题.
GpioDataRegs.GPBDAT.bit.GPIO58 = 0;
NOP; NOP; NOP; NOP; NOP; NOP;
GpioDataRegs.GPBDAT.bit.GPIO59 = 0;
NOP; NOP; NOP; NOP; NOP; NOP;
GpioDataRegs.GPBDAT.bit.GPIO62 = 0;
NOP; NOP; NOP; NOP; NOP; NOP;
GpioDataRegs.GPBDAT.bit.GPIO63 = 0;
NOP; NOP; NOP; NOP; NOP; NOP;
Jay:
用GPxDAT寄存器操作GPIO时,由于Buffer存在,GPIO引脚上电平变化会有延时。
如果需要即时操作GPIO电平,请用GPxSET和GPxCLR操作。
代码很简单,.就是写下边几个IO口输出为0, 但是实际运行时,如果不加那些 NOP 延时的话.输出口会出现两个不能写为0的情况. 单步调试并没有这样的问题.
请问这是什么原因. 我只是想知道为什么会这样. 虽然用清除寄存器或别的方法可以避免这个问题.
GpioDataRegs.GPBDAT.bit.GPIO58 = 0;
NOP; NOP; NOP; NOP; NOP; NOP;
GpioDataRegs.GPBDAT.bit.GPIO59 = 0;
NOP; NOP; NOP; NOP; NOP; NOP;
GpioDataRegs.GPBDAT.bit.GPIO62 = 0;
NOP; NOP; NOP; NOP; NOP; NOP;
GpioDataRegs.GPBDAT.bit.GPIO63 = 0;
NOP; NOP; NOP; NOP; NOP; NOP;
Eric Ma:
xiaonan,
如Jay所言。
详情可看下面网址
http://processors.wiki.ti.com/index.php/General_Purpose_IO_(GPIO)_FAQ_for_C2000#Q:_Back-to-back_DAT_register_writes_do_not_work_as_expected
Eric
TI中文支持网



