串口收发处理框架(基于sdk-ameba-v4.0c_180328)
勤基科技 凌秋明
一.包括如下处理函数:
(1)static void uart_irq(uint32_t id, SerialIrq event)该函数主要处理串口有数据产生中断时调用,主要实现:获取收到的字符,并存储到 u->recv_buf 接收buffer 中;当u->recv_buf满时,u->prxwrite 会重新从头部开始写入,并置标志位u->rxoverlap 为 1,表示buffer处于满状态。如果u->prxwrite 大于 u->prxread 的时候,证明已经覆盖旧的未读数据,这时需要 u->prxread = u->prxwrite;。更新超时tick , u->last_update(主要为了记录超出定义的接收时间,视为接收完毕)。
(2)static void uart_send_stream_done(uint32_t id)该函数,串口数据发送完毕时调用,主要实现:清除发送buffer;释放发送相关的block信号量(u->tx_sema ,u->dma_tx_sema)。
(3)static int uart_send_stream(uart_socket_t u, char pbuf, int len)该函数发送串口数据流时调用,主要实现:获取发送信号量u->dma_tx_sema (主要保护正在发送的数据,使之完全发送后再释放信号量u->dma_tx_sema );发送串口数据流serial_send_stream_dma();
(4)static s32 uart_wait_rx_complete(uart_socket_t *u) 该函数接收完毕等待超时,主要实现:当前tick_current与自从接收到数据的u->last_update tick数做比较,达到超出自定义时间值后退出。
(5)static void uart_action_handler(void* param)该函数处理串口数据收发逻辑,主要实现:当获取到u->acti