[其它应用] 中颖用 UART1 示范 DMA 无限传输案例

[复制链接]
2492|4
 楼主| szt1993 发表于 2023-3-23 11:45 | 显示全部楼层 |阅读模式
设置 RELOAD=1,UART1 从上位机接收数据,再用 UART1 发回给上位机, 上位机设置自动发送,将实现无限传输。 注意 DMA 是以 UART1 的 RDR 为触发源的。

  1. #include <SH32F9B00.H>
  2. void main(void)
  3. {
  4. RCC_Config(); // 配置使用 PLL 作为系统时钟,HCLK=120MHz,PCLK1=HCLK/4
  5. NVIC_Config(); // 如果需要配置中断,此例未用到中断
  6. GPIO_Config(); // 如果需要配置 I/O,此例保持默认输入悬空
  7. UART1_Config(); // UART1 配置为 9.6KBps, PCLK1=30MHz
  8. RCC->RCCLOCK = 0x33CC; // unlock RCC config
  9. APB0_CFG->RCCLOCK = 0x33CC; // unlock APB0_CFG config
  10. RCC->AHBENR.BIT.DMAEN = 1; // DMA clock enable
  11. RCC->AHBENR.BIT.GPIOEN = 1; // GPIO clock enable
  12. APB0_CFG ->APB0ENR.BIT.UART1EN = 1; // UART1 clock enable
  13. APB0_CFG ->RCCLOCK = 0x0; // lock APB0_CFG config
  14. RCC->RCCLOCK = 0x0; // lock RCC config
  15. UART1->CR.BIT.DMAR = 1; // 以 UART RDR 为触发源
  16. DMA->SAR3 = Addr1_Uart1_RDR; // UART1 RDR,触发源
  17. DMA->DAR3 = Addr1_Uart1_TDR; // UART1 TDR
  18. DMA->NPKT3 = 255;
  19. DMA->CCR3.BIT.TRGMODE = 0; // one-shot
  20. DMA->CCR3.BIT.SPTYP = 2; // point modify, 00~inc, 01~dec, 10~fix, 11~round
  21. DMA->CCR3.BIT.DPTYP = 2; // point modify, 00~inc, 01~dec, 10~fix, 11~round
  22. DMA->CSR.BIT.RELOAD = 1<<3; // auto-reload
  23. DMA->CCR3.BIT.EN = 1; // channel1 enable
  24. while(1) // main loop
  25. {
  26. }
  27. }


OKAKAKO 发表于 2023-11-12 19:17 | 显示全部楼层
DMA无线传输大大加强数据处理
中国龙芯CDX 发表于 2023-11-12 19:35 | 显示全部楼层
中颖的UART1 示范 DMA 无限传输大大提升效率
 楼主| szt1993 发表于 2023-11-12 20:20 | 显示全部楼层
DMA 无限传输这个在32上经常遇到
绒兔星球 发表于 2025-8-30 15:06 | 显示全部楼层
中颖 UART1 DMA 无限传输案例:配置 DMA 通道关联 UART1 发送,设内存到外设方向,地址自增,数据长度按需设。使能 DMA 循环模式和发送中断,UART1 初始化波特率等参数。启动后,DMA 循环将指定内存区数据经 UART1 发送,完成中断中无需停止,实现无限传输,注意内存数据持续更新。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

3021

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部