avr: adapted to latest changes in COM2 module (using uartBitbang)

This commit is contained in:
Martin Preuss
2024-10-25 00:15:24 +02:00
parent e232b4adbf
commit 3546c93d23
20 changed files with 174 additions and 66 deletions

View File

@@ -104,9 +104,9 @@ main:
; *************************************************************************** ; ***************************************************************************
; includes ; 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/crc.asm"
.include "modules/com2/packets.asm"
.include "common/crc8.asm" .include "common/crc8.asm"
.include "common/utils_wait_fixed.asm" .include "common/utils_wait_fixed.asm"
.include "common/utils_copy_from_flash.asm" .include "common/utils_copy_from_flash.asm"

View File

@@ -50,15 +50,19 @@
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .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_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
.equ COM_DDR_DATA = DDRA .equ COM_TXD_DDR = DDRA
.equ COM_PORT_DATA = PORTA .equ COM_TXD_DATA = PORTA
.equ COM_PIN_DATA = PINA .equ COM_TXD_PIN = PORTA1
.equ COM_PINNUM_DATA = PORTA1
.equ COM_DDR_ATTN = DDRA .equ COM_RXD_DDR = DDRA
.equ COM_PORT_ATTN = PORTA .equ COM_RXD_INPUT = PINA
.equ COM_PIN_ATTN = PINA .equ COM_RXD_OUTPUT = PORTA
.equ COM_PINNUM_ATTN = PORTA7 .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_ADDR_ATTN = PCMSK0
.equ COM_IRQ_BIT_ATTN = 7 ; bit 7 in PCMSK0 .equ COM_IRQ_BIT_ATTN = 7 ; bit 7 in PCMSK0

View File

@@ -93,7 +93,7 @@
; rjmp main ; Reset vector ; rjmp main ; Reset vector
rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system
reti ; EXT_INT0 reti ; EXT_INT0
rjmp com2IsrPcint0 ; PCI0 rjmp uartBitbangIsrPcint0 ; PCI0
reti ; PCI1 reti ; PCI1
reti ; WATCHDOG reti ; WATCHDOG
reti ; ICP1 reti ; ICP1
@@ -143,6 +143,11 @@ firmwareStart: rjmp main
#ifdef MODULES_COM #ifdef MODULES_COM
.include "modules/com2/defs.asm" .include "modules/com2/defs.asm"
.include "modules/com2/main.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 #ifdef MODULES_COM_WITH_ADDR_PROTO
.include "modules/comproto/defs.asm" .include "modules/comproto/defs.asm"
.include "modules/comproto/main.asm" .include "modules/comproto/main.asm"

View File

@@ -104,9 +104,9 @@ main:
; *************************************************************************** ; ***************************************************************************
; includes ; 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/crc.asm"
.include "modules/com2/packets.asm"
.include "common/crc8.asm" .include "common/crc8.asm"
.include "common/utils_wait_fixed.asm" .include "common/utils_wait_fixed.asm"
.include "common/utils_copy_from_flash.asm" .include "common/utils_copy_from_flash.asm"

View File

@@ -50,15 +50,19 @@
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .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_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
.equ COM_DDR_DATA = DDRA .equ COM_TXD_DDR = DDRA
.equ COM_PORT_DATA = PORTA .equ COM_TXD_DATA = PORTA
.equ COM_PIN_DATA = PINA .equ COM_TXD_PIN = PORTA1
.equ COM_PINNUM_DATA = PORTA1
.equ COM_DDR_ATTN = DDRA .equ COM_RXD_DDR = DDRA
.equ COM_PORT_ATTN = PORTA .equ COM_RXD_INPUT = PINA
.equ COM_PIN_ATTN = PINA .equ COM_RXD_OUTPUT = PORTA
.equ COM_PINNUM_ATTN = PORTA7 .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_ADDR_ATTN = PCMSK0
.equ COM_IRQ_BIT_ATTN = PCINT7 ; bit 7 in PCMSK0 .equ COM_IRQ_BIT_ATTN = PCINT7 ; bit 7 in PCMSK0

View File

@@ -93,7 +93,7 @@
; rjmp main ; Reset vector ; rjmp main ; Reset vector
rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system
reti ; EXT_INT0 reti ; EXT_INT0
rjmp com2IsrPcint0 ; PCI0 rjmp uartBitbangIsrPcint0 ; PCI0
reti ; PCI1 reti ; PCI1
reti ; WATCHDOG reti ; WATCHDOG
reti ; ICP1 reti ; ICP1
@@ -143,6 +143,11 @@ firmwareStart: rjmp main
#ifdef MODULES_COM #ifdef MODULES_COM
.include "modules/com2/defs.asm" .include "modules/com2/defs.asm"
.include "modules/com2/main.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 #ifdef MODULES_COM_WITH_ADDR_PROTO
.include "modules/comproto/defs.asm" .include "modules/comproto/defs.asm"
.include "modules/comproto/main.asm" .include "modules/comproto/main.asm"

View File

