Actually bother to stop and restart SPI timer when needed
This commit is contained in:
parent
8e460b56ea
commit
5762889c5a
1 changed files with 51 additions and 47 deletions
96
avr/send.c
96
avr/send.c
|
@ -7,7 +7,6 @@
|
||||||
#include <tabby/avr/uart.h>
|
#include <tabby/avr/uart.h>
|
||||||
|
|
||||||
#define TIMER0_INTERVAL 1953
|
#define TIMER0_INTERVAL 1953
|
||||||
#define PACKET_BODY_SIZE 640
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TABBY_SEND_READING = 0,
|
TABBY_SEND_READING = 0,
|
||||||
|
@ -25,7 +24,7 @@ static volatile tabby_printer_packet header = {
|
||||||
.size = 0
|
.size = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
static volatile uint8_t body[PACKET_BODY_SIZE];
|
static volatile uint8_t body[TABBY_PRINTER_MAX_PACKET_SIZE];
|
||||||
|
|
||||||
static volatile uint16_t sum = 0x0000;
|
static volatile uint16_t sum = 0x0000;
|
||||||
|
|
||||||
|
@ -36,14 +35,52 @@ static volatile uint8_t device = 0x00,
|
||||||
static volatile uint16_t i = 0,
|
static volatile uint16_t i = 0,
|
||||||
b = 0;
|
b = 0;
|
||||||
|
|
||||||
/*
|
static void spi_start() {
|
||||||
* Internal clock source interrupt vector
|
/*
|
||||||
|
* Configure MISO as output
|
||||||
*/
|
*/
|
||||||
ISR(TIMER0_COMPB_vect) {
|
DDRB |= (1 << DDB4);
|
||||||
if (!(flags & TABBY_SEND_BUFFERED)) {
|
|
||||||
reti();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configure MOSI as input
|
||||||
|
*/
|
||||||
|
DDRB &= ~(1 << DDB3);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configure SCK pin as output
|
||||||
|
*/
|
||||||
|
DDRB |= (1 << DDB5);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enable timer interrupt vector
|
||||||
|
*/
|
||||||
|
TIMSK0 = (1 << TOIE1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reset timer counter to zero
|
||||||
|
*/
|
||||||
|
TCNT1 = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set timer interval
|
||||||
|
*/
|
||||||
|
OCR1A = TIMER0_INTERVAL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set timer clock divider to 1/1
|
||||||
|
*/
|
||||||
|
TCCR1B = (1 << CS10);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void spi_end() {
|
||||||
|
DDRB &= ~((1 << DDB5) | (1 << DDB4) | (1 << DDB3));
|
||||||
|
TIMSK0 &= ~(1 << TOIE1);
|
||||||
|
TCNT1 = 0;
|
||||||
|
OCR1A = TIMER0_INTERVAL;
|
||||||
|
TCCR1B = (1 << CS10);
|
||||||
|
}
|
||||||
|
|
||||||
|
ISR(TIMER0_COMPB_vect) {
|
||||||
value_in >>= 1;
|
value_in >>= 1;
|
||||||
|
|
||||||
PORTB |= (1 << PORTB5);
|
PORTB |= (1 << PORTB5);
|
||||||
|
@ -83,6 +120,8 @@ ISR(TIMER0_COMPB_vect) {
|
||||||
b = 0;
|
b = 0;
|
||||||
flags &= ~TABBY_SEND_BUFFERED;
|
flags &= ~TABBY_SEND_BUFFERED;
|
||||||
flags |= TABBY_SEND_COMPLETE;
|
flags |= TABBY_SEND_COMPLETE;
|
||||||
|
|
||||||
|
spi_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
bits = 8;
|
bits = 8;
|
||||||
|
@ -97,43 +136,6 @@ ISR(TIMER0_COMPB_vect) {
|
||||||
PORTB &= ~(1 << PORTB5);
|
PORTB &= ~(1 << PORTB5);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clock_setup() {
|
|
||||||
/*
|
|
||||||
* Configure MISO as output
|
|
||||||
*/
|
|
||||||
DDRB |= (1 << DDB4);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Configure MOSI as input
|
|
||||||
*/
|
|
||||||
DDRB &= ~(1 << DDB3);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Configure SCK pin as output
|
|
||||||
*/
|
|
||||||
DDRB |= (1 << DDB5);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enable timer interrupt vector
|
|
||||||
*/
|
|
||||||
TIMSK0 = (1 << TOIE1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Reset timer counter to zero
|
|
||||||
*/
|
|
||||||
TCNT1 = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set timer interval
|
|
||||||
*/
|
|
||||||
OCR1A = TIMER0_INTERVAL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set timer clock divider to 1/1
|
|
||||||
*/
|
|
||||||
TCCR1B = (1 << CS10);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint16_t checksum() {
|
static uint16_t checksum() {
|
||||||
uint16_t sum = 0;
|
uint16_t sum = 0;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
@ -154,7 +156,7 @@ int main() {
|
||||||
|
|
||||||
uart_init();
|
uart_init();
|
||||||
|
|
||||||
clock_setup();
|
spi_start();
|
||||||
|
|
||||||
sei();
|
sei();
|
||||||
|
|
||||||
|
@ -237,6 +239,8 @@ int main() {
|
||||||
i = 0;
|
i = 0;
|
||||||
b = 0;
|
b = 0;
|
||||||
flags |= TABBY_SEND_BUFFERED;
|
flags |= TABBY_SEND_BUFFERED;
|
||||||
|
|
||||||
|
spi_start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue