Init, buffer TX and RX procedures debug complete

This commit is contained in:
boykovra 2024-07-11 15:41:51 +03:00
parent 2a422f7a39
commit 8d5f374035
5 changed files with 123 additions and 60 deletions

View File

@ -48,7 +48,7 @@ LSR_OE EQU 0x02 ; Overrun Error
LSR_PE EQU 0x04 ; Parity Error
LSR_FE EQU 0x08 ; Framing Error
LSR_BI EQU 0x10 ; Break Interrupt
LSR_THRE EQU 0x20 ; Transmitter Holding Register
LSR_THRE EQU 0x20 ; Transmitter Holding Register Empty
LSR_TEMT EQU 0x40 ; Transmitter empty
LSR_RCVE EQU 0x80 ; Error in receiver FIFO
@ -115,12 +115,29 @@ UF_T_FND
; Test slot, A - ISA Slot no. 0 or 1
UT_T_SLOT
; check IER hi bits, will be 0
LD (ISA.ISA_SLOT), A
LD HL, REG_IER
CALL UART_READ
AND 0xF0
RET NZ
; check SCR register
LD DE,0x5555
CALL CHK_SCR
RET NZ
LD DE,0xAAAA
CALL CHK_SCR
RET
CHK_SCR
LD HL, REG_SCR
CALL UART_WRITE
CALL UART_READ
CP D
RET
; ------------------------------------------------------
; Init UART device TL16C550
@ -133,13 +150,13 @@ UART_INIT
LD A, FCR_TR8 | FCR_FIFO ; Enable FIFO buffer, trigger to 14 byte
LD (IX+_FCR),A
XOR A
LD (IX+_IER), A ; Disable interrupts
LD (IX+_IER), A ; Disable interrupts
; Set 8bit word and Divisor for speed
LD A, LCR_DLAB | LCR_WL8
LD (IX+_LCR), A ; Enable Baud rate latch
LD (IX+_LCR), A ; Enable Baud rate latch
LD A, DIVISOR
LD (IX+_DLL), A ; 8 - 115200
LD (IX+_DLL), A ; 8 - 115200
XOR A
LD (IX+_DLM), A
LD A, LCR_WL8 ; 8bit word, disable latch
@ -175,24 +192,29 @@ UART_WRITE
; Out: CF=1 - tr not ready, CF=0 ready
; ------------------------------------------------------
UART_WAIT_TR
PUSH AF, BC, HL
CALL ISA.ISA_OPEN
LD BC, 100
CALL UART_WAIT_TR_INT
CALL ISA.ISA_CLOSE
RET
;
; Wait, without open/close ISA
;
UART_WAIT_TR_INT
PUSH AF, BC, HL
LD BC, 500
LD HL, REG_LSR
WAIT_TR_BZY
LD A,(HL)
AND A, LSR_THRE
JR NZ,WAIT_TR_RDY
CALL UTIL.DELAY_1MS
CALL UTIL.DELAY_100uS ; ~11 bit tx delay
DEC BC
LD A, C
OR B
JR NZ,WAIT_TR_BZY
SCF
WAIT_TR_RDY
CALL ISA.ISA_CLOSE
POP HL, BC, AF
RET
@ -211,7 +233,7 @@ UTB_NOT_R
RET
; ------------------------------------------------------
; char uart_tx_buffer(char* tbuff, int size)
; Transmit buffer
; Inp: HL -> buffer, BC - size
; Out: CF=0 - Ok, CF=1 - Timeout
; ------------------------------------------------------
@ -225,8 +247,8 @@ UTX_NEXT
OR C
JR Z,UTX_EMP
; check transmitter ready
CALL UART_WAIT_TR
JR C, UTX_EMP
CALL UART_WAIT_TR_INT
JR C, UTX_TXNR
; transmitt byte
LD A,(HL)
INC HL
@ -234,22 +256,54 @@ UTX_NEXT
DEC BC
JR UTX_NEXT
; CF=0
XOR A
UTX_EMP
UTX_EMP
AND A
UTX_TXNR
CALL ISA.ISA_CLOSE
POP HL,DE,BC
RET
; ------------------------------------------------------
; Transmit zero ended string
; Inp: HL -> buffer
; Out: CF=0 - Ok, CF=1 - Timeout
; ------------------------------------------------------
UART_TX_STRING
PUSH DE,HL
LD DE, REG_THR
CALL ISA.ISA_OPEN
UTXS_NEXT
LD A,(HL)
AND A
JR Z,UTXS_END
; check transmitter ready
CALL UART_WAIT_TR_INT
JR C, UTXS_TXNR
; transmitt byte
LD A,(HL)
INC HL
LD (DE),A
JR UTXS_NEXT
; CF=0
UTXS_END
AND A
UTXS_TXNR
CALL ISA.ISA_CLOSE
POP HL,DE
RET
; ------------------------------------------------------
; Empty receiver FIFO buffer
; ------------------------------------------------------
UART_EMPTY_RS
PUSH AF, HL
CALL ISA.ISA_OPEN
LD A, FCR_TR8 | FCR_RESET_RX | FCR_FIFO
PUSH DE, HL
LD E, FCR_TR8 | FCR_RESET_RX | FCR_FIFO
LD HL, REG_FCR
LD (HL), A
CALL ISA.ISA_CLOSE
POP HL, AF
CALL UART_WRITE
POP HL, DE
RET
; ------------------------------------------------------
@ -259,7 +313,7 @@ UART_EMPTY_RS
; ------------------------------------------------------
UART_WAIT_RS1
PUSH BC,HL
WAIT_MS+* LD BC,0x0000
WAIT_MS+* LD BC,0x2000
JR UVR_NEXT
UART_WAIT_RS
PUSH BC,HL
@ -274,6 +328,11 @@ UVR_NEXT
OR C
JR NZ,UVR_NEXT
UVR_TO
IF TRACE
PUSH AF,BC,DE,HL
PRINTLN MSG_RCV_EMPTY
POP HL,DE,BC,AF
ENDIF
SCF
UVR_OK
POP HL,BC
@ -288,15 +347,14 @@ ESP_RESET
CALL ISA.ISA_OPEN
LD HL, REG_MCR
LD A, MCR_RST | MCR_RTS ; 0110b ESP -PGM=1, -RST=0, -RTS=0
LD (HL), A
LD A, MCR_RST ;| MCR_RTS ; -OUT1=0 -> RESET ESP
LD (REG_MCR), A
CALL UTIL.DELAY_1MS
;LD HL, REG_MCR
LD A, MCR_AFE | MCR_RTS ; 0x22 -RST = 1 -RTS=0 AutoFlow enabled
LD A, MCR_AFE | MCR_RTS ; 0x22 -OUT1=1 RTS=1 AutoFlow enabled
LD (HL), A
CALL ISA.ISA_CLOSE
; wait 2s for ESP firmware boot
LD HL,2000
CALL UTIL.DELAY
@ -337,8 +395,8 @@ UART_TX_CMD
CALL UART_EMPTY_RS
; HL - Buffer, BC - Size
CALL UTIL.STRLEN
CALL UART_TX_BUFFER
;CALL UTIL.STRLEN
CALL UART_TX_STRING
JR NC, UTC_STRT_RX
; error, transmit timeout
LD A, RES_TX_TIMEOUT
@ -413,6 +471,10 @@ UTC_RET
POP HL, DE, BC
RET
IF TRACE
MSG_RCV_EMPTY
DB "Receiver is empty!",0
ENDIF
; Buffer to receive response from ESP
RS_BUFF DS RS_BUFF_SIZE, 0

