mcan驱动确实没有提供初始化时间戳计数器的步骤。这意味着需要在自己的应用程序中实现时间戳的计数器初始化和读取,以确保正确读取CAN协议寄存器中的时间戳值。
以下是一些步骤,可用于在LPC55S06JHI48 MCU中使用MCUXpresso IDE和SDK_2.x_LPC55S06 v3.10实现CAN时间戳初始化和读取:
1. 首先需要配置时间戳计数器配置寄存器(TSCC),该寄存器用于配置CAN帧时间戳计数器的参数。此寄存器位于MCAN模块的容器寄存器中,可以使用LPC55S06JHI48 MCU提供的寄存器映射来直接访问。配置TSCC寄存器可以使用以下代码:
MCAN->RAMn[TxBufIndex].TSCC = MCAN_RAMn_TSCC_TCP_MASK |
MCAN_RAMn_TSCC_TSS_MASK |
MCAN_RAMn_TSCC_TFE_MASK |
((CAN_TIME_STAMP_COUNTER_PRESCALER - 1) << MCAN_RAMn_TSCC_TCP_SHIFT);
这里,我们将TSCC寄存器配置为使用TCP分频器、时间戳溢出中断选项和时间戳使能选项。还需要在PRESCALER字段中设置CAN时间戳计数器的预分频器值。
2. 现在,可以在每次读取CAN帧时读取时间戳。为此,需要在MCAN帧缓冲区对象中配置帧缓冲区,以启用时间戳记录选项。我们可以在MCAN->RAMn[TxBufIndex].TSCC寄存器的TSS字段中启用时间戳记录选项,如下所示:
MCAN->RAMn[TxBufIndex].TSCC |= MCAN_RAMn_TSCC_TSS_MASK;
3. 最后,在每个接收中断处理程序中,可以使用以下代码来读取CAN协议寄存器中的时间戳值:
uint32_t timeStamp = ((CAN->RXGFC & CAN_RXGFC_FLSSA_MASK) << 19) |
((MCAN->RAMn[RxBufIndex].RXF0S & MCAN_RAMn_RXF0S_F0FL_MASK) * sizeof(MCAN_RX_FIFO0_t));
这里,我们使用CAN_RXGFC_FLSSA字段和MCAN_RAMn_RXF0S_F0FL字段来计算接收帧的时间戳值。
mcan驱动确实没有提供初始化时间戳计数器的步骤。这意味着需要在自己的应用程序中实现时间戳的计数器初始化和读取,以确保正确读取CAN协议寄存器中的时间戳值。
以下是一些步骤,可用于在LPC55S06JHI48 MCU中使用MCUXpresso IDE和SDK_2.x_LPC55S06 v3.10实现CAN时间戳初始化和读取:
1. 首先需要配置时间戳计数器配置寄存器(TSCC),该寄存器用于配置CAN帧时间戳计数器的参数。此寄存器位于MCAN模块的容器寄存器中,可以使用LPC55S06JHI48 MCU提供的寄存器映射来直接访问。配置TSCC寄存器可以使用以下代码:
MCAN->RAMn[TxBufIndex].TSCC = MCAN_RAMn_TSCC_TCP_MASK |
MCAN_RAMn_TSCC_TSS_MASK |
MCAN_RAMn_TSCC_TFE_MASK |
((CAN_TIME_STAMP_COUNTER_PRESCALER - 1) << MCAN_RAMn_TSCC_TCP_SHIFT);
这里,我们将TSCC寄存器配置为使用TCP分频器、时间戳溢出中断选项和时间戳使能选项。还需要在PRESCALER字段中设置CAN时间戳计数器的预分频器值。
2. 现在,可以在每次读取CAN帧时读取时间戳。为此,需要在MCAN帧缓冲区对象中配置帧缓冲区,以启用时间戳记录选项。我们可以在MCAN->RAMn[TxBufIndex].TSCC寄存器的TSS字段中启用时间戳记录选项,如下所示:
MCAN->RAMn[TxBufIndex].TSCC |= MCAN_RAMn_TSCC_TSS_MASK;
3. 最后,在每个接收中断处理程序中,可以使用以下代码来读取CAN协议寄存器中的时间戳值:
uint32_t timeStamp = ((CAN->RXGFC & CAN_RXGFC_FLSSA_MASK) << 19) |
((MCAN->RAMn[RxBufIndex].RXF0S & MCAN_RAMn_RXF0S_F0FL_MASK) * sizeof(MCAN_RX_FIFO0_t));
这里,我们使用CAN_RXGFC_FLSSA字段和MCAN_RAMn_RXF0S_F0FL字段来计算接收帧的时间戳值。
举报