Revision fa11365c
Arbitrary length i2c test
scout_avr/bom/bootloader.h | ||
---|---|---|
1 | 1 |
#ifndef BOOTLOADER_H |
2 | 2 |
#define BOOTLOADER_H |
3 | 3 |
|
4 |
void boot_program_page (uint32_t page, uint8_t *buf) |
|
4 |
void boot_program_page (uint32_t page, uint8_t *buf);
|
|
5 | 5 |
|
6 | 6 |
#endif |
scout_avr/bom/test.c | ||
---|---|---|
6 | 6 |
|
7 | 7 |
|
8 | 8 |
static void slave_rx(uint8_t *buf, int len) { |
9 |
if (len >= 3) {
|
|
9 |
if (len > 1) {
|
|
10 | 10 |
switch (buf[0]) { |
11 | 11 |
case BOM_I2C_SEND: |
12 | 12 |
smb_send_data(buf, len); |
scout_avr/bom/tiny-twi-sync.c | ||
---|---|---|
6 | 6 |
#define SDA PB0 |
7 | 7 |
#define SCL PB2 |
8 | 8 |
|
9 |
#define RECV_BUF_SIZE 3
|
|
9 |
#define RECV_BUF_SIZE 100
|
|
10 | 10 |
#define SEND_BUF_SIZE 100 |
11 | 11 |
|
12 | 12 |
uint8_t address; |
... | ... | |
106 | 106 |
break; |
107 | 107 |
|
108 | 108 |
case SEND_WRITE_ACK: |
109 |
if (recv_idx == RECV_BUF_SIZE) { |
|
110 |
onDataRecieved(recv_data, RECV_BUF_SIZE); |
|
111 |
twi_ready(); |
|
112 |
} else { |
|
113 |
DDRB &= ~_BV(SDA); |
|
114 |
state = RECV_DATA; |
|
115 |
} |
|
109 |
DDRB &= ~_BV(SDA); |
|
110 |
state = RECV_DATA; |
|
116 | 111 |
break; |
117 | 112 |
|
118 | 113 |
case RECV_DATA: |
119 | 114 |
twi_send_ack(0); |
120 |
recv_data[recv_idx] = input; |
|
121 |
recv_idx++; |
|
115 |
if (recv_idx < RECV_BUF_SIZE) { |
|
116 |
recv_data[recv_idx] = input; |
|
117 |
recv_idx++; |
|
118 |
} |
|
122 | 119 |
break; |
123 | 120 |
|
124 | 121 |
case SEND_READ_ACK: |
... | ... | |
141 | 138 |
} |
142 | 139 |
} |
143 | 140 |
|
141 |
static void twi_on_stop(void) { |
|
142 |
onDataRecieved(recv_data, recv_idx); |
|
143 |
twi_ready(); |
|
144 |
} |
|
145 |
|
|
144 | 146 |
void smb_init(slave_rx_t callback) { |
145 | 147 |
// TODO do we want USICS0 (3)? |
146 | 148 |
USICR = _BV(USIWM1) | _BV(USIWM0) | _BV(USICS1); |
... | ... | |
173 | 175 |
twi_on_overflow(); |
174 | 176 |
USISR |= _BV(USIOIF); |
175 | 177 |
} |
178 |
if (USISR & _BV(USIPF)) { |
|
179 |
twi_on_stop(); |
|
180 |
USISR |= _BV(USIPF); |
|
181 |
} |
|
176 | 182 |
} |
Also available in: Unified diff