这与 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初始化串行接口:
sta
tic 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 驱动程序文档中声明为“始终支持”的所有事件。因此实施是不完整的。
或者我错过了什么?