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