设置 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
{
}
}
|