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