fix serial driver
This commit is contained in:
parent
2cae488de8
commit
de7f1c0295
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
bool timing_error=false;
|
bool timing_error=false;
|
||||||
|
|
||||||
static uint8_t rx_state;
|
static volatile uint8_t rx_state;
|
||||||
static uint8_t rx_byte;
|
static uint8_t rx_byte;
|
||||||
static uint8_t rx_bit = 0;
|
static uint8_t rx_bit = 0;
|
||||||
static uint16_t rx_target;
|
static uint16_t rx_target;
|
||||||
|
@ -50,8 +50,9 @@ static volatile uint8_t rx_buffer_tail;
|
||||||
#define RX_BUFFER_SIZE 80
|
#define RX_BUFFER_SIZE 80
|
||||||
static volatile uint8_t rx_buffer[RX_BUFFER_SIZE];
|
static volatile uint8_t rx_buffer[RX_BUFFER_SIZE];
|
||||||
|
|
||||||
const uint32_t cycles_per_bit = (ALTSS_BASE_FREQ + 4800 / 2) / 4800;
|
const static uint32_t cycles_per_bit = 1667UL;
|
||||||
const uint16_t rx_stop_ticks= cycles_per_bit * 37 / 4;
|
// (ALTSS_BASE_FREQ + 9600 / 2) / 9600UL;
|
||||||
|
const static uint32_t rx_stop_ticks = 15419UL;
|
||||||
|
|
||||||
#ifndef INPUT_PULLUP
|
#ifndef INPUT_PULLUP
|
||||||
#define INPUT_PULLUP INPUT
|
#define INPUT_PULLUP INPUT
|
||||||
|
@ -61,7 +62,9 @@ const uint16_t rx_stop_ticks= cycles_per_bit * 37 / 4;
|
||||||
|
|
||||||
void softserial_init()
|
void softserial_init()
|
||||||
{
|
{
|
||||||
// rx_stop_ticks = cycles_per_bit * 37 / 4;
|
//Serial.printf("cycles_per_bit = %d\n", cycles_per_bit);
|
||||||
|
CONFIG_TIMER_NOPRESCALE();
|
||||||
|
|
||||||
pinMode(INPUT_CAPTURE_PIN, INPUT_PULLUP);
|
pinMode(INPUT_CAPTURE_PIN, INPUT_PULLUP);
|
||||||
digitalWrite(OUTPUT_COMPARE_A_PIN, HIGH);
|
digitalWrite(OUTPUT_COMPARE_A_PIN, HIGH);
|
||||||
pinMode(OUTPUT_COMPARE_A_PIN, OUTPUT);
|
pinMode(OUTPUT_COMPARE_A_PIN, OUTPUT);
|
||||||
|
@ -69,6 +72,7 @@ void softserial_init()
|
||||||
rx_buffer_head = 0;
|
rx_buffer_head = 0;
|
||||||
rx_buffer_tail = 0;
|
rx_buffer_tail = 0;
|
||||||
ENABLE_INT_INPUT_CAPTURE();
|
ENABLE_INT_INPUT_CAPTURE();
|
||||||
|
DISABLE_INT_COMPARE_A();
|
||||||
}
|
}
|
||||||
|
|
||||||
void softserial_end(void)
|
void softserial_end(void)
|
||||||
|
@ -80,16 +84,12 @@ void softserial_end(void)
|
||||||
// TODO: restore timer to original settings?
|
// TODO: restore timer to original settings?
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t state, bit, head, tail, out;
|
|
||||||
ISR(COMPARE_A_INTERRUPT)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************/
|
/****************************************/
|
||||||
/** Reception **/
|
/** Reception **/
|
||||||
/****************************************/
|
/****************************************/
|
||||||
ISR(CAPTURE_INTERRUPT)
|
ISR(CAPTURE_INTERRUPT)
|
||||||
{
|
{
|
||||||
|
uint8_t bit, head, state;
|
||||||
uint16_t capture, target;
|
uint16_t capture, target;
|
||||||
uint16_t offset, offset_overflow;
|
uint16_t offset, offset_overflow;
|
||||||
|
|
||||||
|
@ -142,6 +142,7 @@ ISR(CAPTURE_INTERRUPT)
|
||||||
|
|
||||||
ISR(COMPARE_B_INTERRUPT)
|
ISR(COMPARE_B_INTERRUPT)
|
||||||
{
|
{
|
||||||
|
uint8_t state, bit, head;
|
||||||
DISABLE_INT_COMPARE_B();
|
DISABLE_INT_COMPARE_B();
|
||||||
CONFIG_CAPTURE_FALLING_EDGE();
|
CONFIG_CAPTURE_FALLING_EDGE();
|
||||||
state = rx_state;
|
state = rx_state;
|
||||||
|
@ -163,7 +164,7 @@ ISR(COMPARE_B_INTERRUPT)
|
||||||
|
|
||||||
const int softserial_read()
|
const int softserial_read()
|
||||||
{
|
{
|
||||||
|
uint8_t head, tail, out;
|
||||||
head = rx_buffer_head;
|
head = rx_buffer_head;
|
||||||
tail = rx_buffer_tail;
|
tail = rx_buffer_tail;
|
||||||
if (head == tail) return -1;
|
if (head == tail) return -1;
|
||||||
|
@ -175,6 +176,7 @@ const int softserial_read()
|
||||||
|
|
||||||
const int softserial_available()
|
const int softserial_available()
|
||||||
{
|
{
|
||||||
|
uint8_t head, tail;
|
||||||
head = rx_buffer_head;
|
head = rx_buffer_head;
|
||||||
tail = rx_buffer_tail;
|
tail = rx_buffer_tail;
|
||||||
if (head >= tail) return head - tail;
|
if (head >= tail) return head - tail;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user