调试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
volatileunsignedlong msgCount = 0;
voidmain(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;
}
}
}
Susan Yang:请问您现在使用的是哪个开发板?您所描述的“第一次插上usb仿真器,同时给开发板供电,启动方式为flash启动” 具体是如何供电的?