NXP MCU 技术论坛
直播中

陈勇

8年用户 1344经验值
私信 关注
[问答]

USART CMSIS驱动程序未完全实现?

这与 LPC5526 的 SDK 有关。我不知道其他 MCU 的 CMSIS 实现。我认为至少对于同一个 MCU 系列来说它非常相似。
TL;DR:SDK 不实现所有强制性“信号 USART 事件”,而仅实现 ARM_USART_EVENT_SEND_COMPLETE 和 ARM_USART_EVENT_RECEIVE_COMPLETE。例如,搜索 ARM_USART_EVENT_RX_OVERFLOW 的 SDK 代码库。它已定义但未使用。
很长的故事:
外围工具使用CMSIS USART API初始化串行接口:

static void FLEXCOMM0_init(void) {
  /* Interrupt vector FLEXCOMM0_IRQn priority settings in the NVIC. */
  NVIC_SetPriority(FLEXCOMM0_IRQN, FLEXCOMM0_IRQ_PRIORITY);
  /* Initialize CMSIS USART */
  FLEXCOMM0_PERIPHERAL.Initialize(USART0_SignalEvent);
Initialize()的签名 是
int32_t ARM_USART_Initialize (ARM_USART_SignalEvent_t cb_event )
回调cb_event从fsl_usart_cmsis.c中的 SDK 调用:

static void KSDK_USART_NonBlockingCallback(USART_Type *base, usart_handle_t *handle, status_t status, void *userData)
{
    uint32_t event = 0U;

    if (kStatus_USART_TxIdle == status)
    {
        event = ARM_USART_EVENT_SEND_COMPLETE;
    }
    if (kStatus_USART_RxIdle == status)
    {
        event = ARM_USART_EVENT_RECEIVE_COMPLETE;
    }

    /* User data is actually CMSIS driver callback. */
    if (userData != NULL)
    {
        ((ARM_USART_SignalEvent_t)userData)(event);
    }
}
如您所见,此功能仅支持我上面列出的两个事件。
结论:此实现不支持 ARM 的 CMSIS 驱动程序文档中声明为“始终支持”的所有事件。因此实施是不完整的。
或者我错过了什么?


更多回帖

发帖
×
20
完善资料,
赚取积分