Переглянути джерело

Merge branch 'main' of ssh://terminus.zytor.com/git/abc80/usbcas

H. Peter Anvin 3 роки тому
батько
коміт
e1e8e69483
2 змінених файлів з 7 додано та 5 видалено
  1. 6 4
      USBCAS/fmrx.c
  2. 1 1
      USBCAS/usbcas.h

+ 6 - 4
USBCAS/fmrx.c

@@ -33,7 +33,7 @@ void fmrx_init(void)
 	TCCR1A = 0;
 
 	/* Enable interrupts on input capture */
-	TIFR1 = TIMSK1 = (1 << ICIE1);
+	TIFR1 = TIMSK1 = 1 << ICIE1;
 
 	/* Clear timer counter */
 	TCNT1 = 0;
@@ -61,12 +61,12 @@ static bool started;
 static inline void enable_timeout(uint16_t when)
 {
 	OCR1A = when;
-	TIFR1 = TIMSK1 = (1 << ICIE1) | (1 << OCIE1A);
+	TIMSK1 = TIFR1 = (1 << ICIE1) | (1 << OCIE1A);
 }
 
 static inline void disable_timeout(void)
 {
-	TIMSK1 = (1 << ICIE1);
+	TIFR1 = TIMSK1 = (1 << ICIE1);
 }
 
 void fmrx_set_speed(uint32_t baudrate)
@@ -79,6 +79,8 @@ void fmrx_set_speed(uint32_t baudrate)
 		prescale++;	/* Prescale by 8 */
 	}
 
+	TCCR1B &= ~7;		/* Stop timer */
+
 	one_bit_lo      = F_CPU / (4 * baudrate);
 	one_bit_hi      =  3 * one_bit_lo;
 	one_bit_timeout = 16 * one_bit_lo; /* 4 total bit times... */
@@ -88,7 +90,7 @@ void fmrx_set_speed(uint32_t baudrate)
 	bits = bytes = 0;
 	last_edge = TCNT1;
 
-	TCCR1B = (TCCR1B & ~7) | prescale;
+	TCCR1B |= prescale;	/* Start timer */
 }
 
 /* We "hunt" for a block until we find this bit pattern; same as ABC800 */

+ 1 - 1
USBCAS/usbcas.h

@@ -77,6 +77,6 @@ void fmrx_recv_byte(uint8_t byte);
 
 /* Parameters */
 #define CAS_BAUDRATE_ABC80	750
-#define CAS_BAUDRATE_ABC800	2600
+#define CAS_BAUDRATE_ABC800	2680
 
 #endif