/* ===================================================================*/ void IO1_Main(LDD_TDeviceData *DeviceDataPtr) { IO1_TDeviceDataPtr DeviceDataPrv = (IO1_TDeviceDataPtr)DeviceDataPtr; register uint32_t StatReg = UART_PDD_ReadInterruptStatusReg(UART1_BASE_PTR); /* Read status register */ if (StatReg & (UART_S1_NF_MASK | UART_S1_OR_MASK | UART_S1_FE_MASK | UART_S1_PF_MASK)) { /* Is any error flag set? */ (void)UART_PDD_GetChar8(UART1_BASE_PTR); /* Dummy read 8-bit character from receiver */ StatReg &= (uint32_t)(~(uint32_t)UART_S1_RDRF_MASK); /* Clear the receive data flag to discard the errorneous data */ } if (StatReg & UART_S1_RDRF_MASK) { /* Is the receiver's interrupt flag set? */ InterruptRx(DeviceDataPrv); /* If yes, then invoke the internal service routine. This routine is inlined. */ } if (DeviceDataPrv->SerFlag & ENABLED_TX_INT) { /* Is the transmitter interrupt enabled? */ if (StatReg & UART_S1_TDRE_MASK) { /* Is the transmitter empty? */ InterruptTx(DeviceDataPrv); /* If yes, then invoke the internal service routine. This routine is inlined. */ } } }
/* ** =================================================================== ** Method : MB_UART_Interrupt (component Serial_LDD) ** ** Description : ** The ISR function handling the device receive/transmit ** interrupt. Calls InterruptTX/InterruptRX methods. ** This method is internal. It is used by Processor Expert only. ** =================================================================== */ void MB_UART_Interrupt(LDD_RTOS_TISRParameter _isrParameter) { /* {MQXLite RTOS Adapter} ISR parameter is passed as parameter from RTOS interrupt dispatcher */ MB_UART_TDeviceDataPtr DeviceDataPrv = (MB_UART_TDeviceDataPtr)_isrParameter; register uint32_t StatReg = UART_PDD_ReadInterruptStatusReg(UART2_BASE_PTR); /* Read status register */ if (StatReg & (UART_S1_NF_MASK | UART_S1_OR_MASK | UART_S1_FE_MASK | UART_S1_PF_MASK)) { /* Is any error flag set? */ (void)UART_PDD_GetChar8(UART2_BASE_PTR); /* Dummy read 8-bit character from receiver */ StatReg &= (uint32_t)(~(uint32_t)UART_S1_RDRF_MASK); /* Clear the receive data flag to discard the errorneous data */ } if (StatReg & UART_S1_RDRF_MASK) { /* Is the receiver's interrupt flag set? */ InterruptRx(DeviceDataPrv); /* If yes, then invoke the internal service routine. This routine is inlined. */ } if (DeviceDataPrv->SerFlag & ENABLED_TX_INT) { /* Is the transmitter interrupt enabled? */ if (StatReg & UART_S1_TDRE_MASK) { /* Is the transmitter empty? */ InterruptTx(DeviceDataPrv); /* If yes, then invoke the internal service routine. This routine is inlined. */ } } }
/* ===================================================================*/ void ASerialLdd1_Main(LDD_TDeviceData *DeviceDataPtr) { ASerialLdd1_TDeviceDataPtr DeviceDataPrv = (ASerialLdd1_TDeviceDataPtr)DeviceDataPtr; register uint32_t StatReg = UART0_PDD_ReadInterruptStatusReg(UART0_BASE_PTR); /* Read status register */ register uint16_t OnErrorFlags = 0U; /* Temporary variable for flags */ register uint8_t OnBreakFlag = 0U; /* Temporary variable flag for OnBreak event */ register uint16_t Data; /* Temporary variable for data */ if (StatReg & (UART0_S1_NF_MASK | UART0_S1_OR_MASK | UART0_S1_FE_MASK | UART0_S1_PF_MASK)) { /* Is any error flag set? */ UART0_PDD_ClearInterruptFlags(UART0_BASE_PTR, (UART0_S1_NF_MASK | UART0_S1_OR_MASK | UART0_S1_FE_MASK | UART0_S1_PF_MASK)); Data = (uint16_t)UART0_PDD_GetChar8(UART0_BASE_PTR); /* Read an 8-bit character from receiver */ if ((StatReg & UART0_S1_FE_MASK) != 0U) { /* Is the framing error detected? */ if (((StatReg & UART0_S1_RDRF_MASK) != 0U) && (Data == 0U)) { /* Is the zero character in the receiver? */ OnBreakFlag++; DeviceDataPrv->SerFlag |= BREAK_DETECTED; /* If yes then set the flag */ } else { OnErrorFlags |= LDD_SERIAL_FRAMING_ERROR; /* If yes then set the flag */ } } if ((StatReg & UART0_S1_OR_MASK) != 0U) { /* Is the overrun error flag set? */ OnErrorFlags |= LDD_SERIAL_RX_OVERRUN; /* If yes then set the flag */ } if ((StatReg & UART0_S1_PF_MASK) != 0U) { /* Is the parity error flag set? */ OnErrorFlags |= LDD_SERIAL_PARITY_ERROR; /* If yes then set the flag */ } if ((StatReg & UART0_S1_NF_MASK) != 0U) { /* Is the noise error flag set? */ OnErrorFlags |= LDD_SERIAL_NOISE_ERROR; /* If yes then set the flag */ } DeviceDataPrv->ErrFlag |= OnErrorFlags; /* Copy flags status to ErrFlag status variable */ StatReg &= (uint32_t)(~(uint32_t)UART0_S1_RDRF_MASK); /* Clear the receive data flag to discard the errorneous data */ if (OnBreakFlag != 0U) { ASerialLdd1_OnBreak(DeviceDataPrv->UserDataPtr); /* If yes then invoke user event */ } } if (StatReg & UART0_S1_RDRF_MASK) { /* Is the receiver's interrupt flag set? */ InterruptRx(DeviceDataPrv); /* If yes, then invoke the internal service routine. This routine is inlined. */ } if (DeviceDataPrv->SerFlag & ENABLED_TX_INT) { /* Is the transmitter interrupt enabled? */ if (StatReg & UART0_S1_TDRE_MASK) { /* Is the transmitter empty? */ InterruptTx(DeviceDataPrv); /* If yes, then invoke the internal service routine. This routine is inlined. */ } } }
/* ** =================================================================== ** Method : UART_A_Interrupt (component Serial_LDD) ** ** Description : ** The ISR function handling the device receive/transmit ** interrupt. Calls InterruptTX/InterruptRX methods. ** This method is internal. It is used by Processor Expert only. ** =================================================================== */ void UART_A_Interrupt(LDD_RTOS_TISRParameter _isrParameter) { /* {MQXLite RTOS Adapter} ISR parameter is passed as parameter from RTOS interrupt dispatcher */ UART_A_TDeviceDataPtr DeviceDataPrv = (UART_A_TDeviceDataPtr)_isrParameter; register uint32_t StatReg = UART_PDD_ReadInterruptStatusReg(UART3_BASE_PTR); /* Read status register */ if (StatReg & (UART_S1_NF_MASK | UART_S1_OR_MASK | UART_S1_FE_MASK | UART_S1_PF_MASK)) { /* Is any error flag set? */ (void)UART_PDD_GetChar8(UART3_BASE_PTR); /* Dummy read 8-bit character from receiver */ StatReg &= (uint32_t)(~(uint32_t)UART_S1_RDRF_MASK); /* Clear the receive data flag to discard the errorneous data */ } if (StatReg & UART_S1_RDRF_MASK) { /* Is the receiver's interrupt flag set? */ InterruptRx(DeviceDataPrv); /* If yes, then invoke the internal service routine. This routine is inlined. */ } if (DeviceDataPrv->SerFlag & ENABLED_TX_INT) { /* Is the transmitter interrupt enabled? */ if (StatReg & UART_S1_TDRE_MASK) { /* Is the transmitter empty? */ InterruptTx(DeviceDataPrv); /* If yes, then invoke the internal service routine. This routine is inlined. */ } } if ((UART_PDD_GetTxCompleteInterruptMask(UART3_BASE_PTR) != 0U) && (StatReg & UART_S1_TC_MASK)) { /* Is a transmission completed? */ UART_PDD_DisableInterrupt(UART3_BASE_PTR, UART_PDD_INTERRUPT_TRANSMITTER_COMPLETE); /* If yes then disable TX complete interrupt */ UART_A_OnTxComplete(DeviceDataPrv->UserDataPtr); /* If yes then invoke user event */ } }