工具/软件:Code Composer Studio
我已经在源代码中添加了示例(针对 CAN 数据 TX 的 simple_tx 代码)代码并运行代码。 这已成功执行并运行、但仅生成错误中断。 我对配置进行了一些更改、但没有得到结果。 您能解释一下如何配置 CAN 通信模块。
我在下面附上了我的代码、
空 CANIntHandler()
{
uint32_t ui32Status;
ui32Status = CANIntStatus (CAN0_BASE、CAN_INT_STS_CAUST);
if (ui32Status = CAN_INT_INTID_STATUS)
{
ui32Status = CANStatusGet (CAN0_BASE、CAN_STS_CONTROL);
SEND_String ("错误中断\n");
G_bErrFlag = 1;
// g_ui32MsgCount++;
}
否则、如果(ui32Status = 1)
{
SEND_String ("TX 中断\n");
CANIntClear (CAN0_BASE、1);
G_ui32MsgCount++;
G_bErrFlag = 0;
}
其他
{
SEND_String ("意外中断\n");
}
}
空 UART_Init (空)
{
SysCtlPeripheralEnable (SYSCTL_Periph_UART5);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
GPIOPinTypeGPIOOutput (GPIO_PORTC_BASE、GPIO_PIN_5);
GPIOPinWrite (GPIO_PORTC_BASE、GPIO_PIN_5、0);//RX 使能
GPIOPinConfigure (GPIO_PC6_U5RX);
GPIOPinConfigure (GPIO_PC7_U5TX);
GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_6 | GPIO_PIN_7);
UARTConfigSetExpClk (UART5_BASE、g_ui32SysClock、19200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
IntEnable (INT_UART5);
// UARTIntEnable (UART5_BASE、UART_INT_RX | UART_INT_RT);
IntMasterEnable();
}
int main (空)
{
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_20MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
tCANMsgObject sCANMessage;
UART_Init();
uint32_t ui32MsgData;
uint8_t * pui8MsgData;
pui8MsgData =(uint8_t *) ui32MsgData;
SysCtlPeripheralEnable (SYSCTL_Periph_CAN0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinConfigure (GPIO_PA0_CAN0RX);
GPIOPinConfigure (GPIO_PA1_CAN0TX);
GPIOPinTypeCAN (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
CANInit (CAN0_BASE);
CANBitRateSet (CAN0_BASE、g_ui32SysClock、50000);
CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
IntEnable (INT_CAN0);
CANEnable (CAN0_BASE);
ui32MsgData = 0;
sCANMessage.ui32MsgID = 1;
sCANMessage.ui32MsgIDMask = 0;
sCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
sCANMessage.ui32MsgLen = sizeof (pui8MsgData);
sCANMessage.pui8MsgData = pui8MsgData;
TX
while (1)
{
SEND_String ("Sankar");
// SysCtlDelay (g_ui32SysClock/2);
CANMessageSet (CAN0_BASE、1、&sCANMessage、MSG_OBJ_TYPE_TX);
SysCtlDelay (g_ui32SysClock/2);
if (g_bErrFlag)
{
// g_bErrFlag = 0;
SEND_String ("错误-电缆已连接?\n");
}
其他
{
String_TO_Int (g_ui32MsgCount);
send_String ("总数=");
SEND_String (Data_Buffer);
SEND_String ("\n");
}
ui32MsgData++;
IF (CANStatusGet (CAN0_BASE、CAN_STS_CONTROL)& CAN_STATUS_BUS_OFF)
{
SEND_String ("已输入此条件\n");
CANEnable (CAN0_BASE);
// SysCtlDelay (g_ui32SysClock/2);
while (CANStatusGet (CAN0_BASE、CAN_STS_CONTROL)& CAN_STATUS_BUS_OFF);
}
}
}