@@ -104,9 +104,9 @@ main:
; *************************************************************************** ; ***************************************************************************
; includes ; 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/crc.asm"
.include "modules/com2/packets.asm"
.include "common/crc8.asm" .include "common/crc8.asm"
.include "common/utils_wait_fixed.asm" .include "common/utils_wait_fixed.asm"
.include "common/utils_copy_from_flash.asm" .include "common/utils_copy_from_flash.asm"

View File

@@ -48,15 +48,20 @@
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .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_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_TXD_DDR = DDRA
.equ COM_PORT_ATTN = PORTA .equ COM_TXD_DATA = PORTA
.equ COM_PIN_ATTN = PINA .equ COM_TXD_PIN = PORTA1
.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_ADDR_ATTN = PCMSK0
.equ COM_IRQ_BIT_ATTN = PCINT7 ; bit 7 in PCMSK0 .equ COM_IRQ_BIT_ATTN = PCINT7 ; bit 7 in PCMSK0

View File

@@ -98,7 +98,7 @@
; rjmp main ; Reset vector ; rjmp main ; Reset vector
rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system
reti ; EXT_INT0 reti ; EXT_INT0
rjmp com2IsrPcint0 ; PCI0 rjmp uartBitbangIsrPcint0 ; PCI0
reti ; PCI1 reti ; PCI1
reti ; WATCHDOG reti ; WATCHDOG
reti ; ICP1 reti ; ICP1
@@ -148,6 +148,11 @@ firmwareStart: rjmp main
#ifdef MODULES_COM #ifdef MODULES_COM
.include "modules/com2/defs.asm" .include "modules/com2/defs.asm"
.include "modules/com2/main.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 #ifdef MODULES_COM_WITH_ADDR_PROTO
.include "modules/comproto/defs.asm" .include "modules/comproto/defs.asm"
.include "modules/comproto/main.asm" .include "modules/comproto/main.asm"

View File

@@ -105,9 +105,9 @@ main:
; *************************************************************************** ; ***************************************************************************
; includes ; 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/crc.asm"
.include "modules/com2/packets.asm"
.include "common/crc8.asm" .include "common/crc8.asm"
.include "common/utils_wait_fixed.asm" .include "common/utils_wait_fixed.asm"
.include "common/utils_copy_from_flash.asm" .include "common/utils_copy_from_flash.asm"

View File

@@ -48,15 +48,20 @@
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .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_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
.equ COM_DDR_DATA = DDRA .equ COM_TXD_DDR = DDRA
.equ COM_PORT_DATA = PORTA .equ COM_TXD_DATA = PORTA
.equ COM_PIN_DATA = PINA .equ COM_TXD_PIN = PORTA0
.equ COM_PINNUM_DATA = 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_ADDR_ATTN = PCMSK0
.equ COM_IRQ_BIT_ATTN = 1 ; bit 1 in PCMSK0 .equ COM_IRQ_BIT_ATTN = 1 ; bit 1 in PCMSK0

View File

@@ -87,7 +87,7 @@
; rjmp main ; Reset vector ; rjmp main ; Reset vector
rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system
reti ; EXT_INT0 reti ; EXT_INT0
rjmp com2IsrPcint0 ; PCI0 rjmp uartBitbangIsrPcint0 ; PCI0
reti ; PCI1 reti ; PCI1
reti ; WATCHDOG reti ; WATCHDOG
reti ; ICP1 reti ; ICP1
@@ -137,6 +137,11 @@ firmwareStart: rjmp main
#ifdef MODULES_COM #ifdef MODULES_COM
.include "modules/com2/defs.asm" .include "modules/com2/defs.asm"
.include "modules/com2/main.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 #ifdef MODULES_COM_WITH_ADDR_PROTO
.include "modules/comproto/defs.asm" .include "modules/comproto/defs.asm"
.include "modules/comproto/main.asm" .include "modules/comproto/main.asm"

View File

@@ -101,9 +101,9 @@ main:
; *************************************************************************** ; ***************************************************************************
; includes ; 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/crc.asm"
.include "modules/com2/packets.asm"
.include "common/crc8.asm" .include "common/crc8.asm"
.include "common/utils_wait_fixed.asm" .include "common/utils_wait_fixed.asm"
.include "common/utils_copy_from_flash.asm" .include "common/utils_copy_from_flash.asm"

View File

@@ -45,16 +45,6 @@
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400 .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_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_ADDR_ATTN = PCMSK
.equ COM_IRQ_BIT_ATTN = PCINT2 ; bit 2 in PCMSK0 (PCINT2) .equ COM_IRQ_BIT_ATTN = PCINT2 ; bit 2 in PCMSK0 (PCINT2)
.equ COM_IRQ_GIFR_ATTN = PCIF .equ COM_IRQ_GIFR_ATTN = PCIF

View File

@@ -159,6 +159,12 @@ firmwareStart: rjmp main
.include "modules/sk6812/main.asm" .include "modules/sk6812/main.asm"
#endif #endif
; test
#include "modules/uart_irq/defs.asm"
#include "modules/uart_irq/iface.asm"
#include "modules/uart_irq/iface1.asm"
; *************************************************************************** ; ***************************************************************************
; data in SRAM ; data in SRAM

View File

