Fixed baud rates

This commit is contained in:
Alex Thissen 2024-02-09 10:42:52 +00:00
parent 788ae82d30
commit 014f85f226
1 changed files with 33 additions and 53 deletions

View File

@ -113,12 +113,12 @@ SER_OPEN:
stz TxPtrIn stz TxPtrIn
stz TxPtrOut stz TxPtrOut
; source period is 1 us
lda #%00011000
sta TIM4CTLA
ldy #SER_PARAMS::BAUDRATE ldy #SER_PARAMS::BAUDRATE
lda (ptr1),y lda (ptr1),y
; Source period is 1 us
ldy #%00011000 ; ENABLE_RELOAD|ENABLE_COUNT|AUD_1
ldx #1 ldx #1
cmp #SER_BAUD_62500 cmp #SER_BAUD_62500
beq setbaudrate beq setbaudrate
@ -139,6 +139,10 @@ SER_OPEN:
cmp #SER_BAUD_2400 cmp #SER_BAUD_2400
beq setbaudrate beq setbaudrate
ldx #68
cmp #SER_BAUD_1800
beq setbaudrate
ldx #103 ldx #103
cmp #SER_BAUD_1200 cmp #SER_BAUD_1200
beq setbaudrate beq setbaudrate
@ -147,65 +151,48 @@ SER_OPEN:
cmp #SER_BAUD_600 cmp #SER_BAUD_600
beq setbaudrate beq setbaudrate
; clock = 6 * 15625 ; Source period is 4 us
ldx #%00011010 ldy #%00011011 ; ENABLE_RELOAD|ENABLE_COUNT|AUD_8
stx TIM4CTLA
ldx #12 ldx #51
cmp #SER_BAUD_7200
beq setbaudrate
ldx #25
cmp #SER_BAUD_3600
beq setbaudrate
ldx #207
stx TIM4BKUP
; clock = 4 * 15625
ldx #%00011100
cmp #SER_BAUD_300 cmp #SER_BAUD_300
beq setprescaler beq setbaudrate
; clock = 6 * 15625 ldx #103
ldx #%00011110
cmp #SER_BAUD_150 cmp #SER_BAUD_150
beq setprescaler beq setbaudrate
; clock = 1 * 15625 ldx #115
ldx #%00011111 cmp #SER_BAUD_134_5
stx TIM4CTLA beq setbaudrate
cmp #SER_BAUD_75
beq baudsuccess
ldx #141 ldx #141
cmp #SER_BAUD_110 cmp #SER_BAUD_110
beq setbaudrate beq setbaudrate
; clock = 2 * 15625 ; Source period is 32 us
ldx #%00011010 ldy #%00011101 ; ENABLE_RELOAD|ENABLE_COUNT|AUD_32
stx TIM4CTLA
ldx #68 ldx #51
cmp #SER_BAUD_1800 cmp #SER_BAUD_75
beq setbaudrate beq setbaudrate
; clock = 6 * 15625 ldx #68
ldx #%00011110 cmp #SER_BAUD_56_875
stx TIM4CTLA beq setbaudrate
ldx #231
cmp #SER_BAUD_134_5 ldx #77
cmp #SER_BAUD_50
beq setbaudrate beq setbaudrate
lda #SER_ERR_BAUD_UNAVAIL lda #SER_ERR_BAUD_UNAVAIL
ldx #0 ; return value is char ldx #0 ; return value is char
rts rts
setprescaler:
stx TIM4CTLA
bra baudsuccess
setbaudrate: setbaudrate:
sty TIM4CTLA
stx TIM4BKUP stx TIM4BKUP
baudsuccess:
ldx #TXOPEN|PAREVEN ldx #TXOPEN|PAREVEN
stx contrl stx contrl
ldy #SER_PARAMS::DATABITS ; Databits ldy #SER_PARAMS::DATABITS ; Databits
@ -368,15 +355,9 @@ SER_IRQ:
stz RxPtrIn stz RxPtrIn
stz RxPtrOut stz RxPtrOut
@noBreak: @noBreak:
lda contrl bra @exit0
ora #RXINTEN|RESETERR
sta SERCTL
bra @IRQexit
@rx_irq: @rx_irq:
lda contrl
ora #RXINTEN|RESETERR
sta SERCTL
txa txa
ldx RxPtrIn ldx RxPtrIn
sta RxBuffer,x sta RxBuffer,x
@ -392,10 +373,7 @@ SER_IRQ:
sta RxPtrIn sta RxPtrIn
lda #$80 lda #$80
tsb SerialStat tsb SerialStat
lda contrl bra @exit0
ora #RXINTEN|RESETERR
sta SERCTL
bra @IRQexit
@tx_irq: @tx_irq:
ldx TxPtrOut ; Have all bytes been sent? ldx TxPtrOut ; Have all bytes been sent?
@ -418,6 +396,8 @@ SER_IRQ:
beq @exit1 beq @exit1
bvs @exit1 bvs @exit1
stz TxDone stz TxDone
@exit0:
lda contrl lda contrl
ora #RXINTEN|RESETERR ; Re-enable receive interrupt ora #RXINTEN|RESETERR ; Re-enable receive interrupt
sta SERCTL sta SERCTL