在使用利尔达的M4开发板时使用UART1串口进行中断接收和中断发送,但是发送不会进入中断程序,程序只会将缓冲里面第一个字节发送出去后就完事了,中断接收则正常。下面是配置程序:
//
// 配置Uart引脚,(PA0、PA1)
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
// 使能处理器总中断
//
IntMasterEnable();
// 设定PC4、PC5
//
GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5);
GPIOPinConfigure(GPIO_PC4_U1RX);
GPIOPinConfigure(GPIO_PC5_U1TX);
//---------------------------GPIP口配置-------------------------------//
//---------------------------串口配置115200 N81-------------------------------//
//
// 配置UART到115200,8-N-1
//
UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
UARTIntRegister(UART1_BASE, UART1TXIntHandler);
UARTIntRegister(UART1_BASE, UART1RXIntHandler);
UARTIntClear(UART1_BASE, UART_INT_TX);
UARTIntEnable(UART1_BASE, UART_INT_TX);
UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);
//
// 使能UART中断
//
IntEnable(INT_UART1);
调试一天了,不知道怎么回事,有人知道吗?
此帖出自
小平头技术问答
用这个例子试下uart0看看
昨晚找到原因,确实因为自己看程序不仔细,一直以为自己配置的FIFO未使能用的1位发送FIFO,后来发现TI那个串口库函数最后使能串口那个函数里面,使能了FIFO而导致发送数据小于1/2FIFO深度才能触发而不是我想的1个字节后就触发。
UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); 这个函数就是配置串口的,如果只看到里面这个位置就以为未使能FIFO,
// // Set parity, data length, and number of stop bits. //
HWREG(ulBase + UART_O_LCRH) = ulConfig; // // Start the UART. //
其实函数最后一句(UARTEnable(ulBase); )打开了FIFO,我把里面打开FIFO的操作屏蔽就好了
void UARTEnable(unsigned long ulBase)
{
// // Check the arguments. //
ASSERT(UARTBaseValid(ulBase));
// // Enable the FIFO. //
//HWREG(ulBase + UART_O_LCRH) |= UART_LCRH_FEN;
// // Enable RX, TX, and the UART. //
HWREG(ulBase + UART_O_CTL) |= (UART_CTL_UARTEN | UART_CTL_TXE | UART_CTL_RXE); }
[ 本帖最后由 yg1982720 于 2012-2-29 13:53 编辑 ]互相学习
一周热门 更多>