irqstate_t up_irq_save(void) { irqstate_t flags; /* Get the previous value of IE */ flags = irq_getie(); /* Disable interrupts and return the previous interrupt state */ irq_setie(0); return flags; }
void uart_write(char c) { unsigned int oldmask; if(irq_getie()) { while(tx_level == UART_RINGBUFFER_SIZE_TX); } oldmask = irq_getmask(); irq_setmask(0); if(tx_cts) { tx_cts = 0; uart_rxtx_write(c); } else { tx_buf[tx_produce] = c; tx_produce = (tx_produce + 1) & UART_RINGBUFFER_MASK_TX; tx_level++; } irq_setmask(oldmask); }