如何使用DMA驱动
DMA HAL驱动的使用方法如下:
- 使能和配置要连接到DMA通道的外设(SRAM内存:不需要初始化)。
- 对于给定的通道,使用hal_dma_init()函数对这些参数进行配置:DMA源和目的外设、传输方向、源和目的数据格式、循环或普通模式、通道优先级、源和目的地址增量模式。
- 使用hal_dma_get_state()函数获取DMA状态,并在错误检测时使用hal_dma_get_error()获取DMA错误码。
- 使用hal_dma_abort()函数中止当前传输。
DMA驱动支持轮询、中断两种传输模式,这两种模式的区别在于传输完成的判断方式(轮询模式需要循环检测DMA传输状态,而中断模式则通过传输完成中断来实现)。两种传输模式具体的使用方法如下:
轮询模式IO操作
- 配置完源地址和目的地址以及传输数据长度之后,调用hal_dma_start()开始DMA传输。
- 调用hal_dma_poll_for_transfer()轮询DMA传输状态,直到传输完毕或超时为止。在这种情况下,开发者可根据应用程序配置超时时间。
中断模式IO操作
- 调用hal_nvic_set_priority()配置DMA中断优先级。
- 调用hal_nvic_enable_irq()使能DMA中断处理。
- 调用hal_dma_start_it()配置源地址和目的地址以及传输数据长度和开启DMA中断传输。
- 在数据传输结束时执行hal_dma_irq_handler()函数,并调用开发者通过hal_dma_register_callback()注册的回调函数。