diff --git a/avr/devices/n00/n00_boot.asm b/avr/devices/n00/n00_boot.asm index 974b505..3ffde72 100644 --- a/avr/devices/n00/n00_boot.asm +++ b/avr/devices/n00/n00_boot.asm @@ -104,9 +104,9 @@ main: ; *************************************************************************** ; includes -.include "modules/com2/lowlevel.asm" +.include "modules/uart_bitbang/bytelevel.asm" +.include "modules/uart_bitbang/packetlevel.asm" .include "modules/com2/crc.asm" -.include "modules/com2/packets.asm" .include "common/crc8.asm" .include "common/utils_wait_fixed.asm" .include "common/utils_copy_from_flash.asm" diff --git a/avr/devices/n00/n00_defs.asm b/avr/devices/n00/n00_defs.asm index fac8d5e..b119d73 100644 --- a/avr/devices/n00/n00_defs.asm +++ b/avr/devices/n00/n00_defs.asm @@ -50,15 +50,19 @@ .equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter -.equ COM_DDR_DATA = DDRA -.equ COM_PORT_DATA = PORTA -.equ COM_PIN_DATA = PINA -.equ COM_PINNUM_DATA = PORTA1 +.equ COM_TXD_DDR = DDRA +.equ COM_TXD_DATA = PORTA +.equ COM_TXD_PIN = PORTA1 -.equ COM_DDR_ATTN = DDRA -.equ COM_PORT_ATTN = PORTA -.equ COM_PIN_ATTN = PINA -.equ COM_PINNUM_ATTN = PORTA7 +.equ COM_RXD_DDR = DDRA +.equ COM_RXD_INPUT = PINA +.equ COM_RXD_OUTPUT = PORTA +.equ COM_RXD_PIN = PORTA1 + +.equ COM_ATTN_DDR = DDRA +.equ COM_ATTN_INPUT = PINA +.equ COM_ATTN_OUTPUT = PORTA +.equ COM_ATTN_PIN = PORTA7 .equ COM_IRQ_ADDR_ATTN = PCMSK0 .equ COM_IRQ_BIT_ATTN = 7 ; bit 7 in PCMSK0 diff --git a/avr/devices/n00/n00_main.asm b/avr/devices/n00/n00_main.asm index fb4c322..bb7be1b 100644 --- a/avr/devices/n00/n00_main.asm +++ b/avr/devices/n00/n00_main.asm @@ -93,7 +93,7 @@ ; rjmp main ; Reset vector rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system reti ; EXT_INT0 - rjmp com2IsrPcint0 ; PCI0 + rjmp uartBitbangIsrPcint0 ; PCI0 reti ; PCI1 reti ; WATCHDOG reti ; ICP1 @@ -143,6 +143,11 @@ firmwareStart: rjmp main #ifdef MODULES_COM .include "modules/com2/defs.asm" .include "modules/com2/main.asm" + .include "modules/com2/buffer.asm" + .include "modules/uart_bitbang/defs.asm" + .include "modules/uart_bitbang/main.asm" + .include "modules/uart_bitbang/bytelevel.asm" + .include "modules/uart_bitbang/packetlevel.asm" #ifdef MODULES_COM_WITH_ADDR_PROTO .include "modules/comproto/defs.asm" .include "modules/comproto/main.asm" diff --git a/avr/devices/n06/n06_boot.asm b/avr/devices/n06/n06_boot.asm index c29a7b0..75a6d90 100644 --- a/avr/devices/n06/n06_boot.asm +++ b/avr/devices/n06/n06_boot.asm @@ -104,9 +104,9 @@ main: ; *************************************************************************** ; includes -.include "modules/com2/lowlevel.asm" +.include "modules/uart_bitbang/bytelevel.asm" +.include "modules/uart_bitbang/packetlevel.asm" .include "modules/com2/crc.asm" -.include "modules/com2/packets.asm" .include "common/crc8.asm" .include "common/utils_wait_fixed.asm" .include "common/utils_copy_from_flash.asm" diff --git a/avr/devices/n06/n06_defs.asm b/avr/devices/n06/n06_defs.asm index 9cb3ec3..7c49666 100644 --- a/avr/devices/n06/n06_defs.asm +++ b/avr/devices/n06/n06_defs.asm @@ -50,15 +50,19 @@ .equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter -.equ COM_DDR_DATA = DDRA -.equ COM_PORT_DATA = PORTA -.equ COM_PIN_DATA = PINA -.equ COM_PINNUM_DATA = PORTA1 +.equ COM_TXD_DDR = DDRA +.equ COM_TXD_DATA = PORTA +.equ COM_TXD_PIN = PORTA1 -.equ COM_DDR_ATTN = DDRA -.equ COM_PORT_ATTN = PORTA -.equ COM_PIN_ATTN = PINA -.equ COM_PINNUM_ATTN = PORTA7 +.equ COM_RXD_DDR = DDRA +.equ COM_RXD_INPUT = PINA +.equ COM_RXD_OUTPUT = PORTA +.equ COM_RXD_PIN = PORTA1 + +.equ COM_ATTN_DDR = DDRA +.equ COM_ATTN_INPUT = PINA +.equ COM_ATTN_OUTPUT = PORTA +.equ COM_ATTN_PIN = PORTA7 .equ COM_IRQ_ADDR_ATTN = PCMSK0 .equ COM_IRQ_BIT_ATTN = PCINT7 ; bit 7 in PCMSK0 diff --git a/avr/devices/n06/n06_main.asm b/avr/devices/n06/n06_main.asm index eb8fec3..e702372 100644 --- a/avr/devices/n06/n06_main.asm +++ b/avr/devices/n06/n06_main.asm @@ -93,7 +93,7 @@ ; rjmp main ; Reset vector rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system reti ; EXT_INT0 - rjmp com2IsrPcint0 ; PCI0 + rjmp uartBitbangIsrPcint0 ; PCI0 reti ; PCI1 reti ; WATCHDOG reti ; ICP1 @@ -143,6 +143,11 @@ firmwareStart: rjmp main #ifdef MODULES_COM .include "modules/com2/defs.asm" .include "modules/com2/main.asm" + .include "modules/com2/buffer.asm" + .include "modules/uart_bitbang/defs.asm" + .include "modules/uart_bitbang/main.asm" + .include "modules/uart_bitbang/bytelevel.asm" + .include "modules/uart_bitbang/packetlevel.asm" #ifdef MODULES_COM_WITH_ADDR_PROTO .include "modules/comproto/defs.asm" .include "modules/comproto/main.asm" diff --git a/avr/devices/n11/n11_boot.asm b/avr/devices/n11/n11_boot.asm index 22ed48d..f94bd4b 100644 --- a/avr/devices/n11/n11_boot.asm +++ b/avr/devices/n11/n11_boot.asm @@ -104,9 +104,9 @@ main: ; *************************************************************************** ; includes -.include "modules/com2/lowlevel.asm" +.include "modules/uart_bitbang/bytelevel.asm" +.include "modules/uart_bitbang/packetlevel.asm" .include "modules/com2/crc.asm" -.include "modules/com2/packets.asm" .include "common/crc8.asm" .include "common/utils_wait_fixed.asm" .include "common/utils_copy_from_flash.asm" diff --git a/avr/devices/n11/n11_defs.asm b/avr/devices/n11/n11_defs.asm index 0c1c8f3..e4d81c8 100644 --- a/avr/devices/n11/n11_defs.asm +++ b/avr/devices/n11/n11_defs.asm @@ -48,15 +48,20 @@ .equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter -.equ COM_DDR_DATA = DDRA -.equ COM_PORT_DATA = PORTA -.equ COM_PIN_DATA = PINA -.equ COM_PINNUM_DATA = PORTA1 -.equ COM_DDR_ATTN = DDRA -.equ COM_PORT_ATTN = PORTA -.equ COM_PIN_ATTN = PINA -.equ COM_PINNUM_ATTN = PORTA7 +.equ COM_TXD_DDR = DDRA +.equ COM_TXD_DATA = PORTA +.equ COM_TXD_PIN = PORTA1 + +.equ COM_RXD_DDR = DDRA +.equ COM_RXD_INPUT = PINA +.equ COM_RXD_OUTPUT = PORTA +.equ COM_RXD_PIN = PORTA1 + +.equ COM_ATTN_DDR = DDRA +.equ COM_ATTN_INPUT = PINA +.equ COM_ATTN_OUTPUT = PORTA +.equ COM_ATTN_PIN = PORTA7 .equ COM_IRQ_ADDR_ATTN = PCMSK0 .equ COM_IRQ_BIT_ATTN = PCINT7 ; bit 7 in PCMSK0 diff --git a/avr/devices/n11/n11_main.asm b/avr/devices/n11/n11_main.asm index 0054078..a21c478 100644 --- a/avr/devices/n11/n11_main.asm +++ b/avr/devices/n11/n11_main.asm @@ -98,7 +98,7 @@ ; rjmp main ; Reset vector rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system reti ; EXT_INT0 - rjmp com2IsrPcint0 ; PCI0 + rjmp uartBitbangIsrPcint0 ; PCI0 reti ; PCI1 reti ; WATCHDOG reti ; ICP1 @@ -148,6 +148,11 @@ firmwareStart: rjmp main #ifdef MODULES_COM .include "modules/com2/defs.asm" .include "modules/com2/main.asm" + .include "modules/com2/buffer.asm" + .include "modules/uart_bitbang/defs.asm" + .include "modules/uart_bitbang/main.asm" + .include "modules/uart_bitbang/bytelevel.asm" + .include "modules/uart_bitbang/packetlevel.asm" #ifdef MODULES_COM_WITH_ADDR_PROTO .include "modules/comproto/defs.asm" .include "modules/comproto/main.asm" diff --git a/avr/devices/n12/n12_boot.asm b/avr/devices/n12/n12_boot.asm index f6b399f..f2c3ad9 100644 --- a/avr/devices/n12/n12_boot.asm +++ b/avr/devices/n12/n12_boot.asm @@ -105,9 +105,9 @@ main: ; *************************************************************************** ; includes -.include "modules/com2/lowlevel.asm" +.include "modules/uart_bitbang/bytelevel.asm" +.include "modules/uart_bitbang/packetlevel.asm" .include "modules/com2/crc.asm" -.include "modules/com2/packets.asm" .include "common/crc8.asm" .include "common/utils_wait_fixed.asm" .include "common/utils_copy_from_flash.asm" diff --git a/avr/devices/n12/n12_defs.asm b/avr/devices/n12/n12_defs.asm index be37989..8712e9f 100644 --- a/avr/devices/n12/n12_defs.asm +++ b/avr/devices/n12/n12_defs.asm @@ -48,15 +48,20 @@ .equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter -.equ COM_DDR_DATA = DDRA -.equ COM_PORT_DATA = PORTA -.equ COM_PIN_DATA = PINA -.equ COM_PINNUM_DATA = PORTA0 +.equ COM_TXD_DDR = DDRA +.equ COM_TXD_DATA = PORTA +.equ COM_TXD_PIN = PORTA0 + +.equ COM_RXD_DDR = DDRA +.equ COM_RXD_INPUT = PINA +.equ COM_RXD_OUTPUT = PORTA +.equ COM_RXD_PIN = PORTA0 + +.equ COM_ATTN_DDR = DDRA +.equ COM_ATTN_INPUT = PINA +.equ COM_ATTN_OUTPUT = PORTA +.equ COM_ATTN_PIN = PORTA1 -.equ COM_DDR_ATTN = DDRA -.equ COM_PORT_ATTN = PORTA -.equ COM_PIN_ATTN = PINA -.equ COM_PINNUM_ATTN = PORTA1 .equ COM_IRQ_ADDR_ATTN = PCMSK0 .equ COM_IRQ_BIT_ATTN = 1 ; bit 1 in PCMSK0 diff --git a/avr/devices/n12/n12_main.asm b/avr/devices/n12/n12_main.asm index 3076d31..7336056 100644 --- a/avr/devices/n12/n12_main.asm +++ b/avr/devices/n12/n12_main.asm @@ -87,7 +87,7 @@ ; rjmp main ; Reset vector rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system reti ; EXT_INT0 - rjmp com2IsrPcint0 ; PCI0 + rjmp uartBitbangIsrPcint0 ; PCI0 reti ; PCI1 reti ; WATCHDOG reti ; ICP1 @@ -137,6 +137,11 @@ firmwareStart: rjmp main #ifdef MODULES_COM .include "modules/com2/defs.asm" .include "modules/com2/main.asm" + .include "modules/com2/buffer.asm" + .include "modules/uart_bitbang/defs.asm" + .include "modules/uart_bitbang/main.asm" + .include "modules/uart_bitbang/bytelevel.asm" + .include "modules/uart_bitbang/packetlevel.asm" #ifdef MODULES_COM_WITH_ADDR_PROTO .include "modules/comproto/defs.asm" .include "modules/comproto/main.asm" diff --git a/avr/devices/n14/n14_boot.asm b/avr/devices/n14/n14_boot.asm index a098163..2a2da8e 100644 --- a/avr/devices/n14/n14_boot.asm +++ b/avr/devices/n14/n14_boot.asm @@ -101,9 +101,9 @@ main: ; *************************************************************************** ; includes -.include "modules/com2/lowlevel.asm" +.include "modules/uart_bitbang/bytelevel.asm" +.include "modules/uart_bitbang/packetlevel.asm" .include "modules/com2/crc.asm" -.include "modules/com2/packets.asm" .include "common/crc8.asm" .include "common/utils_wait_fixed.asm" .include "common/utils_copy_from_flash.asm" diff --git a/avr/devices/n14/n14_defs.asm b/avr/devices/n14/n14_defs.asm index 7636a81..893cbff 100644 --- a/avr/devices/n14/n14_defs.asm +++ b/avr/devices/n14/n14_defs.asm @@ -45,16 +45,6 @@ .equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter -.equ COM_DDR_DATA = DDRB -.equ COM_PORT_DATA = PORTB -.equ COM_PIN_DATA = PINB -.equ COM_PINNUM_DATA = PORTB1 - -.equ COM_DDR_ATTN = DDRB -.equ COM_PORT_ATTN = PORTB -.equ COM_PIN_ATTN = PINB -.equ COM_PINNUM_ATTN = PORTB2 - .equ COM_IRQ_ADDR_ATTN = PCMSK .equ COM_IRQ_BIT_ATTN = PCINT2 ; bit 2 in PCMSK0 (PCINT2) .equ COM_IRQ_GIFR_ATTN = PCIF diff --git a/avr/devices/n14/n14_main.asm b/avr/devices/n14/n14_main.asm index 57ce67f..b3bab99 100644 --- a/avr/devices/n14/n14_main.asm +++ b/avr/devices/n14/n14_main.asm @@ -159,6 +159,12 @@ firmwareStart: rjmp main .include "modules/sk6812/main.asm" #endif +; test +#include "modules/uart_irq/defs.asm" +#include "modules/uart_irq/iface.asm" +#include "modules/uart_irq/iface1.asm" + + ; *************************************************************************** ; data in SRAM diff --git a/avr/modules/flash/bootloader.asm b/avr/modules/flash/bootloader.asm index 8c89d85..7278243 100644 --- a/avr/modules/flash/bootloader.asm +++ b/avr/modules/flash/bootloader.asm @@ -72,12 +72,11 @@ bootLoader: ; rcall watchdogOff ; turn off watchdog timer (sometimes it stays on after reboot) ; setup pins and interrupts - cbi COM_PORT_DATA, COM_PINNUM_DATA ; disable internal pullup for DATA - cbi COM_DDR_DATA, COM_PINNUM_DATA ; set DATA port as input - - cbi COM_PORT_ATTN, COM_PINNUM_ATTN ; disable internal pullup for ATTN - cbi COM_DDR_ATTN, COM_PINNUM_ATTN ; set ATTN port as input + cbi COM_TXD_DATA, COM_TXD_PIN ; disable internal pullup for DATA + cbi COM_TXD_DDR, COM_TXD_PIN ; set DATA port as input + cbi COM_ATTN_OUTPUT, COM_ATTN_PIN ; disable internal pullup for ATTN + cbi COM_ATTN_DDR, COM_ATTN_PIN ; set ATTN port as input sbi LED_DDR, LED_PINNUM ; out cbi LED_PORT, LED_PINNUM ; on diff --git a/avr/modules/flash/recv.asm b/avr/modules/flash/recv.asm index 1631493..152054e 100644 --- a/avr/modules/flash/recv.asm +++ b/avr/modules/flash/recv.asm @@ -80,7 +80,7 @@ flashWaitForSpecificMessage_isLow: ; is low, receive message, check for ldi r17, FLASH_RECVBUFFER_MAXLEN-3 ldi xl, LOW(flashRecvBuffer) ldi xh, HIGH(flashRecvBuffer) - rcall com2ReceivePacketRaw + rcall uartBitbang_ReceivePacketIntoBuffer pop r17 brcc flashWaitForSpecificMessage_waitAttnHigh ldi xl, LOW(flashRecvBuffer) @@ -125,9 +125,9 @@ flashWaitForAttnState1ms: ldi r24, 100 flashWaitForAttnState1ms_loop: push r17 - in r17, COM_PIN_ATTN + in r17, COM_ATTN_INPUT eor r17, r16 - andi r17, (1<