the difference between an embOS interrupt and a zero latency interrupt is the interrupt priority level and the usage of OS_EnterInterrupt()/OS_LeaveInterrupt() or OS_EnterNestableInterrupt()/OS_LeaveNestableInterrupt().
void OS_COM_IsrHandler(void) {
int Dummy;
OS_EnterNestableInterrupt();
Dummy = US_RHR;
// Call embOS API functions here
OS_LeaveNestableInterrupt();
}
void Uart_Init(void) {
OS_ARM_InstallISRHandler(ISR_ID_USART, (OS_ISR_HANDLER*) OS_COM_IsrHandler);
OS_ARM_ISRSetPrio(140); // Set prio > 128
OS_ARM_EnableISR(ISR_ID_USART);
}
void OS_COM_IsrHandler(void) {
int Dummy;
Dummy = US_RHR;
// Never call embOS API functions here
}
void Uart_Init(void) {
OS_ARM_InstallISRHandler(ISR_ID_USART, (OS_ISR_HANDLER*) OS_COM_IsrHandler);
OS_ARM_ISRSetPrio(120); // Set prio <128
OS_ARM_EnableISR(ISR_ID_USART);
}