Other Parts Discussed in Thread: LAUNCHXL-F280049C
您好想问一下:28377S中的发送程序移植到280049C中都需要底层修改什么?
为什么我移植到280049不能用呢?
希望您测试一下然后给出您都修改了哪些参数?
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.
您好想问一下:28377S中的发送程序移植到280049C中都需要底层修改什么?
为什么我移植到280049不能用呢?
希望您测试一下然后给出您都修改了哪些参数?
28377S中的发送程序移植到280049C中都需要底层修改什么?
理论上两者的CAN是相同的,您可以直接将例程在280049上使用。但是您需要根据板子原理图来修改CAN引脚
为什么我移植到280049不能用呢?
具体表现是什么呢?能否详细说一下?
我的can引脚修改了,在28377S上收发都正常。当然是采用了收发2个程序和USBCAN ,但是现在移植到到280049上和USBCAN就连接不通了,具体表现就是停留在 while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) != CAN_ES_TXOK)不动作了。难道是我的个屁噢修改的不对?
你好:
1、开发板是LAUNCHXL-F280049C,程序是由28377S中移植到280049中的。
2、280049的CAN引脚是已经修改,并按照开发板硬件原理图修改的。
3、程序是由28377S的can_ex4_simple_transmit移植到280049的。现在的状态是停在了while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) != CAN_ES_TXOK)这一句。
#include "Main_Control.h"
#include "TI_CLA_TASK.h"
#include "device.h"
#include "can.h"
#include "sysctl.h"
#include "gpio.h"
//#include "f28004x_gpio.h"s
//CAN变量移植
#define MSG_DATA_LENGTH 4
volatile unsigned long msgCount = 0;
// Main
uint16_t temp_txMsgData[2],temp_rxMsgData[2];
uint16_t txMsgData[4], rxMsgData[4];
//void initCLA( void );
//变量定义
Uint32 Task_Mode = 0;
Uint32 Load_Dram_Num=0;
Uint32 Fram_Check_Cnt=0;
Uint32 Fram_Check_Result=0;
//从28037xd复制的宏定义
#define TXCOUNT 100000
#define MSG_DATA_LENGTH 8
#define TX_MSG_OBJ_ID 1
//50hz-60hz 程序兼容添加 / 数据中转 /修改 hz 后断电生效
float DETECT_N_ADD =0;
float DETECT_N_INV_ADD =0;
float DETECT_N2_ADD =0;
float DETECT_N2_INV_ADD =0;
float DETECT_N4_ADD =0;
float DETECT_N4_INV_ADD =0;
float DETECT_N8_ADD =0;
float DETECT_N8_INV_ADD =0;
//函数部分
//Uint16 buffer[500]={0};
float buffer_f[624]={0};
Uint16 num=0,num1=0;
void main(void)
{
static int16 Temp1= 0,Temp2=0;
InitSysCtrl(); //初始化系统时钟
InitPieCtrl(); //初始化PIE,clear PIE
InitGpio(); //初始化GPIO
GPIO_SetupPinMux(DEVICE_GPIO_PIN_LED1, GPIO_MUX_CPU1, 0);
GPIO_SetupPinOptions(DEVICE_GPIO_PIN_LED1, GPIO_OUTPUT, GPIO_PUSHPULL);
SCI_INIT(); //SCI 初始化配置
//initCLA();
IER = 0x0000; //CPU级中断失能
IFR = 0x0000; //清除CPU级中断标志
InitPieVectTable(); //初始化向量表
DINT; //关闭中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //Enable the PIE
PieCtrlRegs.PIEACK.all = 0xFFFF;
EALLOW;
PieVectTable.EPWM1_INT = &EPWM1_ISR; //Write the ISR vector
EDIS;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1; //PIEIERx bit
IER |= M_INT3; //Set the CPU IER @group 3
GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXA);
GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXA);
//GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXB);
//GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXB);
CAN_initModule(CANA_BASE);
CAN_setBitRate(CANA_BASE, DEVICE_SYSCLK_FREQ, 500000, 16);
/*
InitCpuTimers();
// 15.6K → 64
ConfigCpuTimer(&CpuTimer1, 100, 150);
CpuTimer1Regs.TCR.all = 0x4000;
*/
EPWM_INIT_GPIO();
EPWM_INIT_func();
PwmEnable();
//InitSPI(); //需要确认
//InitSPIB(); //需要确认
Control_Init(); //控制参数初始化
EINT; //Enable interrupts globally
ERTM;
//CAN_enableTestMode(CANA_BASE, CAN_TEST_EXL);
//20210730从28037xd移植过来的发送程序
CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID, 0x18102701,
CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
//
// Initialize the transmit message object data buffer to be sent
//
txMsgData[0] = 0x01;
txMsgData[1] = 0x23;
txMsgData[2] = 0x45;
txMsgData[3] = 0x67;
//txMsgData[4] = 0x89;
//txMsgData[5] = 0xAB;
//txMsgData[6] = 0xCD;
//txMsgData[7] = 0xEF;
//
// Start CAN module A operations
//
CAN_startModule(CANA_BASE);
//
// Transmit messages from CAN-A
//
while(1)
{
CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID, MSG_DATA_LENGTH, txMsgData);
//
// Poll TxOk bit in CAN_ES register to check completion of transmission
//
txMsgData[0] += 0x01;
txMsgData[1] += 0x01;
if(txMsgData[0] > 0xFF)
{
txMsgData[0] = 0;
}
if(txMsgData[1] > 0xFF)
{
txMsgData[1] = 0;
}
while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) != CAN_ES_TXOK)
{
}
}
//
// Stop application
//
asm(" ESTOP0");
}
GPIO我修改了成32、33,然后我自己也看一下是什么问题。非常感谢您的帮助!
你好我是单独测试can功能的其他的只是存放在里面,
现在找到的问题就是卡在这里 while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) != CAN_ES_TXOK)
{
}
can_ctl 的SIE没有使能,不知道28377S是怎么弄的是不是也没有使能。
现在找到的问题就是卡在这里 while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) != CAN_ES_TXOK)
就是说明发送没有成功,CAN_ES_TXOK不置位