View File

@ -26,17 +26,14 @@ ISA_RST EQU 0x80
; Reset ISA device
; ------------------------------------------------------
ISA_RESET
PUSH AF,BC,HL
LD BC, PORT_ISA
LD A,ISA_RST | ISA_AEN ; RESET=1 AEN=1
OUT (C), A
CALL UTIL.DELAY_1MS
XOR A
OUT (C), A ; RESET=0 AEN=0
LD HL,20
LD HL,100
CALL UTIL.DELAY
POP HL,BC,AF
RET
; ------------------------------------------------------

View File

@ -15,7 +15,7 @@ DELAY
LD HL,20
DELAY_NXT
CALL SUB_DELAY
CALL DELAY_1MS_INT
DEC HL
LD A,H
OR L
@ -24,7 +24,9 @@ DELAY_NXT
POP HL,BC,AF
RET
SUB_DELAY
DELAY_1MS_INT
LD BC,400
SBD_NXT
DEC BC
@ -36,13 +38,20 @@ SBD_NXT
; TODO: Do it with timer
DELAY_1MS
PUSH BC
CALL SUB_DELAY
CALL DELAY_1MS_INT
POP BC
RET
DELAY_100uS
PUSH BC
LD BC,40
CALL SBD_NXT
POP BC
RET
; ------------------------------------------------------
; Calc length of zero ended string
; Inp: HL - pointer to string

View File

@ -190,7 +190,7 @@ CMD_SET_SPEED
DB "AT+UART_CUR=115200,8,1,0,3\r\n",0
CMD_ECHO_OFF
DB "ATE0\r\n",0
CMD_STATION_MODE
CMD_STATION_MODE
DB "AT+CWMODE=1\r\n",0
CMD_NO_SLEEP
DB "AT+SLEEP=0\r\n",0

View File

@ -6,7 +6,7 @@
; Set to 1 to turn debug ON with DeZog VSCode plugin
; Set to 0 to compile .EXE
DEBUG EQU 1
DEBUG EQU 0
; Set to 1 to output TRACE messages
TRACE EQU 1
@ -75,30 +75,25 @@ START
PRINTLN WCOMMON.MSG_ESP_RESET
CALL WIFI.ESP_RESET
CALL WIFI.UART_EMPTY_RS
LD HL,REG_SCR
LD E,0x55
CALL WIFI.UART_WRITE
LD E, FCR_TR8 | FCR_FIFO
LD HL, REG_FCR
CALL WIFI.UART_WRITE
; IF TRACE
; ; Dump, DLB=0 registers
; LD BC, 0x0800
; CALL DUMP_REGS
; Debug, dump all registers
LD BC, 0x0800
CALL DUMP_REGS
; ; Dump, DLAB=1 registers
; LD HL, REG_LCR
; LD E, LCR_DLAB | LCR_WL8
; CALL WIFI.UART_WRITE
; LD BC, 0x0210
; CALL DUMP_REGS
; Dump, page2
LD HL, REG_LCR
LD E, LCR_DLAB | LCR_WL8
CALL WIFI.UART_WRITE
LD BC, 0x0310
CALL DUMP_REGS
LD HL, REG_LCR
LD E, LCR_WL8
CALL WIFI.UART_WRITE
; LD HL, REG_LCR
; LD E, LCR_WL8
; CALL WIFI.UART_WRITE
; ENDIF
; Turn local echo Off
CALL WCOMMON.INIT_ESP