TMS320F28379D: GPIO159电平翻转出现非人为的延迟问题

Part Number: TMS320F28379D
Other Parts Discussed in Thread: C2000WARE

如题,电路设计中将GPIO159设置外部SPI接口的EEPROM器件的片选端,由软件手动控制该IO口,读写存储器期间,发现片选端已事先手动拉低到低电平,但逻辑分析仪扫描SPI接口所有信号,发现时间上是先出现的SPI的时钟和数据信号,片选信号居然延迟了一段时间才被实际拉低;不仅如此,在SPI接口数据发送完毕后,代码上是立刻将片选信号再次拉高,结果发现GPIO159在延迟了很长时间后才真正置为了高电平,代码和逻辑分析仪截图如下:

 

 

e046fbff-b3d5-42ca-86fd-2a5a56e41a51.png

image.png

 

 

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好,

          您这个SPI发送程序是嵌入在串口接收程序中?猜测您这个问题和芯片及驱动无关,建议您检查一下代码执行逻辑。

          c2000ware中提供了SPI示例代码,您可以直接测试一下SPI的功能 spi 。      

  • 是否是SPI驱动引起的问题,我这个验证过,第一个截图里面,我将第一个条件编译关闭,使能第二个条件编译,让GPIO0和GPIO159做电平翻转,类似LED灯闪烁的动作,GPIO159出现一样的情况,GPIO159比GPIO0要延迟几个微秒才变成低电平,然后GPIO0都早已拉到高电平了,GPIO159要过很长时间才是高电平

  • 作为对比,在SPI发送数据时,把GPIO0和GPIO159做同样的电平变化,相关代码截图如下:

    逻辑分析仪对GPIO0和GPIO159进行扫描,同时扫SPI的时钟信号,截图如下:

    如果是SPI或者串口相关代码或者配置有影响,那应该GPIO0的电平翻转时序也要受影响才对呀,况且相关SPI接口的驱动代码,我在别的工程里一直在使用的,没有遇到过此类问题

  • 再进一步测试,关闭串口功能,关闭SPI功能,代码上完全单纯的只让GPIO0和GPIO159两个IO口做电平翻转测试,代码截图如下:

     串口和SPI的初始化都关闭了

     while循环里面只做两个IO口的电平翻转

    逻辑分析仪扫描结果的截图如下:

    放大后的细节:

     电平由高到低期间,GPIO159比GPIO0延迟大约26us

     电平由低到高期间,GPIO159比GPIO0延迟大约130us

  • 您好,

          我不确认为何会出现此问题,GPIO的PORTA 和PORTE没什么区别,GPIO159外围电路有什么特殊吗。

         您测试过单独GPIO的例程码?比如 gpio_toggle

  • 板子是官方的LaunchPad XL 的红色板子,我把所有外接的东西都拆掉,只剩下LaunchPad板子,然后同时测试GPIO0 GPIO1 GPIO159三个IO口,使用GPIO_Toggle寄存器来控制电平翻转,情况是一样的,截图如下:

     这是代码截图

     逻辑分析仪截图,从上到下分别是GPIO0  GPIO1  GPIO159

    逻辑分析仪放大后的细节:

     LaunchPad XL板子就只接了个逻辑分析仪,所以排除了外部器件影响GPIO159的可能性了

    和我拆掉外接的扩展板之前测试的结果基本一致的,之所以要折腾这个GPIO159,是当初画这个LaunchPad的扩展板的时候,有个SPI接口的EEPROM的片选端刚好接的是GPIO159,然后调试很久,发现这颗EEPROM一直不能正常读写数据,然后逻辑分析仪扫SPI接口所有信号,就发现片选端GPIO159出现时序问题

  • 貌似找到问题了,LaunchPad  XL红板子上,GPIO159外接了电阻电容的低通滤波器,一直没注意这个