avr: t03 now at least writes tty message once!
This commit is contained in:
@@ -33,8 +33,6 @@ TtyOnUart1_Init:
|
||||
rcall UART_HW_Uart1_Init ; (R16, R17, X)
|
||||
ldi r16, TTYONUART1_IFACENUM
|
||||
std Y+UART_HW_IFACE_OFFS_IFACENUM, r16
|
||||
ldi r16, UART_HW_MODE_IDLE | UART_HW_MODE_W_IDLE ; start in full idle mode
|
||||
std Y+UART_HW_IFACE_OFFS_MODE, r16
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -106,19 +104,17 @@ TtyOnUart1_TxUdreIsr:
|
||||
in r15, SREG
|
||||
push r16
|
||||
push r17
|
||||
push r18
|
||||
push xl
|
||||
push xh
|
||||
push yl
|
||||
push yh
|
||||
ldi yl, LOW(ttyOnUart1_iface)
|
||||
ldi yh, HIGH(ttyOnUart1_iface)
|
||||
rcall UART_HW_Uart1_TxUdreIsr ; (R16, R17, R18, X)
|
||||
pop yh
|
||||
pop yl
|
||||
pop xh
|
||||
pop xl
|
||||
pop r18
|
||||
push xl
|
||||
push xh
|
||||
push yl
|
||||
push yh
|
||||
ldi yl, LOW(ttyOnUart1_iface)
|
||||
ldi yh, HIGH(ttyOnUart1_iface)
|
||||
rcall UART_HW_Uart1_TxUdreIsr ; (R16, R17, X)
|
||||
pop yh
|
||||
pop yl
|
||||
pop xh
|
||||
pop xl
|
||||
pop r17
|
||||
pop r16
|
||||
out SREG, r15
|
||||
@@ -157,7 +153,31 @@ TtyOnUart1_TxCharIsr:
|
||||
pop r15
|
||||
reti
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
TtyOnUart1_SendBuffer:
|
||||
push r15
|
||||
in r15, SREG
|
||||
cli
|
||||
ldd r17, Y+UART_HW_IFACE_OFFS_WRITEMODE
|
||||
cpi r17, UART_HW_WRITEMODE_IDLE
|
||||
breq TtyOnUart1_SendBuffer_setBuffer
|
||||
pop r15
|
||||
out SREG, r15
|
||||
clc
|
||||
ret
|
||||
TtyOnUart1_SendBuffer_setBuffer:
|
||||
rcall UART_HW_Interface_SetWriteBuffer
|
||||
ldi r17, UART_HW_WRITEMODE_WRITING
|
||||
std Y+UART_HW_IFACE_OFFS_WRITEMODE, r17
|
||||
rcall UART_HW_Uart1_StartTx ; (R16)
|
||||
pop r15
|
||||
out SREG, r15
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
@@ -166,11 +186,16 @@ TtyOnUart1_TxCharIsr:
|
||||
; @clobbers all
|
||||
|
||||
TtyOnUart1_Run:
|
||||
ldi yl, LOW(ttyOnUart1_iface)
|
||||
ldi yh, HIGH(ttyOnUart1_iface)
|
||||
push r15
|
||||
in r15, SREG
|
||||
cli
|
||||
ldi yl, LOW(ttyOnUart1_iface)
|
||||
ldi yh, HIGH(ttyOnUart1_iface)
|
||||
|
||||
rcall ttyOnUart1RunWriteModes
|
||||
rcall ttyOnUart1RunReadModes
|
||||
rcall ttyOnUart1RunWriteModes
|
||||
; rcall ttyOnUart1RunReadModes
|
||||
pop r15
|
||||
out SREG, r15
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -182,49 +207,26 @@ TtyOnUart1_Run:
|
||||
; @clobbers all, !Y
|
||||
|
||||
ttyOnUart1RunWriteModes:
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_MODE ; handle write functions
|
||||
andi r16, UART_HW_MODE_WRITEMASK
|
||||
cpi r16, UART_HW_MODE_W_IDLE
|
||||
breq ttyOnUart1RunWIdle
|
||||
cpi r16, UART_HW_MODE_WRITING
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_WRITEMODE ; handle write functions
|
||||
cpi r16, UART_HW_WRITEMODE_WRITING
|
||||
breq ttyOnUart1RunWriting
|
||||
cpi r16, UART_HW_MODE_WAITBUFFEREMPTY
|
||||
cpi r16, UART_HW_WRITEMODE_WAITBUFFEREMPTY
|
||||
breq ttyOnUart1RunWaitBufferEmpty
|
||||
cpi r16, UART_HW_MODE_WRITEBUFFEREMPTY
|
||||
cpi r16, UART_HW_WRITEMODE_WRITEBUFFEREMPTY
|
||||
breq ttyOnUart1RunWriteBufferEmpty
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ttyOnUart1RunWIdle
|
||||
;
|
||||
; @clobbers all, !Y
|
||||
|
||||
ttyOnUart1RunWIdle:
|
||||
rcall UART_HW_InterfaceGetNextOutgoingMsgNum ; (R17, R18, X)
|
||||
brcc ttyOnUart1RunWIdle_end
|
||||
rcall UART_HW_Interface_WriteSetBuffer ; (r16, r19, X)
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_MODE
|
||||
cbr r16, UART_HW_MODE_WRITEMASK
|
||||
ori r16, UART_HW_MODE_WRITING
|
||||
std Y+UART_HW_IFACE_OFFS_MODE, r16
|
||||
rcall ttyOnUart1RunWriting ; fill ringbuffer
|
||||
rcall UART_HW_Uart1_StartTx ; enable transceiver and interrupts
|
||||
ttyOnUart1RunWIdle_end:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ttyOnUart1RunWriting
|
||||
;
|
||||
; @clobbers all, !Y
|
||||
; @clobbers
|
||||
|
||||
ttyOnUart1RunWriting:
|
||||
rjmp UART_HW_Interface_RunWriting ; (R16, R17, R18, R19, R20, R21, X)
|
||||
; TODO: check for timeout etc.
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
@@ -232,19 +234,11 @@ ttyOnUart1RunWriting:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ttyOnUart1RunWaitBufferEmpty
|
||||
;
|
||||
; @clobbers all, !Y
|
||||
; @clobbers none
|
||||
|
||||
ttyOnUart1RunWaitBufferEmpty:
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_STATUS
|
||||
sbrs r16, UART_HW_STATUS_UNDERRUN_BIT ; underrun bit set?
|
||||
ret ; return if bit still clear
|
||||
cbr r16, (1<<UART_HW_STATUS_UNDERRUN_BIT)
|
||||
std Y+UART_HW_IFACE_OFFS_STATUS, r16
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_MODE ; change mode to WRITEBUFFEREMPTY and go handle that
|
||||
cbr r16, UART_HW_MODE_WRITEMASK
|
||||
ori r16, UART_HW_MODE_WRITEBUFFEREMPTY
|
||||
std Y+UART_HW_IFACE_OFFS_MODE, r16
|
||||
rjmp ttyOnUart1RunWriteBufferEmpty
|
||||
; TODO: check for timeout etc.
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
@@ -252,15 +246,20 @@ ttyOnUart1RunWaitBufferEmpty:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ttyOnUart1RunWriteBufferEmpty
|
||||
;
|
||||
; @clobbers all, !Y
|
||||
; @clobbers R16, R17, X
|
||||
|
||||
ttyOnUart1RunWriteBufferEmpty:
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_MODE
|
||||
cbr r16, UART_HW_MODE_WRITEMASK
|
||||
ori r16, UART_HW_MODE_W_IDLE
|
||||
std Y+UART_HW_IFACE_OFFS_MODE, r16
|
||||
rcall UART_HW_Uart1_StopTx ; disable transceiver and interrupts
|
||||
rjmp ttyOnUart1RunWIdle
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_WRITEBUFNUM
|
||||
ldi r17, 0xff
|
||||
cp r16, r17
|
||||
breq ttyOnUart1RunWriteBufferEmpty_setIdle
|
||||
std Y+UART_HW_IFACE_OFFS_WRITEBUFNUM, r17
|
||||
rcall UART_HW_FixedBuffers_ReleaseByNum ; (R16, X)
|
||||
ttyOnUart1RunWriteBufferEmpty_setIdle:
|
||||
rcall UART_HW_Uart1_StopTx ; disable transceiver and interrupts (R16)
|
||||
ldi r16, UART_HW_WRITEMODE_IDLE
|
||||
std Y+UART_HW_IFACE_OFFS_WRITEMODE, r16
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
@@ -271,65 +270,8 @@ ttyOnUart1RunWriteBufferEmpty:
|
||||
; @clobbers all, !Y
|
||||
|
||||
ttyOnUart1RunReadModes:
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_MODE ; handle read functions
|
||||
andi r16, UART_HW_MODE_READMASK
|
||||
cpi r16, UART_HW_MODE_IDLE
|
||||
breq ttyOnUart1RunIdle
|
||||
cpi r16, UART_HW_MODE_READING
|
||||
breq ttyOnUart1RunReading
|
||||
cpi r16, UART_HW_MODE_SKIPPING
|
||||
breq ttyOnUart1RunSkipping
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ttyOnUart1RunIdle
|
||||
;
|
||||
; @clobbers all, !Y
|
||||
|
||||
ttyOnUart1RunIdle:
|
||||
rcall UART_HW_Uart1_StartRx
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_MODE
|
||||
cbr r16, UART_HW_MODE_READMASK
|
||||
ori r16, UART_HW_MODE_READING
|
||||
std Y+UART_HW_IFACE_OFFS_MODE, r16
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ttyOnUart1RunReading
|
||||
;
|
||||
; @clobbers all, !Y
|
||||
|
||||
ttyOnUart1RunReading:
|
||||
rjmp UART_HW_Interface_RunRead ; (R16, R17, R18, R18, R19, R20, R21, X)
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ttyOnUart1RunSkipping
|
||||
;
|
||||
; @clobbers all, !Y
|
||||
|
||||
ttyOnUart1RunSkipping:
|
||||
rcall UART_HW_Uart1_Flush ; (R16)
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_READTIMER
|
||||
cpi r16, TTYONUART1_SKIPTIME
|
||||
brcs ttyOnUart1RunSkipping_end
|
||||
ldd r16, Y+UART_HW_IFACE_OFFS_MODE
|
||||
cbr r16, UART_HW_MODE_READMASK
|
||||
ori r16, UART_HW_MODE_READING
|
||||
std Y+UART_HW_IFACE_OFFS_MODE, r16
|
||||
ttyOnUart1RunSkipping_end:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user