void start_send(void) { uint8_t txcrc = 0, i; // atomically update flags uint8_t sreg = SREG; cli(); intercom_flags = (intercom_flags & ~FLAG_TX_FINISHED) | FLAG_TX_IN_PROGRESS; SREG = sreg; // set start byte tx.packet.start = START; // calculate CRC for outgoing packet for (i = 0; i < (sizeof(intercom_packet_t) - 1); i++) { txcrc ^= tx.data[i]; } tx.packet.crc = txcrc; for (i = 0; i < (sizeof(intercom_packet_t) ); i++) { _tx.data[i] = tx.data[i]; } // enable transmit pin enable_transmit(); delay_us(15); // actually start sending the packet packet_pointer = 0; #ifdef HOST UCSR1B |= MASK(UDRIE1); #else UCSR0B |= MASK(UDRIE0); #endif }
void start_send(void) { state = SEND_START1; enable_transmit(); delay_us(15); //Enable interrupts so we can send next characters #ifdef HOST UCSR1B |= MASK(UDRIE1); #else UCSR0B |= MASK(UDRIE0); #endif }