TI F28003x系列CANA总线调试问题(CAN_TEST_EXL加了能收到,不加收不到)

项目场景:

项目使用的DSP硬件是TMS320F280039c,CANA配置使用的是GPIO58和GPIO18,在测试过程中使用TI案例“can_ex5_transmit_receive”。


问题描述

在使用案例测试过程中,无法正常接收和发送can数据,发现需要在程序中增加如下代码片段才能在can盒上收到数据,但是DSP无法接收数据。

// Enable CAN test mode with external loopback
   CAN_enableTestMode(CANA_BASE, CAN_TEST_EXL);

删除该语句后,can盒无法接收到数据,DSP也无法接收到数据,怀疑是can盒与DSP连接的物理层出现问题。因为在加上这句话的时候可以接收到数据,所以认为配置的位时间是没有问题的,接下来找来示波器进行诊断。
直接说结果,直接对DSP的Rx和Tx进行测试发现,CAN盒的数据在Rx管脚处产生了正确的波形,Tx管脚在正常发送报文时没有完整的波形发出,再三确认物理连接和端口配置后,发现并没有问题,在增加外回环模式后Tx可以看到完整波形,但是Rx的波形依然不被DSP接收。


原因分析:

在这里插入图片描述可以从Ti的库文件中看到这个模式为外回环模式:
在这里插入图片描述查了TI的手册可以看到该模式是将Rx和Tx都接到Tx的管脚上,形成内循环的同时,外部可以监听到can报文。到这里都是符合逻辑的,在去除外回环测试模式后没有完整的波形发出,经过仿真器检测发现是报文没有正确发送,查阅资料后发现判断报文是否正确发送是DSP监听Rx端口需要被拉低,而在外回环模式下该判断会忽略,所以在外回环模式下可以发送。此时陷入僵局,进行很多测试无果。
因为该程序在以前的老的测试板上是正常的,所以对两个板子进行了对比,发现两个板子的晶振不一样,新板子采用的是20M的外部晶振,在device.h中配置为
#define USE_PLL_SRC_XTAL,只能尝试改用内部晶振测试,便把例程配置为
#define USE_PLL_SRC_INTOSC。再次测试发现收发均正常。


解决方案:

在这种情况下只能再次查血手册,在仔细阅读手册时发现当GPIO19被配置为X1外部晶振时,GPIO18会受到牵扯。在这里插入图片描述
这里可以看到外部晶振会占用这两个口,并且需要通过配置来释放X2作为GPIO使用,配置方法见手册:在这里插入图片描述
在这里插入图片描述然后到程序的配置里去阅读了一下:
在SysCtl_setClock(DEVICE_SETCLOCK_CFG);里有这段代码用来选择外部晶振模式:

// An highlighted block
// Configure oscillator source
//
SysCtl_selectOscSource(config & SYSCTL_OSCSRC_M);

//
// Delay of at least 60 OSCCLK cycles
//

在这里插入图片描述这里分为这两种模式,而这两模式则对应这晶振是同时占用X1和X2还是只使用X1,与手册对应。而案例中则是默认使用SYSCTL_OSCSRC_XTAL:

void
SysCtl_selectXTAL(void)
{
    EALLOW;

    //
    // Enable XOSC pads initialization and set X1, X2 high
    //
    HWREGH(CLKCFG_BASE + SYSCTL_O_XTALCR2) |= SYSCTL_XTALCR2_FEN |
                                              SYSCTL_XTALCR2_XIF |
                                              SYSCTL_XTALCR2_XOF;
    //
    // Wait for few cycles to allow load capacitors to charge
    //
    asm(" RPT #5 || NOP");
    ..............

在这里可以看到X2会被拉成高电平,这也是造成为什么非外回环模式时发送不成功,也是为什么GPIO18作为Rx时接收不到数据的根本原因。
在这里插入图片描述在device.h把SYSCTL_OSCSRC_XTAL替换为SYSCTL_OSCSRC_XTAL_SE。
在这里插入图片描述
完美解决问题。这里再次提醒我一定要好好阅读手册。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值