Hi all im working in interupt driven uart reception for atlease 4 uarts in tm4c129xnczad micro controller, i have achieved the interupt reception uart for uart 0 like wise i tried the reception for uart1 where i could not get the character im sending through terminal, the ide i am using is code composer i have attached my code below any thoughts on this please let me know.
//********************************UART0_INITIALISATION ************************// void Uart0_Init(void) { MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); MAP_GPIOPinConfigure(GPIO_PA0_U0RX); MAP_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0); MAP_GPIOPinConfigure(GPIO_PA1_U0TX); MAP_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_1); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); MAP_UARTConfigSetExpClk(UART0_BASE, ui32SysClock, 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); MAP_IntEnable(INT_UART0); MAP_UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); } //********************************UART1_INITIALISATION ************************// void Uart1_Init(void) { MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); MAP_GPIOPinConfigure(GPIO_PB0_U1RX); MAP_GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0); MAP_GPIOPinConfigure(GPIO_PB1_U1TX); MAP_GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_1); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); MAP_UARTConfigSetExpClk(UART1_BASE, ui32SysClock, 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); MAP_IntEnable(INT_UART1); //MAP_UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT); } //***************************************************************************** // // The UART interrupt handler. // //***************************************************************************** void UART0IntHandler(void) { uint32_t ui32Status; // MAP_UARTCharPutNonBlocking(UART0_BASE, input); // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_4); // // Get the interrrupt status. // ui32Status = MAP_UARTIntStatus(UART0_BASE, true); // // Clear the asserted interrupts. // MAP_UARTIntClear(UART0_BASE, ui32Status); //MAP_UARTCharPutNonBlocking(UART0_BASE,UARTCharGetNonBlocking(UART0_BASE)); input = UARTCharGetNonBlocking(UART0_BASE); // // Loop while there are characters in the receive FIFO. // /*while(MAP_UARTCharsAvail(UART0_BASE)) { // // Read the next character from the UART and write it back to the UART. // MAP_UARTCharPutNonBlocking(UART0_BASE, UARTCharGetNonBlocking(UART0_BASE)); }*/ } void UART1IntHandler(void) { uint32_t ui32Status; // MAP_UARTCharPutNonBlocking(UART0_BASE, input); // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_4); // // Get the interrrupt status. // ui32Status = MAP_UARTIntStatus(UART1_BASE, true); // // Clear the asserted interrupts. // MAP_UARTIntClear(UART1_BASE, ui32Status); //MAP_UARTCharPutNonBlocking(UART0_BASE,UARTCharGetNonBlocking(UART0_BASE)); input_1 = UARTCharGetNonBlocking(UART1_BASE); // // Loop while there are characters in the receive FIFO. // /*while(MAP_UARTCharsAvail(UART0_BASE)) { // // Read the next character from the UART and write it back to the UART. // MAP_UARTCharPutNonBlocking(UART0_BASE, UARTCharGetNonBlocking(UART0_BASE)); }*/ } int main(void) { volatile uint32_t ui32Loop; ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_240), 120000000); //ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); Uart0_Init(); Uart1_Init(); MAP_UARTCharPutNonBlocking(UART0_BASE, 'a'); MAP_UARTCharPutNonBlocking(UART1_BASE, 'b'); // // Enable the GPIO port that is used for the on-board LED. // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); // // Check if the peripheral access is enabled. // while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPION)) { } SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // // Check if the peripheral access is enabled. // while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF)) { } SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOE)) { } // // Enable the GPIO pin for the LED (PN0). Set the direction as output, and // enable the GPIO pin for digital function. // GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_4); GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3); GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_5); GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_6); /*PORTF_DIR |= 0x0000003E; //set PF1, PF2, PF3 as output PORTF_DEN |= 0x0000003E; //enable PF1, PF2, PF3 PORTF_DATA = 0;*/ // // Loop forever. // while(1) { // // Turn on the LED. // //MAP_UARTCharPutNonBlocking(UART1_BASE, 'b'); if(input != 0) { MAP_UARTCharPutNonBlocking(UART0_BASE, input); input = 0; } if(input_1 != 0) { MAP_UARTCharPutNonBlocking(UART1_BASE, input_1); input_1 = 0; } /*if(GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_5)) { GPIO_PORTF_AHB_DATA_R |= (GPIO_PIN_4); } else { GPIO_PORTF_AHB_DATA_R &= ~(GPIO_PIN_4); }*/ /* GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_4); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_5, GPIO_PIN_5); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_6, GPIO_PIN_6);*/ // // Delay for a bit. // /* for(ui32Loop = 0; ui32Loop < 2000000; ui32Loop++) { }*/ // PORTF_DATA |= (GPIO_PIN_4 | PF2 | PF3); // SysCtlDelay(5000000); delayMs(200); // // Turn off the LED. // // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, 0x0); /*GPIO_PORTF_AHB_DATA_R &= ~((GPIO_PIN_4)); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0x0); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_6, 0x0); //PORTF_DATA &= ~(GPIO_PIN_4 | PF2 | PF3 );*/ delayUs(100); // SysCtlDelay(5000000); // // Delay for a bit. // /* for(ui32Loop = 0; ui32Loop < 2000000; ui32Loop++) { }*/ } return 0; }