Skip to content
Snippets Groups Projects
Commit 3a03da97 authored by Dean Camera's avatar Dean Camera
Browse files

Fixed ISR definition conflict in the XPLAIN bridge between the software UART...

Fixed ISR definition conflict in the XPLAIN bridge between the software UART and the AVRISP-MKII ISP modules.
parent 292a631b
No related branches found
No related tags found
No related merge requests found
...@@ -67,11 +67,11 @@ void SoftUART_Init(void) ...@@ -67,11 +67,11 @@ void SoftUART_Init(void)
SoftUART_SetBaud(9600); SoftUART_SetBaud(9600);
/* Setup reception timer compare ISR */ /* Setup reception timer compare ISR */
TIMSK1 = (1 << OCIE1A); TIMSK1 = (1 << ICIE1);
/* Setup transmission timer compare ISR and start the timer */ /* Setup transmission timer compare ISR and start the timer */
TIMSK3 = (1 << OCIE3A); TIMSK3 = (1 << ICIE3);
TCCR3B = ((1 << CS30) | (1 << WGM32)); TCCR3B = ((1 << CS30) | (1 << WGM33) | (1 << WGM32));
} }
/** ISR to detect the start of a bit being sent to the software UART. */ /** ISR to detect the start of a bit being sent to the software UART. */
...@@ -90,12 +90,12 @@ ISR(INT0_vect, ISR_BLOCK) ...@@ -90,12 +90,12 @@ ISR(INT0_vect, ISR_BLOCK)
EIMSK = 0; EIMSK = 0;
/* Start the reception timer */ /* Start the reception timer */
TCCR1B = ((1 << CS10) | (1 << WGM12)); TCCR1B = ((1 << CS10) | (1 << WGM13) | (1 << WGM12));
} }
} }
/** ISR to manage the reception of bits to the software UART. */ /** ISR to manage the reception of bits to the software UART. */
ISR(TIMER1_COMPA_vect, ISR_BLOCK) ISR(TIMER1_CAPT_vect, ISR_BLOCK)
{ {
/* Cache the current RX pin value for later checking */ /* Cache the current RX pin value for later checking */
uint8_t SRX_Cached = (SRXPIN & (1 << SRX)); uint8_t SRX_Cached = (SRXPIN & (1 << SRX));
...@@ -120,12 +120,12 @@ ISR(TIMER1_COMPA_vect, ISR_BLOCK) ...@@ -120,12 +120,12 @@ ISR(TIMER1_COMPA_vect, ISR_BLOCK)
/* Reception complete, store the received byte if stop bit valid */ /* Reception complete, store the received byte if stop bit valid */
if (SRX_Cached) if (SRX_Cached)
RingBuffer_Insert(&UARTtoUSB_Buffer, RX_Data); RingBuffer_Insert(&XMEGAtoUSB_Buffer, RX_Data);
} }
} }
/** ISR to manage the transmission of bits via the software UART. */ /** ISR to manage the transmission of bits via the software UART. */
ISR(TIMER3_COMPA_vect, ISR_BLOCK) ISR(TIMER3_CAPT_vect, ISR_BLOCK)
{ {
/* Check if transmission has finished */ /* Check if transmission has finished */
if (TX_BitsRemaining) if (TX_BitsRemaining)
...@@ -140,13 +140,13 @@ ISR(TIMER3_COMPA_vect, ISR_BLOCK) ...@@ -140,13 +140,13 @@ ISR(TIMER3_COMPA_vect, ISR_BLOCK)
TX_Data >>= 1; TX_Data >>= 1;
TX_BitsRemaining--; TX_BitsRemaining--;
} }
else if (!(RX_BitsRemaining) && !(RingBuffer_IsEmpty(&USBtoUART_Buffer))) else if (!(RX_BitsRemaining) && !(RingBuffer_IsEmpty(&USBtoXMEGA_Buffer)))
{ {
/* Start bit - TX line low */ /* Start bit - TX line low */
STXPORT &= ~(1 << STX); STXPORT &= ~(1 << STX);
/* Transmission complete, get the next byte to send (if available) */ /* Transmission complete, get the next byte to send (if available) */
TX_Data = ~RingBuffer_Remove(&USBtoUART_Buffer); TX_Data = ~RingBuffer_Remove(&USBtoXMEGA_Buffer);
TX_BitsRemaining = 9; TX_BitsRemaining = 9;
} }
} }
...@@ -30,6 +30,11 @@ ...@@ -30,6 +30,11 @@
this software. this software.
*/ */
/** \file
*
* Header file for SoftUART.c.
*/
#ifndef _SOFT_UART_ #ifndef _SOFT_UART_
#define _SOFT_UART_ #define _SOFT_UART_
...@@ -55,8 +60,8 @@ ...@@ -55,8 +60,8 @@
{ {
uint16_t BitTime = ((F_CPU / Baud) - 1); uint16_t BitTime = ((F_CPU / Baud) - 1);
OCR1A = BitTime; ICR1 = BitTime;
OCR3A = BitTime; ICR3 = BitTime;
} }
/* Function Prototypes: */ /* Function Prototypes: */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment