avr/uart_hw, t03: cross messaging now works!!
This commit is contained in:
@@ -36,11 +36,6 @@ ComOnUart0_Init:
|
||||
rcall UART_HW_Uart0_Init ; (R16, R17, X)
|
||||
ldi r16, COMONUART0_IFACENUM
|
||||
std Y+NET_IFACE_OFFS_IFACENUM, r16
|
||||
|
||||
ldi r16, UART_HW_READMODE_IDLE
|
||||
std Y+UART_HW_IFACE_OFFS_READMODE, r16
|
||||
ldi r16, UART_HW_WRITEMODE_IDLE
|
||||
std Y+UART_HW_IFACE_OFFS_WRITEMODE, r16
|
||||
|
||||
sbi COM_IRQ_ADDR_ATTN, COM_IRQ_BIT_ATTN ; enable pin change irq for ATTN line
|
||||
in r16, GIMSK ; enable pin change irq PCIE0 or PCIE1
|
||||
@@ -369,6 +364,9 @@ comOnUart0RunWriteIdle:
|
||||
rjmp comOnUart0RunWriteIdle_end ; yes, line busy, jmp
|
||||
|
||||
rcall UART_HW_Uart0_SetAttnLow ; reserve bus as soon as possible
|
||||
Utils_WaitNanoSecs COM_BIT_LENGTH, 0, r22 ; wait for one bit duration
|
||||
Utils_WaitNanoSecs COM_BIT_LENGTH, 0, r22 ; wait for one bit duration
|
||||
|
||||
rcall NET_Buffer_Locate ; (R17)
|
||||
rcall ComOnUart0_SendBuffer ; (R16, R17)
|
||||
rcall NET_Interface_GetNextOutgoingMsgNum ; take msg from queue (R17, R18, X)
|
||||
|
||||
@@ -167,9 +167,11 @@ UART_HW_Uart1_RxCharIsr_econtent:
|
||||
ldi r16, NET_IFACE_OFFS_ERR_CONTENT_LOW
|
||||
rjmp UART_HW_Uart1_RxCharIsr_incCounterAndEnterSkipping
|
||||
UART_HW_Uart1_RxCharIsr_overrun:
|
||||
ldi r16, NET_IFACE_OFFS_ERR_NOBUF_LOW
|
||||
; ldi r16, NET_IFACE_OFFS_ERR_NOBUF_LOW
|
||||
ldi r16, NET_IFACE_OFFS_ERR_MISSED_LOW
|
||||
UART_HW_Uart1_RxCharIsr_incCounterAndEnterSkipping:
|
||||
ldi r17, UART_HW_READMODE_SKIPPING
|
||||
ldi r16, NET_IFACE_OFFS_HANDLED_LOW
|
||||
UART_HW_Uart1_RxCharIsr_incCounterAndEnterMode:
|
||||
rcall NET_Interface_IncCounter16 ; (R24, R25)
|
||||
std Y+UART_HW_IFACE_OFFS_READMODE, r17 ; set read mode
|
||||
|
||||
@@ -369,9 +369,18 @@ ttyOnUart1RunReading:
|
||||
; @clobbers R16
|
||||
|
||||
ttyOnUart1RunSkipping:
|
||||
ldi r17, 0xff
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_READBUFNUM
|
||||
std Y+UART_HW_IFACE_OFFS_READBUFNUM, r17
|
||||
cp r16, r17
|
||||
breq ttyOnUart1RunSkipping_checkTimer
|
||||
rcall NET_Buffer_ReleaseByNum ; (R16, X)
|
||||
|
||||
ttyOnUart1RunSkipping_checkTimer:
|
||||
ldd r16, Y+NET_IFACE_OFFS_READTIMER
|
||||
cpi r16, TTYONUART1_SKIPTIME
|
||||
brcs ttyOnUart1RunSkipping_end
|
||||
; leave skip mode (enter idle)
|
||||
ldi r16, UART_HW_READMODE_IDLE
|
||||
std Y+UART_HW_IFACE_OFFS_READMODE, r16
|
||||
ttyOnUart1RunSkipping_end:
|
||||
@@ -388,6 +397,8 @@ ttyOnUart1RunSkipping_end:
|
||||
ttyOnUart1RunMsgReceived:
|
||||
ldi r17, 0xff
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_READBUFNUM
|
||||
cp r16, r17
|
||||
breq comOnUart1RunMsgReceived_enterIdle
|
||||
std Y+UART_HW_IFACE_OFFS_READBUFNUM, r17
|
||||
rcall NET_AddIncomingMsgNum ; (R17, R18, X)
|
||||
brcs comOnUart1RunMsgReceived_enterIdle
|
||||
@@ -396,7 +407,6 @@ ttyOnUart1RunMsgReceived:
|
||||
ldi r16, NET_IFACE_OFFS_ERR_NOBUF_LOW
|
||||
rcall NET_Interface_IncCounter16 ; (R24, R25)
|
||||
comOnUart1RunMsgReceived_enterIdle:
|
||||
rcall UART_HW_Interface_EnsureReadBuffer ; (R16, R17, R24, R25, X)
|
||||
ldi r17, UART_HW_READMODE_IDLE
|
||||
std Y+UART_HW_IFACE_OFFS_READMODE, r17 ; set read mode
|
||||
ret
|
||||
|
||||
Reference in New Issue
Block a user