TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049C: CANB的初始化

Part Number:TMS320F280049C

以下是我的CANB的初始化程序,麻烦帮我看看哪里出了问题。由原来的CANA改CANB ,原来CANA的时候是好用的修改成CANB就不好用了。

GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXB);
GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXB);
CAN_initModule(CANB_BASE);
CAN_setBitRate(CANB_BASE, DEVICE_SYSCLK_FREQ, 500000, 20);

EPWM_INIT_GPIO();
EPWM_INIT_func();
PwmEnable();

Control_Init(); //控制参数初始化

EINT; //Enable interrupts globally
ERTM;

CAN_enableTestMode(CANB_BASE, CAN_TEST_EXL);
CAN_setupMessageObject(CANB_BASE, 1, 0x18102700, CAN_MSG_FRAME_EXT,
CAN_MSG_OBJ_TYPE_TX, 0x0, CAN_MSG_OBJ_NO_FLAGS ,
MSG_DATA_LENGTH);
CAN_setupMessageObject(CANB_BASE, 2, 0x18102700, CAN_MSG_FRAME_EXT,
CAN_MSG_OBJ_TYPE_RX, 0x0, CAN_MSG_OBJ_USE_EXT_FILTER,
MSG_DATA_LENGTH);
CAN_startModule(CANB_BASE);
temp_txMsgData[0]=0x1234;
temp_txMsgData[1]=0x5678;
txMsgData[0] = temp_txMsgData[0]>>8;
txMsgData[1] = temp_txMsgData[0]&0xFF;
txMsgData[2] = temp_txMsgData[1]>>8;
txMsgData[3] = temp_txMsgData[1]&0xFF;
*(uint16_t *)rxMsgData = 0;

while(1)
{
CAN_sendMessage(CANB_BASE, 1, MSG_DATA_LENGTH, txMsgData);
DEVICE_DELAY_US(500000);
if (CAN_readMessage(CANB_BASE, 2, rxMsgData))
{
// Check that received data matches sent data.
// Device will halt here during debug if data doesn't match.

if((txMsgData[0] != rxMsgData[0])||(txMsgData[1] != rxMsgData[1])||
(txMsgData[2] != rxMsgData[2])||(txMsgData[3] != rxMsgData[3]))
{
Example_Fail = 1;
asm(" ESTOP0");
}
else
{

temp_rxMsgData[0]=rxMsgData[0]<<8|rxMsgData[1];
temp_rxMsgData[1]=rxMsgData[2]<<8|rxMsgData[3];
// Increment message received counter
msgCount++;
Example_PassCount++;
}
}
else
{
//
// Device will halt here during debug if no new data was received.
//
Example_Fail = 1;
asm(" ESTOP0");
}
txMsgData[0] += 0x01;
txMsgData[1] += 0x01;
if(txMsgData[0] > 0xFF)
{
txMsgData[0] = 0;
}
if(txMsgData[1] > 0xFF)
{
txMsgData[1] = 0;
}
}
}

Susan Yang:

建议您确认一下问题

1 您的CANB引脚是否设置正确?您使用的是launchpad?

2 请使用内部的loopback先测试一下,以确保配置没有问题

3 您现在是测试不成功的表现是什么?

4 后续上传代码的话,请使用“”插入–>代码“的形式,谢谢

,

shipeng huang:

1、

#define DEVICE_GPIO_CFG_CANRXB GPIO_10_CANRXB // "pinConfig" for CANB RX#define DEVICE_GPIO_CFG_CANTXB GPIO_8_CANTXB // "pinConfig" for CANB TX

2、就是采用的loopback测试的不好用了,现象为

while(1) { CAN_sendMessage(CANB_BASE, 1, MSG_DATA_LENGTH, txMsgData); DEVICE_DELAY_US(500000); if (CAN_readMessage(CANB_BASE, 2, rxMsgData)) { // Check that received data matches sent data. // Device will halt here during debug if data doesn't match.

if((txMsgData[0] != rxMsgData[0])||(txMsgData[1] != rxMsgData[1])|| (txMsgData[2] != rxMsgData[2])||(txMsgData[3] != rxMsgData[3])) { Example_Fail = 1; asm(" ESTOP0"); } else {

temp_rxMsgData[0]=rxMsgData[0]<<8|rxMsgData[1]; temp_rxMsgData[1]=rxMsgData[2]<<8|rxMsgData[3]; // Increment message received counter msgCount++; Example_PassCount++; } } else { // // Device will halt here during debug if no new data was received. // Example_Fail = 1; asm(" ESTOP0"); //直接跑到这了 } txMsgData[0] += 0x01; txMsgData[1] += 0x01;

,

shipeng huang:

在CANA的时候是正常的收发状态但是到了CANB就是上面描述的样子。

,

shipeng huang:

现在找到了问题所在:

if((msgCtrl & CAN_IF2MCTL_NEWDAT) == CAN_IF2MCTL_NEWDAT) { // // Read out the data from the CAN registers. // CAN_readDataReg(msgData, (base + CAN_O_IF2DATA),//CAN_O_IF2DATA这里面没有数据 (msgCtrl & CAN_IF2MCTL_DLC_M));

现在的状态数据发出去了,但是没有没有发送至CAN_O_IF2DATA数据寄存器中。

不知道发哪去了?

,

shipeng huang:

还有一个问题,

CAN_startModule(uint32_t base){ // // Check the arguments. // ASSERT(CAN_isBaseValid(base));  //这句不执行不知道为啥,有没有办法解决一下么。

// // Clear Init and CCE bits // HWREGH(base + CAN_O_CTL) &= ~(CAN_CTL_INIT | CAN_CTL_CCE);}

,

Susan Yang:

请问您现在改写的是哪个例程?can_ex1_loopback?

,

shipeng huang:

是的用的can_ex1_loopback

,

shipeng huang:

是的用的can_ex1_loopback

,

Susan Yang:

您现在使用的是launchpad?需要注意的是 launchpad的CAN 收发器仅连接到 GPIO32 和 GPIO33 引脚。

这意味着只有上述引脚可用于 CAN 功能且只能用作 CAN-A。无法在 LaunchPAD 中使用 CANB。只有 CANA 可用且仅在 GPIO32 和 GPIO33 上可用。

,

shipeng huang:

那如果是LAUNCHXL-F280049呢?这种的呢?和launchpad是一样的么?

,

shipeng huang:

我手里现在3块板卡,1块是launchpad-28377S,2块是LAUNCHXL-280049.这三块板卡之间是要通信的。

,

Susan Yang:

我指的就是LAUNCHXL-F280049,即F280049 的launchpad

,

Susan Yang:

shipeng huang 说:这三块板卡之间是要通信的。

请问具体是怎样通信?能否详细说明一下?

,

shipeng huang:

使用CANB通信,是不能用了?

,

Susan Yang:

可以使用,但是您需要自己外接can收发器

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049C: CANB的初始化
分享到: 更多 (0)