跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. YTM32B1HA0 DMA采集3路SENT信号

YTM32B1HA0 DMA采集3路SENT信号

已定时 已固定 已锁定 已移动 YTM32B1H系列
3 帖子 1 发布者 17 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • YaojianyongY 离线
    YaojianyongY 离线
    YaoJianyong
    编写于 最后由 编辑
    #1

    YTM32B1HA0 DMA采集3路SENT信号,只有SENT_RX_IN1有数据,示波器测试信号输入正常。

    1 条回复 最后回复
    0
    • YaojianyongY 离线
      YaojianyongY 离线
      YaoJianyong
      编写于 最后由 编辑
      #2

      5b6b7ca1-ccee-420a-894c-0d5409462d57-image.png a8089233-4bba-4aa1-a871-9c8c06166e4b-image.png 2f7574cb-99bd-41fb-806c-928ac3e75736-image.png /* 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_P1
        

        SENT_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 0x141
        

        txMsg1.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 0x142
        

        txMsg1.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 0x143
        

        txMsg3.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); 
      

      }

      1 条回复 最后回复
      0
      • YaojianyongY 离线
        YaojianyongY 离线
        YaoJianyong
        编写于 最后由 编辑
        #3

        ce65af0b-d107-4d3c-930c-696878a0c07e-image.png

        1 条回复 最后回复
        0

      • 云途开发生态介绍

        快速上手云途开发生态

      • 云途论坛规则/Yuntu Forum Rules

        发帖前请查看

      • YT CONFIG TOOL调查问卷

        帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

      • can
        24
        demo
        20
        uds
        13
        lin stack
        12
        md14
        6
        fbl
        5
        yt-link
        5
        adc模块
        4
        Online Users
        • 登录

        • 登录或注册以进行搜索。
        • 第一个帖子
          最后一个帖子
        0
        • 版块
        • 最新
        • 标签
        • 热门