improved uartfd1.
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
; this is the tested version!
|
||||
|
||||
|
||||
|
||||
.dseg
|
||||
|
||||
uartFd1_iface: .byte UARTFD_IFACE_SIZE
|
||||
@@ -35,13 +36,16 @@ UARTFD1_Init:
|
||||
std Y+UARTFD_IFACE_OFFS_WBUFNUM, r16
|
||||
clr r16
|
||||
std Y+UARTFD_IFACE_OFFS_WBUFLEFT, r16
|
||||
|
||||
std Y+UARTFD_IFACE_OFFS_RBUFUSED, r16
|
||||
std Y+UARTFD_IFACE_OFFS_RBUFLEFT, r16
|
||||
std Y+UARTFD_IFACE_OFFS_STATUS, r16
|
||||
|
||||
M_UARTFD_SET_BAUDRATE 0
|
||||
M_UARTFD_SET_CHARFORMAT 0
|
||||
|
||||
; always receive!
|
||||
rcall uartFd1StartReading
|
||||
rcall uartFd1StartRx
|
||||
|
||||
ret
|
||||
@@ -213,6 +217,7 @@ uartFd1RunRead:
|
||||
rcall uartFd1CheckHwErr ; (r16, r24, r25)
|
||||
rcall uartFd1CheckBadMsgSize ; (r16, r24, r25)
|
||||
rcall uartFd1CheckSkipping ; (r16, X)
|
||||
rcall uartFd1SetSkippingSignal ; (r16, r17)
|
||||
|
||||
; clear error flags
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
@@ -228,6 +233,30 @@ uartFd1RunRead:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine uartFd1SetSkippingSignal
|
||||
;
|
||||
; @param Y pointer to interface data in SRAM
|
||||
; @clobbers r16 (r17)
|
||||
|
||||
uartFd1SetSkippingSignal:
|
||||
#ifdef MODULES_LED_SIGNAL
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
andi r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
|
||||
brne uartFd1SetSkippingSignal_skipping
|
||||
ldi r16, T03_FLAGS_I1_SKIPPING
|
||||
rcall LedSignal_ClrFlag ; (r17)
|
||||
rjmp uartFd1SetSkippingSignal_ret
|
||||
uartFd1SetSkippingSignal_skipping:
|
||||
ldi r16, T03_FLAGS_I1_SKIPPING
|
||||
rcall LedSignal_SetFlag ; (r17)
|
||||
#endif
|
||||
uartFd1SetSkippingSignal_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine uartFd1CheckSkipping
|
||||
;
|
||||
@@ -238,6 +267,7 @@ uartFd1CheckSkipping:
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
andi r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
|
||||
breq uartFd1CheckSkipping_ret
|
||||
|
||||
ldd r16, Y+NET_IFACE_OFFS_READTIMER
|
||||
cpi r16, UARTFD_SKIPPING_TIME
|
||||
brcs uartFd1CheckSkipping_ret
|
||||
@@ -248,6 +278,10 @@ uartFd1CheckSkipping:
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
cbr r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
|
||||
std Y+UARTFD_IFACE_OFFS_STATUS, r16
|
||||
|
||||
ldi r16, T03_FLAGS_I1_RESTARTED
|
||||
rcall LedSignal_SetFlag
|
||||
|
||||
rcall uartFd1RestartReading ; (R16, X)
|
||||
out SREG, r15
|
||||
pop r15
|
||||
@@ -393,6 +427,19 @@ uartFd1RestartReading:
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
cbr r16, (1<<UARTFD_IFACE_STATUS_BIT_OVERRUN) | (1<<UARTFD_IFACE_STATUS_BIT_HWERR) | (1<<UARTFD_IFACE_STATUS_BIT_BADMSGSIZE)
|
||||
std Y+UARTFD_IFACE_OFFS_STATUS, r16
|
||||
|
||||
push r15
|
||||
in r15, SREG
|
||||
|
||||
cli ; disable irqs
|
||||
M_UARTFD_FLUSH_IN 1
|
||||
|
||||
out SREG, r15 ; probably enable irqs
|
||||
pop r15
|
||||
|
||||
; rcall uartFd1StopRx
|
||||
; nop
|
||||
; rcall uartFd1StartRx
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -430,6 +477,8 @@ uartFd1FinishReading_copyLoop:
|
||||
rcall NET_AddIncomingMsgNum
|
||||
brcs uartFd1FinishReading_msgSaved
|
||||
rcall NET_Buffer_ReleaseByNum ; (R16, X)
|
||||
ldi r16, T03_FLAGS_ADDIN
|
||||
rcall LedSignal_SetFlag ; (r17)
|
||||
rjmp uartFd1FinishReading_errorMem
|
||||
uartFd1FinishReading_msgSaved:
|
||||
ldi r16, NET_IFACE_OFFS_PACKETSIN_LOW
|
||||
@@ -551,7 +600,8 @@ uartFd1StartTx:
|
||||
; @clobbers R16
|
||||
|
||||
uartFd1StopTx:
|
||||
M_UARTFD_STOP_TX 1
|
||||
; M_UARTFD_STOP_TX 1
|
||||
M_UARTFD_STOP_TXIRQS 1
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user