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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. 有无任意开发板的Flexcan_Legacyfifo的FLEXCAN_RX_FIFO_ID_FORMAT_B模式和FLEXCAN_RX_FIFO_ID_FORMAT_C模式例程或代码片段

有无任意开发板的Flexcan_Legacyfifo的FLEXCAN_RX_FIFO_ID_FORMAT_B模式和FLEXCAN_RX_FIFO_ID_FORMAT_C模式例程或代码片段

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

    最近使用FLEXCAN_RX_FIFO_ID_FORMAT_B模式发现实际现象与预期效果不一致,能否分享一下demo?如果有的话。谢谢

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

      是不是无法使用FLEXCAN_RX_FIFO_ID_FORMAT_B模式?

      1 条回复 最后回复
      0
      • yt0069Y 离线
        yt0069Y 离线
        yt0069 YunTu
        写于 最后由 编辑
        #3

        可以使用format_b模式,能具体描述以下实际现象与预期效果不一致的现象吗

        yishui66Y 1 条回复 最后回复
        0
        • yishui66Y 离线
          yishui66Y 离线
          yishui66
          在 回复了 yt0069 最后由 yishui66 编辑
          #4

          yt0069 感谢支持。以LE05开发板的Flexcan_Legacyfifo_Demo并使用标准帧为例。预期效果:标准帧ID低四位不进行匹配

          ①.现象:使用模式A时,独立掩码设置为0x1FFFFFF0U时,标准帧ID低四位不进行匹配。即可接受ID范围为0x730~0x73F的标准帧。--问题:独立掩码不应该设置成0xFF87FFFEU才能实现标准帧ID低四位不进行匹配吗?( RXIDA(standard = 29-19,extended = 29-1))

          ②.由①实际现象可得,独立掩码设置为0x1FFFFFF0U时 (RXIDB_0(standard = 29-19,extended = 29-16)),模式B也应该可以接受ID范围为0x730~0x73F的标准帧,但是实际上我只能接受0x737这一个标准帧ID。且我尝试修改了独立掩码的其他位,没有找到规律

          以下为我的main.c代码

          /* 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 CAN_INST (0U)
          
          #define TX_MSG_ID      (0x03UL)
          #define TX_MAILBOX     (0x08UL)
          #define RX_LEGACY_FIFO (0UL) /* can not modify */
          
          #define CAN0_RX_FIFO_FILTER_COUNT (8 * (FLEXCAN_RX_FIFO_ID_FILTERS_8 + 1))
          /* USER CODE END PD */
          
          /* Private macro -------------------------------------------------------------*/
          /* USER CODE BEGIN PM */
          /* USER CODE END PM */
          
          /* Private variables ---------------------------------------------------------*/
          /* USER CODE BEGIN PV */
          //const flexcan_data_info_t rxMbStdInfo = {
          //    .msg_id_type = FLEXCAN_MSG_ID_EXT,
          //    .data_length = 8,
          //    .fd_enable = false,
          //    .fd_padding = 0,
          //    .enable_brs = false,
          //    .is_remote = false,
          //};
          const flexcan_data_info_t txMbStdInfo = {
              .msg_id_type = FLEXCAN_MSG_ID_STD,
              .data_length = 8,
              .fd_enable = false,
              .fd_padding = 0,
              .enable_brs = false,
              .is_remote = false,
          };
          
          const uint32_t rxFifoAccId[CAN0_RX_FIFO_FILTER_COUNT] = {
              0x0C1001F0U, 0x0C1002F0U, 0x0C0803A5U, 0x0C1004F0U, 0x0C1005E0U, 0x0C1006F3U, 0x0C1007F0U, 0x737U,
          };
          /* Define receive buffer */
          flexcan_msgbuff_t rxMsg;
          /* Prepare message to be sent */
          flexcan_msgbuff_t txMsg = {
              .cs = 0U,
              .msgId = TX_MSG_ID,
              .data[0] = 0x00,
              .dataLen = 8U,
          };
          flexcan_id_table_t rxFifoFilterAccInfo[CAN0_RX_FIFO_FILTER_COUNT];
          /* 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 */
          /* USER CODE END 0 */
          
          
          /**
           * @brief  The application entry point.
           * @retval int
           */
          int main(void)
          {
              /* USER CODE BEGIN 1 */
              status_t status = STATUS_SUCCESS;
              int32_t offset = 0;
              uint8_t fifoFrameCnt = 0;
              /* USER CODE END 1 */ 
              Board_Init();
              /* USER CODE BEGIN 2 */
              PRINTF("Build %s %s\r\n", __DATE__, __TIME__);
              PRINTF("<----Flexcan legacy fifo demo---->\r\n");
              /* Init rx fifo filter table acceptence code */
              for (uint8_t i = 0; i < 7; i++)
              {
                  rxFifoFilterAccInfo[i].isRemoteFrame = false;
                  rxFifoFilterAccInfo[i].isExtendedFrame = true;
                  rxFifoFilterAccInfo[i].id = rxFifoAccId[i];
              }
          		
                  rxFifoFilterAccInfo[7].isRemoteFrame = false;
                  rxFifoFilterAccInfo[7].isExtendedFrame = false;
                  rxFifoFilterAccInfo[7].id = rxFifoAccId[7];
              /* Can init */
              status |= FLEXCAN_DRV_Init(CAN_INST, &flexcanInitConfig0_State, &flexcanInitConfig0);
          		
          //		FLEXCAN_DRV_ConfigRxFifo(CAN_INST, FLEXCAN_RX_FIFO_ID_FORMAT_A, rxFifoFilterAccInfo);
          //		FLEXCAN_DRV_SetRxMaskType(CAN_INST, FLEXCAN_RX_MASK_INDIVIDUAL);
          //		for(uint8_t i=0;i<7;i++)
          //	 {
          //		 FLEXCAN_DRV_SetRxIndividualMask(CAN_INST,FLEXCAN_MSG_ID_EXT,i, 0x1FFFFFFFU);
          //   }
          //		FLEXCAN_DRV_SetRxIndividualMask(CAN_INST, FLEXCAN_MSG_ID_STD, 7, 0x1FFFFFF0U); //0xFF87FFFEU
          		
              FLEXCAN_DRV_ConfigRxFifo(CAN_INST, FLEXCAN_RX_FIFO_ID_FORMAT_B, rxFifoFilterAccInfo);
              FLEXCAN_DRV_SetRxMaskType(CAN_INST, FLEXCAN_RX_MASK_INDIVIDUAL);
              for(uint8_t i=0;i<7;i++)
              {
                 FLEXCAN_DRV_SetRxIndividualMask(CAN_INST,FLEXCAN_MSG_ID_EXT,i, 0x1FFFFFFFU);
              }
              FLEXCAN_DRV_SetRxIndividualMask(CAN_INST, FLEXCAN_MSG_ID_STD, 7, 0x1FFFFFF0U);
          		
              /* Configure TX buffer with index TX_MAILBOX*/
              status |= FLEXCAN_DRV_ConfigTxMb(CAN_INST, TX_MAILBOX, &txMbStdInfo, TX_MSG_ID);
              /* Start receiving data in RX_STD_MAILBOX. */
              status |= FLEXCAN_DRV_RxFifo(CAN_INST, &rxMsg);
          		
          		
              while (1)
              {
          //        if (FLEXCAN_DRV_GetTransferStatus(CAN_INST, TX_MAILBOX) != STATUS_BUSY)
          //        {
          //            /* Configure sending data bytes */
          //            for (int i = 0; i < 8; i++)
          //            {
          //                txMsg.data[i] = offset + i;
          //            }
          //            offset++;
          //            /* Send the information via CAN */
          //            status |= FLEXCAN_DRV_Send(CAN_INST, TX_MAILBOX, &txMbStdInfo, TX_MSG_ID, txMsg.data);
          //        }
                  if (FLEXCAN_DRV_GetTransferStatus(CAN_INST, RX_LEGACY_FIFO) != STATUS_BUSY)
                  {
                      fifoFrameCnt++;
                      /* For concise output on UART, only print data[0] */
                      PRINTF("\nRx length= %d, id = %x, data[0] = %x:\r\n", rxMsg.dataLen, rxMsg.msgId, rxMsg.data[0]);
                      /* start to receive new data */
                      status |= FLEXCAN_DRV_RxFifo(CAN_INST, &rxMsg);
                  }
          //        if (fifoFrameCnt >= 10)
          //        {
          //            break;
          //        }
                  /* send data every 100ms */
                  OSIF_TimeDelay(100);
              }
              PRINTF("\n\n");
              PRINTF("Total %d frames legacy fifo has received.\n", fifoFrameCnt);
              PRINTF("<----Demo end---->\n");
              /* USER CODE END 2 */
          
              /* Infinite loop */
              /* USER CODE BEGIN WHILE */
              while (1)
              {
                  if (status != STATUS_SUCCESS)
                  {
                      break;
                  }
                  /* USER CODE END WHILE */
                  /* USER CODE BEGIN 3 */
              }
              /* USER CODE END 3 */
          }
          
          static void Board_Init(void)
          {
              CLOCK_SYS_Init(g_clockManConfigsArr,CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr,CLOCK_MANAGER_CALLBACK_CNT);
              CLOCK_SYS_UpdateConfiguration(CLOCK_MANAGER_ACTIVE_INDEX,CLOCK_MANAGER_POLICY_AGREEMENT);
              PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0,g_pin_mux_InitConfigArr0);
              UTILITY_PRINT_Init();
          }
          
          1 条回复 最后回复
          0
          • HAIYANGH 离线
            HAIYANGH 离线
            HAIYANG YunTu
            写于 最后由 HAIYANG 编辑
            #5

            模式A:一个掩码对应一个接收码,也就是你程序里的这种对应模式;
            模式B:一个掩码对应两个接收码,FLEXCAN_DRV_SetRxIndividualMask(CAN_INST,FLEXCAN_MSG_ID_EXT,0, 0x1FFFFFFFU)对应接受滤波器里的前两个ID;
            模式C:一个掩码对应四个接收码,FLEXCAN_DRV_SetRxIndividualMask(CAN_INST,FLEXCAN_MSG_ID_EXT,0, 0x1FFFFFFFU)对应接受滤波器里的前四个ID;
            image.png

            1 条回复 最后回复
            0
            • yishui66Y 离线
              yishui66Y 离线
              yishui66
              写于 最后由 编辑
              #6

              @ytm0267 谢谢,很有帮助。

              1 条回复 最后回复
              0
              • HAIYANGH HAIYANG 在 中 引用了 这个主题

            • 云途开发生态介绍

              快速上手云途开发生态

            • 云途论坛规则/Yuntu Forum Rules

              发帖前请查看

            • YT CONFIG TOOL调查问卷

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

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

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