add unified compile target
[avr_work.git] / common / spi_slave_common.c
blob55ced7d68c0d566244ca5c2dc44036efc631d696
1 // included by spi_slave_{spi,usi}.c
3 uint8_t
4 spi_slave_put(uint8_t *b, uint8_t n)
6 uint8_t i;
8 i = 0;
10 cli();
12 while ((i < n) && (tx.len + i < NUM_BUFFER_BYTES)) {
13 uint8_t pos = tx.cur+tx.len+i;
14 while (pos >= NUM_BUFFER_BYTES) {
15 pos -= NUM_BUFFER_BYTES;
17 tx.buf[pos] = b[i];
18 i++;
21 tx.len += i;
23 sei();
25 // Return number of bytes added to tx buffer.
26 return i;
29 uint8_t
30 spi_slave_get(uint8_t *b, uint8_t n)
32 uint8_t i;
34 i = 0;
36 cli();
38 while (rx.len && i < n)
40 uint8_t cur;
41 b[i] = rx.buf[rx.cur];
42 //rx.cur = (rx.cur + 1) % NUM_BUFFER_BYTES;
43 cur = (rx.cur + 1);
44 while (cur >= NUM_BUFFER_BYTES) {
45 cur -= NUM_BUFFER_BYTES;
47 rx.cur = cur;
48 --rx.len;
49 ++i;
52 sei();
54 return i;