I have an EK-TM4C129XL that is to be control from Matlab on PC over serial/UART.
The problem is that the transmissions from PC do not trigger the receive interrupt. I do not forget to "resume" before trying.
Please check if I correctly configure everything. Here is the relevant code.
void initPCInterface(uint32_t sys_clk) { SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); GPIOPinTypeUART(GPIO_PORTA_BASE, 0b00000011); UARTConfigSetExpClk(UART0_BASE, sys_clk, 57600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); UARTFIFOEnable(UART0_BASE); UARTFIFOLevelSet(UART0_BASE,UART_FIFO_TX2_8, UART_FIFO_RX2_8); UARTIntEnable(UART0_BASE, UART_INT_RX); UARTIntRegister(UART0_BASE, pcCommInterface); IntPrioritySet(INT_UART0,0x20);//MEDIUM PRIORITY IntEnable(INT_UART0); }
void initGPIO(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOB)); GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, PB_MASK); GPIOPinWrite(GPIO_PORTB_BASE, PB_MASK,0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOP)); GPIOPinTypeGPIOOutput(GPIO_PORTP_BASE, PP_MASK); GPIOPinWrite(GPIO_PORTP_BASE, PP_MASK,0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOE)); GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, PE_MASK); GPIOPinWrite(GPIO_PORTE_BASE, PE_MASK,0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOC)); GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, PC_MASK); GPIOPinWrite(GPIO_PORTC_BASE, PC_MASK,0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOQ)); GPIOPinTypeGPIOOutput(GPIO_PORTQ_BASE, PQ_MASK); GPIOPinWrite(GPIO_PORTQ_BASE, PQ_MASK,0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOK)); GPIOPinTypeGPIOInput(GPIO_PORTK_BASE, PK_MASK); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOD)); //Unlock PD7, default NMI HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0x80; GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, PD_MASK); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOM)); GPIOPinTypeGPIOInput(GPIO_PORTM_BASE, PM_MASK); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPION)); GPIOPinTypeGPIOInput(GPIO_PORTN_BASE, PN_MASK); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA)); GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, PA_MASK); }
int main(void) { {// limit scope of sys_clock uint32_t sys_clock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000); initGPIO(); initPCInterface(sys_clock); }//sys_clock is popped from stack IntMasterEnable(); while(true); }
minimal Matlab test. Matlab successfully opens the port
clear close all s=serial('/dev/ttyS0',... 'BaudRate', 57600,'DataBits', 8,'Parity', 'none', ... 'StopBits',1, 'Timeout',2); fopen(s);%successful fprintf(s, 'rzzzzzklkll');%send something, does nothing fclose(s);