This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

280049的can接口需要复位后正常



调试280049的can接口时遇到这样一个问题:

使用例程can_ex1_loopback,去掉内部回环测试模式和中断,只进行收发数据。

第一次插上usb仿真器,同时给开发板供电,启动方式为flash启动,然后使用ccs环境进行仿真,can运行不正常,无法收发数据,程序在运行到CAN_sendMessage(CANA_BASE, 1, MSG_DATA_LENGTH, txMsgData);时跑飞,跟进去是在ASSERT(SysCtl_getClock(DEVICE_OSCSRC_FREQ) == DEVICE_SYSCLK_FREQ);时跑飞。

复位板卡,不管是用按键复位还是重新插拨usb,再次运行程序,则can的收发恢复,程序正常运行。

正常运行后,只要不拔usb,用按键复位均能正常运行。但是如果拔usb,则又不能运行。

 

程序代码为:

 #include "driverlib.h"

#include "device.h"

#define MSG_DATA_LENGTH    2

volatile unsigned long msgCount = 0;

void main(void)

{

    uint16_t txMsgData[2], rxMsgData[2];

    Device_init();

    Device_initGPIO();

    GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXA);

    GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXA);

    CAN_initModule(CANA_BASE);

    CAN_setBitRate(CANA_BASE, DEVICE_SYSCLK_FREQ, 125000, 16);

    CAN_setupMessageObject(CANA_BASE, 1, 0x1, CAN_MSG_FRAME_EXT,

                           CAN_MSG_OBJ_TYPE_TX, 0, CAN_MSG_OBJ_NO_FLAGS,

                           MSG_DATA_LENGTH);

    CAN_setupMessageObject(CANA_BASE, 2, 0x1, CAN_MSG_FRAME_EXT,

                           CAN_MSG_OBJ_TYPE_RX, 0, CAN_MSG_OBJ_NO_FLAGS,

                           MSG_DATA_LENGTH);

    CAN_startModule(CANA_BASE);   

    txMsgData[0] = 0x01;

    txMsgData[1] = 0x02;

    *(uint16_t *)rxMsgData = 0;

 

    for(;;)

    {

        CAN_sendMessage(CANA_BASE, 1, MSG_DATA_LENGTH, txMsgData);

 

        DEVICE_DELAY_US(500000);

        txMsgData[0] += 0x01;

        txMsgData[1] += 0x01;

       

        if(txMsgData[0] > 0xFF)

        {

            txMsgData[0] = 0;

        }

        if(txMsgData[1] > 0xFF)

        {

            txMsgData[1] = 0;

        }       

    }

}