bouffalolab / bl_iot_sdk

BL602/BL702 SDK. Any technical topic, please access the following link.
http://bbs.bouffalolab.com
Apache License 2.0
260 stars 170 forks source link

how to use uart in both dma and int mode? #73

Open Dandjinh opened 1 year ago

Dandjinh commented 1 year ago

I wanna use DMA RX and RTO/RX END interrupt to get variable length data.

Code is like below

hosal_uart_init()
hosal_uart_callback_set(HOSAL_UART_RX_CALLBACK, _rx_callback)
hosal_uart_ioctl(HOSAL_UART_MODE_SET, HOSAL_UART_MODE_INT)

hosal_uart_ioctl(HOSAL_UART_DMA_RX_START)
... waiting rx int ...
rx_size = DMA_Channel_TranferSize(uart->dma_rx_chan)
hosal_dma_chan_stop(uart->dma_rx_chan)

// rx_size is always the same of config size in dma_config

The log shows rx int was triggered by UART_INT_RX_FIFO_REQ and the buffer dma was being used had nothing with incoming data.

Demo code project here, bl_uart_test.zip