打印
[其它应用]

中颖用 UART1 示范 DMA 无限传输案例

[复制链接]
1506|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szt1993|  楼主 | 2023-3-23 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设置 RELOAD=1,UART1 从上位机接收数据,再用 UART1 发回给上位机, 上位机设置自动发送,将实现无限传输。 注意 DMA 是以 UART1 的 RDR 为触发源的。

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


使用特权

评论回复
沙发
OKAKAKO| | 2023-11-12 19:17 | 只看该作者
DMA无线传输大大加强数据处理

使用特权

评论回复
板凳
中国龙芯CDX| | 2023-11-12 19:35 | 只看该作者
中颖的UART1 示范 DMA 无限传输大大提升效率

使用特权

评论回复
地板
szt1993|  楼主 | 2023-11-12 20:20 | 只看该作者
DMA 无限传输这个在32上经常遇到

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

143

主题

1456

帖子

4

粉丝