From ba40f96d4482eda6623800322bd366b46f11187b Mon Sep 17 00:00:00 2001 From: Allen Hill Date: Sun, 3 Sep 2023 19:32:09 -0400 Subject: [PATCH] Change sendbit timer config to optimize function length (insns) --- src/avclandrv.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/avclandrv.c b/src/avclandrv.c index 67bfdee..f0e8766 100644 --- a/src/avclandrv.c +++ b/src/avclandrv.c @@ -191,10 +191,9 @@ void AVCLAN_init() { PORTB.DIRSET = PIN2_bm; // Enable AC2 OUT for LED PORTB.PIN2CTRL = PORT_ISC_INPUT_DISABLE_gc; // Output only - TCB1.CTRLB = TCB_ASYNC_bm | TCB_CNTMODE_SINGLE_gc; - TCB1.EVCTRL = TCB_CAPTEI_bm; - TCB1.INTCTRL = TCB_CAPT_bm; - EVSYS.ASYNCUSER0 = EVSYS_ASYNCUSER0_ASYNCCH0_gc; + // TCB1 for send bit timing + TCB1.CTRLB = TCB_CNTMODE_INT_gc; + TCB1.CCMP = 0xFFFF; TCB1.CTRLA = TCB_CLKSEL_CLKDIV2_gc | TCB_ENABLE_bm; answerReq = cm_Null; @@ -225,15 +224,15 @@ uint8_t AVCLan_Read_Byte(uint8_t length, uint8_t *parity) { } void set_AVC_logic_for(uint8_t val, uint16_t period) { - if (val == 1) { + TCB1.CNT = 0; + if (val) { AVC_SET_LOGICAL_1(); } else { AVC_SET_LOGICAL_0(); } - TCB1.CCMP = period; - EVSYS.ASYNCSTROBE = EVSYS_ASYNCCH0_0_bm; - loop_until_bit_is_set(TCB1_INTFLAGS, 0); - TCB1_INTFLAGS = 1; + while (TCB1.CNT <= period) {}; + + return; } uint8_t AVCLan_Send_StartBit() {