我让 UART 使用中断处理 RX 和 TX。 我需要更改 UART 以与 DMA 配合使用。 我尝试了从其他帖子中找到的示例、但无法使任何内容正常工作。
/* DMA 控制表*/ #if defined (__TI_Compiler_version__) #pragma DATA_ALIGN (MSP_EXP432P401RLP_DMAControlTable,1024) #Elif defined (__IAR_SYSTEMS_ICC__) #pragma DATA_ALIGINS=1024 #Elif defined (__GULC_)#defend_D32_DCC_(__) (_DIC24_DICE_DIC_DICE_DIC_)(_DICE_DIRECTIVAT_UST_DICE_UST_CLINDIC_(_UST_DIC_)#Eli_UST_CLUST_CLINDIC_(_UST_CLIN_DIC_)#CONFIGINDIC_(_UST_ map_dma_enableModule(); MAP_DMA_setControlBase (MSP_EXP432P401RLP_DMAControlTable); MAP_DMA_assignChannel (DMA_CH4_EUSCIA2TX);//将 DMA 通道4分配给 EUSCI_A2_TX MAP_DMA_disableChannelAttribute (DMA_CH4_EUSCIA2TX、UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); MAP_DMA_setChannelControl (DMA_CH4_EUSCIA2TX | UDMA_PRI_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1); EUSCI_A0_BASE MAP_DMA_赋 值中断(DMA_INT1、4); MAP_DMA_clearInterruptFlag (4); } __attribute__((中断) void DMA_INT1_IRQHandler (void){ uint32_t ui32模式; ui32Mode=map_dma_getChannelMode (dma_ch4_EUSCIA2TX | Udma_PRI_select); if (ui32Mode=udma_mode_stop) { DICE_TX_BUSY=0; EUSCI_A2->IFG &=~EUSCI_A_IFG_TXIFG; } MAP_DMA_clearInterruptFlag (4); MAP_DMA_disableInterrupt (DMA_INT1); } __attribute__((中断) void DMA_ERR_IRQHandler (void) { uint32_t ui32Status; //检查 uDMA 错误位 ui32Status = map_dma_getErrorStatus(); //如果存在 uDMA 错误,则清除错误并递增错误计数器 if (ui32状态) { MAP_DMA_clearErrorStatus(); } } 空 EUSCIA2_IRQHandler (空) { volatile uint8_t temp; IF (EUSCI_A2->IFG 和 EUSCI_A_IFG_RXIFG) { DIice_Rx[DIice_Rx_WRI]= EUSCI_A2->RXBUF; if (++DIES_Rx_WRI >= DIES_Rx_SIZE) { DICE_Rx_WRI=0; } dlice_rx_cnt++; } // IF (EUSCI_A2->IFG 和 EUSCI_A_IFG_TXIFG) //{ // //检查 DICE 发送队列 // if (!(dice_TX_mT ()))) // { // EUSCI_A2->TXBUF=dice_TX_DEQ (); //} // 其他 // { // //没有要发送的内容,禁用发送中断 // DICE_TX_BUSY=0; // EUSCI_A2->IFG &=~EUSCI_A_IFG_TXIFG; //} //} // 此处是我尝试将数据传递给 DMA uint32_t * DICE_TX; DICE_TX =(uint32_t *)&EUSCI_A2->TXBUF; //从优先级缓冲器到 DICE TX 缓冲 器空优先级_pop (PacketType 数据包){ int i; switch (Packet){ 案例 HS_DATA: MAP_DMA_setChannelTransfer (DMA_CH4_EUSCIA2TX | UDMA_PRI_SELECT、UDMA_MODE_BASIC、PRIORY_BUF.HS_DATA_BUF.buffer[PRIORY_BUF.HS_DATA_BUF.tail].ALL_8、 (void*) DICE_TX、HS_DATA_SIZE); //for (i=0;i IFG |= EUSCI_A_IFG_TXIFG; 中断; //目前仅使用此案例进行测试 } }