avr: updated uartfd0 (copied from uartfd1)
This commit is contained in:
@@ -12,9 +12,10 @@
|
||||
|
||||
|
||||
|
||||
|
||||
.dseg
|
||||
|
||||
uartFd0_iface: .bytes UARTFD_IFACE_SIZE
|
||||
uartFd0_iface: .byte UARTFD_IFACE_SIZE
|
||||
|
||||
|
||||
|
||||
@@ -34,13 +35,16 @@ UARTFD0_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 uartFd0StartReading
|
||||
rcall uartFd0StartRx
|
||||
|
||||
ret
|
||||
@@ -73,11 +77,20 @@ UARTFD0_Run:
|
||||
ldi yh, HIGH(uartFd0_iface)
|
||||
clr r22
|
||||
|
||||
rcall uartFd0RunRead ; (r16, r17, r18, r19, r20, r24, r25, X, Z)
|
||||
sbci r22, 0
|
||||
push r15
|
||||
in r15, SREG
|
||||
|
||||
cli ; disable irqs
|
||||
rcall uartFd0RunRead ; (r16, r17, r18, r19, r20, r24, r25, X, Z)
|
||||
sbci r22, 0
|
||||
out SREG, r15 ; probably enable irqs
|
||||
|
||||
cli ; disable irqs
|
||||
rcall uartFd0RunWrite ; (r16, r17, r18, r19, r24, r25, X)
|
||||
sbci r22, 0
|
||||
|
||||
rcall uartFd0RunWrite ; (r16, r17, r18, r19, r24, r25, X)
|
||||
sbci r22, 0
|
||||
out SREG, r15 ; probably enable irqs
|
||||
pop r15
|
||||
|
||||
tst r22
|
||||
clc
|
||||
@@ -202,7 +215,8 @@ uartFd0RunRead:
|
||||
rcall uartFd0CheckOverrun ; (r16, r24, r25)
|
||||
rcall uartFd0CheckHwErr ; (r16, r24, r25)
|
||||
rcall uartFd0CheckBadMsgSize ; (r16, r24, r25)
|
||||
rcall uartFd0CheckSkipping ; (R16, X)
|
||||
rcall uartFd0CheckSkipping ; (r16, X)
|
||||
rcall uartFd0SetSkippingSignal ; (r16, r17)
|
||||
|
||||
; clear error flags
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
@@ -218,17 +232,41 @@ uartFd0RunRead:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine uartFd0SetSkippingSignal
|
||||
;
|
||||
; @param Y pointer to interface data in SRAM
|
||||
; @clobbers r16 (r17)
|
||||
|
||||
uartFd0SetSkippingSignal:
|
||||
#ifdef MODULES_LED_SIGNAL
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
andi r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
|
||||
brne uartFd0SetSkippingSignal_skipping
|
||||
ldi r16, T03_FLAGS_I1_SKIPPING
|
||||
rcall LedSignal_ClrFlag ; (r17)
|
||||
rjmp uartFd0SetSkippingSignal_ret
|
||||
uartFd0SetSkippingSignal_skipping:
|
||||
ldi r16, T03_FLAGS_I1_SKIPPING
|
||||
rcall LedSignal_SetFlag ; (r17)
|
||||
#endif
|
||||
uartFd0SetSkippingSignal_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine uartFd0CheckSkipping
|
||||
;
|
||||
; @param Y pointer to interface data in SRAM
|
||||
; @return CFLAG set if something done
|
||||
; @clobbers r16 (X)
|
||||
|
||||
uartFd0CheckSkipping:
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
andi r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
|
||||
breq uartFd0CheckSkipping_ret
|
||||
|
||||
ldd r16, Y+NET_IFACE_OFFS_READTIMER
|
||||
cpi r16, UARTFD_SKIPPING_TIME
|
||||
brcs uartFd0CheckSkipping_ret
|
||||
@@ -239,6 +277,7 @@ uartFd0CheckSkipping:
|
||||
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
|
||||
cbr r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
|
||||
std Y+UARTFD_IFACE_OFFS_STATUS, r16
|
||||
|
||||
rcall uartFd0RestartReading ; (R16, X)
|
||||
out SREG, r15
|
||||
pop r15
|
||||
@@ -384,6 +423,19 @@ uartFd0RestartReading:
|
||||
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 0
|
||||
|
||||
out SREG, r15 ; probably enable irqs
|
||||
pop r15
|
||||
|
||||
; rcall uartFd0StopRx
|
||||
; nop
|
||||
; rcall uartFd0StartRx
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -396,14 +448,17 @@ uartFd0RestartReading:
|
||||
; @clobbers r16, r17, r18, X, Z (r19, r20, r24, r25)
|
||||
|
||||
uartFd0FinishReading:
|
||||
; check message
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
adiw xh:xl, UARTFD_IFACE_OFFS_RBUFFER
|
||||
rcall NETMSG_CheckMessageInBuffer ; (R16, R17, R18, R19, R20, X)
|
||||
brcc uartFd0FinishReading_errorCrc
|
||||
; allocate buffer for storage
|
||||
rcall NET_Buffer_Alloc ; R16=number, X=ptr (R16, R17, X)
|
||||
brcc uartFd0FinishReading_errorMem
|
||||
ldd r18, Y+NET_IFACE_OFFS_IFACENUM
|
||||
andi r18, 0x0f
|
||||
ld r17, X
|
||||
andi r17, 0xf0
|
||||
or r17, r18
|
||||
@@ -418,11 +473,15 @@ uartFd0FinishReading_copyLoop:
|
||||
st X+, r18
|
||||
dec r17
|
||||
brne uartFd0FinishReading_copyLoop
|
||||
; add new buffer to incoming list
|
||||
rcall NET_AddIncomingMsgNum
|
||||
brcs uartFd0FinishReading_msgSaved
|
||||
rcall NET_Buffer_ReleaseByNum ; (R16, X)
|
||||
rjmp uartFd0FinishReading_errorMem
|
||||
uartFd0FinishReading_msgSaved:
|
||||
#ifdef MODULES_LED_ACTIVITY
|
||||
rcall LedActivity_Trigger ; (r16)
|
||||
#endif
|
||||
ldi r16, NET_IFACE_OFFS_PACKETSIN_LOW
|
||||
rjmp uartFd0FinishReading_incCounter
|
||||
uartFd0FinishReading_errorCrc:
|
||||
@@ -542,7 +601,8 @@ uartFd0StartTx:
|
||||
; @clobbers R16
|
||||
|
||||
uartFd0StopTx:
|
||||
M_UARTFD_STOP_TX 0
|
||||
; M_UARTFD_STOP_TX 0
|
||||
M_UARTFD_STOP_TXIRQS 0
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -682,6 +742,3 @@ UARTFD0_TxCharIsr:
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user