@@ -16,15 +16,17 @@ volatile uint8_t output_size = 0;
1616volatile uint8_t output_head_idx = 0 ;
1717volatile uint8_t output_tail_idx = 0 ;
1818
19+ volatile uint8_t ready_to_send = 0 ;
20+
1921volatile uint8_t serial_data_available ;
2022
2123#define SPI_MODE_WAIT 0
2224#define SPI_MODE_SIZE 1
2325#define SPI_MODE_XFER 2
2426volatile uint8_t spi_mode ;
2527
26- volatile uint8_t master_send_size ;
27- volatile uint8_t slave_send_size ;
28+ volatile uint8_t master_send_size = 0 ;
29+ volatile uint8_t slave_send_size = 0 ;
2830
2931
3032/***************************************************************************
@@ -96,7 +98,12 @@ void rx1_isr(void) __interrupt URX1_VECTOR {
9698 value = U1DBUF ;
9799
98100 if (spi_mode == SPI_MODE_WAIT && value == 0x99 ) {
99- slave_send_size = output_size ;
101+ if (ready_to_send ) {
102+ slave_send_size = output_size ;
103+ ready_to_send = 0 ;
104+ } else {
105+ slave_send_size = 0 ;
106+ }
100107 spi_mode = SPI_MODE_SIZE ;
101108 U1DBUF = slave_send_size ;
102109 return ;
@@ -172,6 +179,10 @@ uint16_t serial_rx_word() {
172179 return (serial_rx_byte () << 8 ) + serial_rx_byte ();
173180}
174181
182+ uint32_t serial_rx_long () {
183+ return ((uint32_t )serial_rx_word () << 16 ) + serial_rx_word ();
184+ }
185+
175186void serial_tx_byte (uint8_t tx_byte ) {
176187 if (output_size >= SPI_BUF_LEN ) {
177188 // drop oldest byte
@@ -182,6 +193,9 @@ void serial_tx_byte(uint8_t tx_byte) {
182193 }
183194 }
184195 spi_output_buf [output_head_idx ] = tx_byte ;
196+ if (tx_byte == 0 ) {
197+ ready_to_send = 1 ;
198+ }
185199 output_head_idx ++ ;
186200 if (output_head_idx >= SPI_BUF_LEN ) {
187201 output_head_idx = 0 ;
0 commit comments