工具/软件:Code Composer Studio
我正在尝试通过 DMA - UART 发送和接收数据、并开始修改 UDMA_DEMO、我遇到了这样的问题、即 UART 中断服务例程始终会触发该问题。
我的疑问如下:
ui32Status = ROM_UARTIntStatus (UART0_BASE、1);返回0x00020000;并且我尝试清除故障(这会不断触发、我没有看到它被清除)。
这是任何建议的 DMA 传输完成位。
无效 
InitUART0传输(uint32_t ui32SysClock) 
{ 
//启用 UART 外设,并将其配置为即使 CPU 也能正常工作 
//处于睡眠状态。 
// 
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0); 
ROM_SysCtlPeripheralSlepEnable (SYSCTL_Periph_UART0); 
// 
//配置 UART 通信参数。 
// 
ROM_UARTConfigSetExpClk (UART0_BASE、ui32SysClock、9600、 
UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | 
UART_CONFIG_PAR_NONE); 
// 
//将 TX 和 RX 触发阈值设置为4。 这将由使用 
// uDMA 控制器发出信号,指示何时应传输更多数据。 。 
//将配置 uDMA TX 和 RX 通道,以便可以传输4个通道 
当 UART 准备传输更多数据时、//以突发方式传输字节。 
// 
ROM_UARTFIFOLevelSet (UART0_BASE、UART_FIFO_TX4_8、UART_FIFO_RX4_8); 
// 
//启用 UART 以进行操作,并为两个 TX 启用 UDMA 接口 
//和 RX 通道。 
// 
ROM_UARTEnable (UART0_BASE); 
ROM_UARTDMAEnable (UART0_BASE、UART_DMA_RX | UART_DMA_TX); 
// 
// 
//将 UDMA UART0RX 通道的属性置于已知状态。 这些 
默认情况下、//应已禁用。 
// 
ROM_uDMAChannelAttributeDisable (UDMA_CHANGE_UART0RX、 
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | 
UDMA_ATTR_HIGH_PRIOR| 
UDMA_ATTR_REQMASK); 
// 
//为配置主控制结构体的控制参数 
// UART RX 通道。 主控制结构用于"A" 
//部分乒乓接收。 传输数据大小为8位 
//源地址不会递增,因为它将从读取 
//寄存器。 目的地址增量是字节8位字节。 。 
//仲裁大小设置为4以匹配 RX FIFO 触发阈值。 
//如果可能,UDMA 控制器将使用4字节突发传输。 这种情况 
//这种单字节传输会更有效一些。 
// 
ROM_uDMAChannelControlSet (UDMA_CHANGE_UART0RX | UDMA_PRI_SELECT、 
UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | 
UDMA_ARB_4); 
// 
//为的替代控制结构配置控制参数 
// UART RX 通道。 备用控制结构体用于"B" 
//部分乒乓接收。 配置与相同 
//主/A 控制结构。 
// 
ROM_uDMAChannelControlSet (UDMA_CHANGE_UART0RX | UDMA_ALT_SELECT、 
UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | 
UDMA_ARB_4); 
// 
//设置 UART RX 主控件的传输参数 
//结构。 模式设置为乒乓模式、传输源为 
// UART 数据寄存器,目的是接收“A”缓冲区。 。 
//传输大小设置为与缓冲区大小匹配。 
// 
ROM_uDMAChannelTransferSet (UDMA_CHANGE_UART0RX | UDMA_PRI_SELECT、 
UDMA_MODE_PINGONG、 
(void *)(UART0_BASE + UART_O_DR)、 
g_ui8RxBufA、sizeof (g_ui8RxBufA); 
// 
//设置 UART RX 交替控制的传输参数 
//结构。 模式设置为乒乓模式、传输源为 
// UART 数据寄存器,目的是接收"B"缓冲区。 。 
//传输大小设置为与缓冲区大小匹配。 
// 
ROM_uDMAChannelTransferSet (UDMA_CHANGE_UART0RX | UDMA_ALT_SELECT、 
UDMA_MODE_PINGONG、 
(void *)(UART0_BASE + UART_O_DR)、 
g_ui8RxBufB、sizeof (g_ui8RxBufB)); 
// 
//将 UDMA UART0TX 通道的属性置于已知状态。 这些 
默认情况下、//应已禁用。 
// 
ROM_uDMAChannelAttributeDisable (UDMA_CHANGE_UART0TX、 
UDMA_ATTR_ALTSELECT | 
UDMA_ATTR_HIGH_PRIOR| 
UDMA_ATTR_REQMASK); 
// 
//设置 UDMA UART TX 通道的 USEBURST 属性。 这将会 
//强制控制器在传输数据时始终使用突发 
//将 TX 缓冲器连接到 UART。 这是比较有效的总线使用 
//不是允许单次或突发传输的默认值。 
// 
ROM_uDMAChannelAttributeEnable (UDMA_CHANGE_UART0TX、UDMA_ATTR_USEBURST); 
// 
//配置 UART TX 的控制参数。 UDMA UART TX 
//通道用于将数据块从缓冲区传输到 UART。 
//数据大小为8位。 源地址增量为8位字节 
//因为数据来自缓冲区。 目的增量为 
//由于数据将被写入 UART 数据寄存器,因此不存在。 。 
//仲裁大小设置为4,与 UART TX FIFO 触发器匹配 
//阈值。 
// 
ROM_uDMAChannelControlSet (UDMA_CHANGE_UART0TX | UDMA_PRI_SELECT、 
UDMA_SIZE_8 | UDMA_SRC_INC_8 | 
UDMA_DST_INC_NONE | 
UDMA_ARB_4); 
// 
//设置 uDMA UART TX 通道的传输参数。 这将会 
//配置传输源和目的以及传输大小。 
//使用基本模式是因为外设正在进行 UDMA 传输 
//请求。 源是 TX 缓冲区、目的是 UART 
//数据寄存器。 
// 
ROM_uDMAChannelTransferSet (UDMA_CHANGE_UART0TX | UDMA_PRI_SELECT、 
UDMA_MODE_BASIC、g_ui8TxBuf、 
(void *)(UART0_BASE + UART_O_DR)、 
sizeof (g_ui8TxBuf)); 
// 
//现在,UDMA UART TX 和 RX 通道都被引脚以启动 A 
//传输。 一旦启用通道、外设将会启动 
//发出传输请求,数据传输将开始。 
// 
ROM_uDMAChannelEnable (UDMA_CHANGE_UART0RX); 
ROM_uDMAChannelEnable (UDMA_CHANGE_UART0TX); 
// 
//启用 UART DMA TX/RX 中断。 
// 
ROM_UARTIntEnable (UART0_BASE、UART_INT_DMATX | UART_INT_DMARX); 
// 
//启用 UART 外设中断。 
// 
} 
 
				 
		 
					