void init_DMA() { /*ADC_DMA*/ dma_init_struct.DMA_CHx = DMA_CH15; //使用Ch15通道 dma_init_struct.DMA_Req = ADC0_DMAREQ; //DMA请求源为ADC0 dma_init_struct.DMA_PeriodicTriggerEnable = TRUE; //周期触发 dma_init_struct.DMA_MajorLoopCnt = LENGTH; //主循环计数滤波数组长度次 dma_init_struct.DMA_MinorByteCnt = 2; //次循环传输字节计数(由于ADC采样为12位,因此传输2字节) dma_init_struct.DMA_SourceAddr = (uint32)&(ADC0->R[0]); //源地址:ADC0结果寄存器A地址 dma_init_struct.DMA_SourceDataSize = DMA_SRC_16BIT; //源地址传输数据宽度16位 dma_init_struct.DMA_DestAddr = (uint32)&Result_A; //目的地址 dma_init_struct.DMA_DestDataSize = DMA_DST_16BIT; //目的地址传输数据宽度16位 dma_init_struct.DMA_AutoDisableReq = FALSE; //禁用自动禁用请求,即不受主循环计数计数限制 dma_init_struct.DMA_MajorCompleteIntEnable = TRUE; dma_init_struct.DMA_Isr = dmaisr; dma_init_struct.DMA_DestAddrOffset = 2; //目的地址偏移:每次读入增加2 //dma_init_struct.DMA_LastDestAddrAdj = -(2*LENGTH); //初始化DMA LPLD_DMA_Init(dma_init_struct); //使能DMA请求 LPLD_DMA_EnableReq(DMA_CH15); LPLD_DMA_EnableIrq(dma_init_struct); // /*DAC_DMA*/ // dma2_init_struct.DMA_CHx = DMA_CH16; //使用Ch15通道 // dma2_init_struct.DMA_Req = ADC1_DMAREQ; //DMA请求源为DAC0 // dma2_init_struct.DMA_PeriodicTriggerEnable = TRUE; //周期触发 // dma2_init_struct.DMA_MajorLoopCnt = LENGTH; //主循环计数滤波数组长度次 // dma2_init_struct.DMA_MinorByteCnt = 2; //次循环传输字节计数(由于ADC采样为12位,因此传输2字节) // dma2_init_struct.DMA_SourceAddr = (uint32)&Result_B; //源地址: // dma2_init_struct.DMA_SourceDataSize = DMA_SRC_16BIT; //源地址传输数据宽度16位 // dma2_init_struct.DMA_SourceAddrOffset = 2; // dma2_init_struct.DMA_LastSourceAddrAdj = -(2*LENGTH); // dma2_init_struct.DMA_DestAddr = (uint32)&(DAC0->DAT[0].DATL); //目的地址 // dma2_init_struct.DMA_DestDataSize = DMA_DST_16BIT; //目的地址传输数据宽度16位 // //dma2_init_struct.DMA_DestAddrOffset = 2; // dma2_init_struct.DMA_MajorCompleteIntEnable = TRUE; // dma2_init_struct.DMA_Isr = dma2isr; // dma2_init_struct.DMA_AutoDisableReq = FALSE; //禁用自动禁用请求,即不受主循环计数计数限制 // // dma2_init_struct.DMA_LastDestAddrAdj = -(2*LENGTH); // LPLD_DMA_Init(dma2_init_struct); // //使能DMA请求 // LPLD_DMA_EnableReq(DMA_CH16); // LPLD_DMA_EnableIrq(dma2_init_struct); }
/* * 初始化UART5模块 * */ void uart_init(void) { uart5_init_struct.UART_Uartx = UART5; //使用UART5 uart5_init_struct.UART_BaudRate = 9600; //设置波特率9600 uart5_init_struct.UART_RxPin = PTE9; //接收引脚为PTE9 uart5_init_struct.UART_TxPin = PTE8; //发送引脚为PTE8 #if USE_FIFO_Tx_Rx == USE uart5_init_struct.RxFIFO.FIFO_Enable = TRUE; uart5_init_struct.TxFIFO.FIFO_Enable = TRUE; uart5_init_struct.RxFIFO.FIFO_WaterMark = 1; uart5_init_struct.RxFIFO.FIFO_BufFlow_IntEnable = TRUE; uart5_init_struct.TxFIFO.FIFO_WaterMark = 1; uart5_init_struct.TxFIFO.FIFO_BufFlow_IntEnable = TRUE; #endif #if USE_DMA_Tx_Rx == USE uart5_init_struct.UART_RxDMAEnable = TRUE; //使能接收DMA uart5_init_struct.UART_TxDMAEnable = TRUE; //使能发送DMA //配置接收DMA uart_rev_dma_init_struct.DMA_CHx = DMA_CH0; //选择DMA CH0作为通道 uart_rev_dma_init_struct.DMA_MajorLoopCnt = sizeof(recv_ram_buf); //设置计数器长度为数组长度 uart_rev_dma_init_struct.DMA_MinorByteCnt = 1; //设置每次的长度为byte uart_rev_dma_init_struct.DMA_MajorCompleteIntEnable = TRUE; //设置DMA 计数器清零中断 uart_rev_dma_init_struct.DMA_Req = UART5_REV_DMAREQ; //设置DMA 请求为 UART rev uart_rev_dma_init_struct.DMA_DestAddr = (uint32)recv_ram_buf; //设置目的地址为 recv_ram_buf uart_rev_dma_init_struct.DMA_DestAddrOffset = 1; //每一次DMA请求,地址加1 uart_rev_dma_init_struct.DMA_DestDataSize = DMA_DST_8BIT; //设置目的长度为byte uart_rev_dma_init_struct.DMA_SourceAddr = (uint32)&UART5->D;//设置UART D为源地址 uart_rev_dma_init_struct.DMA_SourceDataSize = DMA_SRC_8BIT; //设置源长度为byte uart_rev_dma_init_struct.DMA_AutoDisableReq = FALSE; //循环接收 uart_rev_dma_init_struct.DMA_Isr = dma_isr; //配置发送DMA uart_trn_dma_init_struct.DMA_CHx = DMA_CH1; //选择DMA CH0作为通道 uart_trn_dma_init_struct.DMA_MajorLoopCnt = sizeof(recv_ram_buf); //设置计数器长度为数组长度 uart_trn_dma_init_struct.DMA_MinorByteCnt = 1; //设置每次的长度为byte uart_trn_dma_init_struct.DMA_MajorCompleteIntEnable = FALSE; //清空DMA 计数器清零中断 uart_trn_dma_init_struct.DMA_Req = UART5_TRAN_DMAREQ;//设置DMA 请求为 UART trn uart_trn_dma_init_struct.DMA_SourceAddr = (uint32)recv_ram_buf; //设置目的地址为 recv_ram_buf uart_trn_dma_init_struct.DMA_SourceAddrOffset = 1; //每一次DMA请求,地址加1 uart_trn_dma_init_struct.DMA_SourceDataSize = DMA_SRC_8BIT; //设置源长度为byte uart_trn_dma_init_struct.DMA_DestAddr = (uint32)&UART5->D;//设置UART D为源地址 uart_trn_dma_init_struct.DMA_DestDataSize = DMA_DST_8BIT; //设置目的长度为byte uart_trn_dma_init_struct.DMA_AutoDisableReq = TRUE; //禁止循环发送 LPLD_DMA_Init(uart_rev_dma_init_struct); //初始化DMA 接收 LPLD_DMA_Init(uart_trn_dma_init_struct); //初始化DMA 发送 LPLD_DMA_EnableReq(DMA_CH0); //使能DMA请求 LPLD_DMA_EnableIrq(uart_rev_dma_init_struct); //使能DMA CH0中断 #endif uart5_init_struct.UART_RxIntEnable = TRUE; //使能接收中断 uart5_init_struct.UART_TxIntEnable = TRUE; //使能发送中断 uart5_init_struct.UART_RxIsr = uart_isr; //设置接收中断函数 LPLD_UART_Init(uart5_init_struct); //初始化UART #if USE_DMA_Tx_Rx != USE //使能UART中断 LPLD_UART_EnableIrq(uart5_init_struct); #endif }