YTM32B1HA0 DMA采集3路SENT信号
-
YTM32B1HA0 DMA采集3路SENT信号,只有SENT_RX_IN1有数据,示波器测试信号输入正常。
-
/* USER CODE END Header /
#include "sdk_project_config.h"
/ Includes ------------------------------------------------------------------*//* Private includes ----------------------------------------------------------/
/ USER CODE BEGIN Includes /
/ USER CODE END Includes *//* Private typedef -----------------------------------------------------------/
/ USER CODE BEGIN PTD /
/ USER CODE END PTD *//* Private define ------------------------------------------------------------/
/ USER CODE BEGIN PD */
#define CAN5_INST (5U)#define RX_STD_MSG_ID (0x03UL)
#define RX_STD_MAILBOX (0x00UL)#define TX_MSG1_ID (0x141UL)
#define TX_MAILBOX1 (0x01UL)#define TX_MSG2_ID (0x142UL)
#define TX_MAILBOX2 (0x02UL)#define TX_MSG3_ID (0x143UL)
#define TX_MAILBOX3 (0x03UL)#define CAN_STB_H() (PINS_DRV_SetPins(GPIOC, (pins_channel_type_t)1 << 12U))
#define CAN_STB_L() (PINS_DRV_ClearPins(GPIOC, (pins_channel_type_t)1 << 12U))#define SENSOR_POWER_H() (PINS_DRV_SetPins(GPIOD, (pins_channel_type_t)1 << 13U))
#define SENSOR_POWER_L() (PINS_DRV_ClearPins(GPIOD, (pins_channel_type_t)1 << 13U))/* USER CODE END PD */
/* Private macro -------------------------------------------------------------/
/ USER CODE BEGIN PM /
/ USER CODE END PM *//* Private variables ---------------------------------------------------------/
/ USER CODE BEGIN PV */
sent_raw_msg_t fastMessageBuffer;
sent_raw_msg_t slowMessageBuffer;
sent_fast_msg_t fastMessage[SENT_CH_COUNT];
sent_slow_msg_t slowMessage[SENT_CH_COUNT];uint32_t fastMsgCnt[SENT_CH_COUNT] = { 0, 0 };
uint32_t slowMsgCnt[SENT_CH_COUNT] = { 0, 0 };uint16_t SENT_T1,SENT_T2,SENT_SUM_T;
uint16_t SENT_P1,SENT_P2,SENT_S;flexcan_msgbuff_t rxStdMsg1;
flexcan_msgbuff_t rxExtMsg1;//define can tx message
flexcan_msgbuff_t txMsg1 = {
.cs = 0U,
.msgId = TX_MSG1_ID,
.data = 0x00,
.dataLen = 8U,
};flexcan_msgbuff_t txMsg2 = {
.cs = 0U,
.msgId = TX_MSG2_ID,
.data = 0x00,
.dataLen = 8U,
};flexcan_msgbuff_t txMsg3 = {
.cs = 0U,
.msgId = TX_MSG3_ID,
.data = 0x00,
.dataLen = 8U,
};const flexcan_data_info_t txMbStdInfo1 = {
.msg_id_type = FLEXCAN_MSG_ID_STD,
.data_length = 8,
.fd_enable = false,
.fd_padding = 0,
.enable_brs = false,
.is_remote = false,
};//define can rx message
const flexcan_data_info_t rxMbStdInfo1 = {
.msg_id_type = FLEXCAN_MSG_ID_STD,
.data_length = 8,
.fd_enable = false,
.fd_padding = 0,
.enable_brs = false,
.is_remote = false,
};volatile bool canError = false;
/* USER CODE END PV *//* Private function declare --------------------------------------------------/
/ USER CODE BEGIN PFDC /
/ USER CODE END PFDC */
static void Board_Init(void);/* Private user code ---------------------------------------------------------/
/ USER CODE BEGIN 0 /
/ Callback for SENT handler */
void sentNotification(uint32_t instance, uint32_t channel, sent_callback_type_t type, void *param)
{
(void)param;
(void)instance;
(void)channel;
sent_fast_msg_t fastMsgDMA;
sent_slow_msg_t slowMsgDMA;
switch (type)
{
case SENT_CALLBACK_SLOW_DMA_RX_COMPLETE:
SENT_DRV_GetSlowMsgFromRaw(&slowMsgDMA, &slowMessageBuffer);
slowMessage[slowMsgDMA.channelNumber] = slowMsgDMA;
slowMsgCnt[slowMsgDMA.channelNumber]++;
break;case SENT_CALLBACK_FAST_DMA_RX_COMPLETE: SENT_DRV_GetFastMsgFromRaw(&fastMsgDMA, &fastMessageBuffer); fastMessage[fastMsgDMA.channelNumber] = fastMsgDMA; fastMsgCnt[fastMsgDMA.channelNumber]++; break; case SENT_CALLBACK_SLOW_RX_COMPLETE: break; case SENT_CALLBACK_FAST_RX_COMPLETE: break; case SENT_CALLBACK_RX_ERROR: break; default: break; }}
/* USER CODE END 0 */
/**
-
@brief The application entry point.
-
@retval int
/
int main(void)
{
/ USER CODE BEGIN 1 */
status_t status = STATUS_SUCCESS;
uint8_t can1RxFrameCnt = 0;/* USER CODE END 1 /
Board_Init();
/ USER CODE BEGIN 2 /
OSIF_TimeDelay(1000);
status |= FLEXCAN_DRV_ConfigRxMb(CAN5_INST, RX_STD_MAILBOX, &rxMbStdInfo1, RX_STD_MSG_ID);
/ Start receiving data in RX_STD_MAILBOX. */
status |= FLEXCAN_DRV_Receive(CAN5_INST, RX_STD_MAILBOX, &rxStdMsg1);
CAN_STB_L();/* USER CODE END 2 */
/* Infinite loop /
/ USER CODE BEGIN WHILE */
while (1)
{
OSIF_TimeDelay(10);//SENT_T1
SENT_T1 = (uint16_t)(((fastMessage[0].data&0xf000)>>12)
+((fastMessage[0].data&0xf00)>>4)
+((fastMessage[0].data&0xf0)<<4));
//SENT_T2
SENT_T2 = (uint16_t)(((fastMessage[1].data&0xf000)>>12)
+((fastMessage[1].data&0xf00)>>4)
+((fastMessage[1].data&0xf0)<<4));SENT_SUM_T = SENT_T1+SENT_T2; //SENT_P1SENT_P1 = (uint16_t)((fastMessage[0].data&0xfff0000)>>16);
//SENT_P2
SENT_P2 = (uint16_t)((fastMessage[1].data&0xfff0000)>>16);
//SENT_S
SENT_S = (uint16_t)((fastMessage[2].data&0xfff0000)>>16);//CAN message 1 0x141txMsg1.data[0] = (uint8_t)((fastMessage[0].data&0xff000000)>>24);
txMsg1.data[1] = (uint8_t)((fastMessage[0].data&0xff0000)>>16);
txMsg1.data[2] = (uint8_t)((fastMessage[0].data&0xff00)>>8);
txMsg1.data[3] = (uint8_t)(fastMessage[0].data&0xff);
txMsg1.data[4] = (uint8_t)((fastMessage[1].data&0xff000000)>>24);
txMsg1.data[5] = (uint8_t)((fastMessage[1].data&0xff0000)>>16);
txMsg1.data[6] = (uint8_t)((fastMessage[1].data&0xff00)>>8);
txMsg1.data[7] = (uint8_t)((fastMessage[1].data)&0xff);//CAN message 2 0x142txMsg1.data[0] = (uint8_t)((fastMessage[2].data&0xff000000)>>24);
txMsg1.data[1] = (uint8_t)((fastMessage[2].data&0xff0000)>>16);
txMsg1.data[2] = (uint8_t)((fastMessage[2].data&0xff00)>>8);
txMsg1.data[3] = (uint8_t)(fastMessage[2].data&0xff);
txMsg1.data[4] = (uint8_t)((SENT_T1&0xff00)>>8);
txMsg1.data[5] = (uint8_t)((SENT_T1&0xff00)>>8);
txMsg1.data[6] = (uint8_t)((SENT_T2&0xff00)>>8);
txMsg1.data[7] = (uint8_t)(SENT_T2&0xff);//CAN message 3 0x143txMsg3.data[0] = (uint8_t)((SENT_SUM_T&0xff00)>>8);
txMsg3.data[1] = (uint8_t)(SENT_SUM_T&0xff);
txMsg3.data[2] = (uint8_t)((SENT_P1&0xff00)>>8);
txMsg3.data[3] = (uint8_t)(SENT_P1&0xff);
txMsg3.data[4] = (uint8_t)((SENT_P2&0xff00)>>8);
txMsg3.data[5] = (uint8_t)(SENT_P2&0xff);
txMsg3.data[6] = (uint8_t)((SENT_S&0xff00)>>8);
txMsg3.data[7] = (uint8_t)(SENT_S&0xff);if (FLEXCAN_DRV_GetTransferStatus(CAN5_INST, TX_MAILBOX1) != STATUS_BUSY)
{
status |= FLEXCAN_DRV_Send(CAN5_INST, TX_MAILBOX1, &txMbStdInfo1, TX_MSG1_ID, txMsg1.data);
}if (FLEXCAN_DRV_GetTransferStatus(CAN5_INST, TX_MAILBOX2) != STATUS_BUSY)
{
status |= FLEXCAN_DRV_Send(CAN5_INST, TX_MAILBOX2, &txMbStdInfo1, TX_MSG2_ID, txMsg2.data);
}if (FLEXCAN_DRV_GetTransferStatus(CAN5_INST, TX_MAILBOX3) != STATUS_BUSY)
{
status |= FLEXCAN_DRV_Send(CAN5_INST, TX_MAILBOX3, &txMbStdInfo1, TX_MSG3_ID, txMsg3.data);
}/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */}
/* USER CODE END 3 */
}
static void Board_Init(void)
{
/* USER CODE BEGIN 4 /
CLOCK_SYS_Init(g_clockManConfigsArr,CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr,CLOCK_MANAGER_CALLBACK_CNT);
if(STATUS_SUCCESS != CLOCK_SYS_UpdateConfiguration(CLOCK_MANAGER_ACTIVE_INDEX,CLOCK_MANAGER_POLICY_AGREEMENT))
{
/ USER CODE BEGIN ERROR_HANDLER 1 /
SystemSoftwareReset();
/ USER CODE END ERROR_HANDLER 1 */
}PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0,g_pin_mux_InitConfigArr0); SENSOR_POWER_H(); DMA_DRV_Init(&dmaState,&dmaController_InitConfig,dmaChnState,dmaChnConfigArray,NUM_OF_CONFIGURED_DMA_CHANNEL); SENT_DRV_Init(0,&sentUserConfig,&sentState); FLEXCAN_DRV_Init(CAN5_INST,&flexcanInitConfig0_State,&flexcanInitConfig0);}
-
-

快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...