@@ -72,12 +72,11 @@ bootLoader:
; rcall watchdogOff ; turn off watchdog timer (sometimes it stays on after reboot) ; rcall watchdogOff ; turn off watchdog timer (sometimes it stays on after reboot)
; setup pins and interrupts ; setup pins and interrupts
cbi COM_PORT_DATA, COM_PINNUM_DATA ; disable internal pullup for DATA cbi COM_TXD_DATA, COM_TXD_PIN ; disable internal pullup for DATA
cbi COM_DDR_DATA, COM_PINNUM_DATA ; set DATA port as input cbi COM_TXD_DDR, COM_TXD_PIN ; 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_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 sbi LED_DDR, LED_PINNUM ; out
cbi LED_PORT, LED_PINNUM ; on cbi LED_PORT, LED_PINNUM ; on

View File

@@ -80,7 +80,7 @@ flashWaitForSpecificMessage_isLow: ; is low, receive message, check for
ldi r17, FLASH_RECVBUFFER_MAXLEN-3 ldi r17, FLASH_RECVBUFFER_MAXLEN-3
ldi xl, LOW(flashRecvBuffer) ldi xl, LOW(flashRecvBuffer)
ldi xh, HIGH(flashRecvBuffer) ldi xh, HIGH(flashRecvBuffer)
rcall com2ReceivePacketRaw rcall uartBitbang_ReceivePacketIntoBuffer
pop r17 pop r17
brcc flashWaitForSpecificMessage_waitAttnHigh brcc flashWaitForSpecificMessage_waitAttnHigh
ldi xl, LOW(flashRecvBuffer) ldi xl, LOW(flashRecvBuffer)
@@ -125,9 +125,9 @@ flashWaitForAttnState1ms:
ldi r24, 100 ldi r24, 100
flashWaitForAttnState1ms_loop: flashWaitForAttnState1ms_loop:
push r17 push r17
in r17, COM_PIN_ATTN in r17, COM_ATTN_INPUT
eor r17, r16 eor r17, r16
andi r17, (1<<COM_PINNUM_ATTN) andi r17, (1<<COM_ATTN_PIN)
pop r17 pop r17
breq flashWaitForAttnState1ms_stateReached breq flashWaitForAttnState1ms_stateReached
rcall Utils_WaitFor10MicroSecs ; wait for 10us (R22) rcall Utils_WaitFor10MicroSecs ; wait for 10us (R22)

View File

@@ -29,7 +29,7 @@
flashSendPacketUntilSuccess: flashSendPacketUntilSuccess:
push xl push xl
push xh push xh
rcall COM2_SendPacketWithAttn ; (R16, R17, R21, R22, X) rcall uartBitbang_SendPacket ; (R16, R17, R21, R22, X)
pop xh pop xh
pop xl pop xl
brcc flashSendPacket_error brcc flashSendPacket_error
@@ -50,7 +50,7 @@ flashSendPacket_error:
; REGS: (R16, R17, R18, R22, R24, R25) ; REGS: (R16, R17, R18, R22, R24, R25)
flashWaitForAttnHigh: flashWaitForAttnHigh:
rcall com2WaitForAttnHigh ; (r17, r22) rcall uartBitbang_WaitForAttnHigh ; (r17, r22)
brcc flashWaitForAttnHigh_stillLow brcc flashWaitForAttnHigh_stillLow
ret ret
flashWaitForAttnHigh_stillLow: flashWaitForAttnHigh_stillLow:

View File

@@ -0,0 +1,61 @@
; ***************************************************************************
; copyright : (C) 2024 by Martin Preuss
; email : martin@libchipcard.de
;
; ***************************************************************************
; * This file is part of the project "AqHome". *
; * Please see toplevel file COPYING of that project for license details. *
; ***************************************************************************
; - check motion
; - motion detected?
; - yes:
; - set motion HW bit
; - reset motion timeout counter
; - SW bit set?
; - no:
; - report motion
; - reset motionReportTimeout (use lower value to repeat motion message once)
; - set motion SW bit
; - yes
; - dec motionReportTimeout
; - 0?
; - report current SW state
; - reset motionReportTimeout (use higher value since motion should already be known)
; - no:
; - clear motion hw bit
; - dec motionTimeout
; - 0?
; - yes:
; - clear SW motion bit
; - report no motion
.equ MOTION_STATE_MOTION_HW_BIT = 0
.equ MOTION_STATE_MOTION_SW_BIT = 1
.dseg
motionDataBegin:
motionState: .byte 1
motionTimeout: .byte 1
motionReportTimeout: .byte 1
motionDataEnd:
.cseg
Motion_Init:
Motion_Fini:
Motion_Run:
Motion_Every100ms:
ret

View File

@@ -184,5 +184,19 @@ uartBitbang_WaitForDataHigh:
; ---------------------------------------------------------------------------
; @routine uartBitbang_WaitForAttnHigh
;
; Wait up to 1ms for data pin to become high
; @return CFLAG set if okay, clear otherwise
; @clobbers R17, R22
uartBitbang_WaitForAttnHigh:
UART_BB_M_WAIT_FOR_PIN_HIGH COM_ATTN_INPUT, COM_ATTN_PIN
ret
; @end