您好!
我想了解远程帧如何在28379D 中工作。
我只有一个奖垫
是否可以使用环回来执行远程帧应用?
下面是我正在尝试的代码(在 EX8_REMOT_TX 文件中编辑)。
正在发出请求、但正在响应。
//
//包含的文件
//
#include "driverlib.h"
#include "device.h"
//
//定义
//
#define TXCOUNT 10.
#define MSG_DATA_LENGTH 8.
#define TX_MSG_OBJ_ID 1.
#define RX_MSG_OBJ_ID 2.
//
//全局
//
volatile unsigned long i;
volatile uint32_t txMsgCount = 0;
//
//缓冲存储节点 A 接收的消息
//
uint16_t rxMsgData[8];
//
//主函
//
void main (void)
{
//
//初始化设备时钟和外设
//
device_init();
//
//初始化 GPIO 并为 CANTX/CANRX 配置 GPIO 引脚
//在模块 A 和 B 上
//
DEVICE_initGPIO();
GPIO_setPinConfig (DEVICE_GPIO_CFG_CANRXB);//使用17和12引脚、这些引脚在 launchpad 上具有 CAN 收发器 IC。
GPIO_setPinConfig (DEVICE_GPIO_CFG_CANTXB);
CAN_initModule (CANB_BASE);
CAN_setBitTiming (CANB_BASE、0x09、0x00、0x04、0x03、 0x01);
//
//
CAN_setupMessageObject (CANB_BASE、RX_MSG_OBJ_ID、0x111、
CAN_MSG_FRAME_STD、CAN_MSG_OBJ_TYPE_RX、0、
CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);
CAN_setupMessageObject (CANB_BASE、TX_MSG_OBJ_ID、0x111、
CAN_MSG_FRAME_STD、CAN_MSG_OBJ_TYPE_RxTx_REMOTE、0、
CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);
//
//将接收缓冲区初始化为已知值
//
rxMsgData[0]= 0;
rxMsgData[1]= 0;
rxMsgData[2]= 0;
rxMsgData[3]= 0;
rxMsgData[4]= 0;
rxMsgData[5]= 0;
rxMsgData[6]= 0;
rxMsgData[7]= 0;
//
//启用带有外部回送的 CAN 测试模式
//
CAN_enableTestMode (CANA_base、CAN_TEST_EXL);
//
//启动 CAN 模块操作
//
// CAN_startModule (CANA_base);
CAN_startModule (CANB_BASE);
//
//将数据复制到 CAN-B 的 mailbox1 RAM 中 这是将要使用的数据
//响应远程帧自动传输。
//
//等待忙位清零
//
while ((HWREGH (CANB_BASE + CAN_O_IF1CMD)& CAN_IF1CMD_BUSY)==
CAN_IF1CMD_BUSY)
{
}
//
//写入 IF1DATA 和 IF1DATB 寄存器
//
HWREG_BP (CANB_BASE + CAN_O_IF1DATA)= 0x67452301UL;
HWREG_BP (CANB_BASE + CAN_O_IF1DATB)= 0xEFCDAB89UL;
//
//传输到 MBX RAM
//
HWREG_BP (CANB_BASE + CAN_O_IF1CMD)= 0x00830001UL;
//
//等待忙位清零
//
while ((HWREGH (CANB_BASE + CAN_O_IF1CMD)& CAN_IF1CMD_BUSY)==
CAN_IF1CMD_BUSY)
{
}
//
//从 CAN-A 发送远程帧并等待节点 B 的数据帧
//
//while (1)//取消注释以进行无限传输
对于(I = 0;I < TXCOUNT;I++)
{
//
//启动远程帧的传输。 "rxMsgData"是"虚拟"
//远程帧上没有数据输出
//
CAN_sendMessage (CANB_BASE、RX_MSG_OBJ_ID、MSG_DATA_LENGTH、rxMsgData);
//
//轮询 CAN_ES 寄存器中的 TxOk 位以检查传输的完成
//
// while ((((HWREG_BP (CANB_BASE + CAN_O_ES)& CAN_ES_TXOK))!=
// CAN_ES_TXOK){}
txMsgCount++;//递增 TX 计数器
//
//轮询 CAN_ES 寄存器中的 RxOk 位以检查接收完成情况
//
// while ((((HWREG_BP (CANB_BASE + CAN_O_ES)& CAN_ES_RXOK))!=
// CAN_ES_RXOK){}
CAN_readMessage (CANB_BASE、RX_MSG_OBJ_ID、rxMsgData);
}
//
//停止应用程序
//
asm (" ESTOP0");
}
当两个 while 循环都未注释时、它在 RxOk 循环中等待。