Other Parts Discussed in Thread:C2000WARE
GpioDataRegs.GPADAT.bit.GPIO0 = 0;
GpioDataRegs.GPADAT.bit.GPIO1 = 0;
这样连续操作导致IO0写入失败,中间加Nop空指令就可以,请问这是什么原理,谢谢!
Green Deng:
你好,使用GPxDAT寄存器操作GPIO口的话需要添加一个延时(或者你操作的空指令),具体原理不知。使用其他寄存器(如set,clear,toggle)的话不需要详细你可以参考例程:C:\ti\c2000\C2000Ware_3_03_00_00\device_support\f2833x\examples\gpio_toggle
,
William chen:
谢谢,解决方法我知道,就是想知道原理,是不是335是多级流水线,指令会并行导致的?335是几级流水线这个我好像也没找到资料。
,
Green Deng:
F28335是8级流水线
GPADAT寄存器比较特殊,它反映I/O的状态,使用位操作指令时会有注意,因为位操作指令实际上是分三步完成的:读-改-写。如果坚持一定要用GPADAT来对输出口操作,则必须是对整个字进行操作,这样就不会有这个问题了。具体原因可以查看下面的应用说明文档(在 6.1.2 GPxDAT Registers)
www.ti.com.cn/…/spraa85e.pdf
,
William chen:
谢谢,辛苦了!
,
Green Deng:
客气了