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

YunTu Forum

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

YTM32B1HA0 DMA采集3路SENT信号

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

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

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

      找到问题了,不是软件的原因。

      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
          • YaojianyongY 离线
            YaojianyongY 离线
            YaoJianyong
            写于 最后由 编辑
            #4

            找到问题了,不是软件的原因。

            1 条回复 最后回复
            0
            • ,FrankieF Frankie 将这个主题转为问答主题
            • ,FrankieF Frankie 将这个主题标记为已解决

          • 云途开发生态介绍

            快速上手云途开发生态

          • 云途论坛规则/Yuntu Forum Rules

            发帖前请查看

          • YT CONFIG TOOL调查问卷

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

          • can
            25
            demo
            22
            lin stack
            13
            uds
            13
            md14
            6
            yt-link
            6
            fbl
            5
            adc模块
            4
            Online Users
            jack 0J
            jack 0
            • 登录

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