예제 #1
0
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
}
예제 #2
0
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
}