start spi work

This commit is contained in:
matthias@rpi 2023-11-09 12:10:00 +01:00
parent e0ba885132
commit ae17478c14
2 changed files with 48 additions and 56 deletions

View File

@ -27,15 +27,16 @@
; LCD ; LCD
; .include "utility.asm6502" ; .include "utility.asm6502"
LCD_IO = IO1 LCD_IO = IO1
.include "lcd.s65" .include "system/lcd.s65"
; Keypad Reading ; Keypad Reading
KP_IO = IO2 KP_IO = IO2
.include "keypad.s65" .include "system/keypad.s65"
; SPI ; SPI
SPI_IO = IO1 SPI_IO = IO2
.include "system/spi.s65" .include "system/spi.s65"
; Printer ; Printer
.include "printer.s65" .include "programs/printer.s65"
.include "programs/print_slow.s65"
; Digital Humidity and Temerature Sensor ; Digital Humidity and Temerature Sensor
; .include "dht.s65" ; .include "dht.s65"
@ -48,20 +49,20 @@ nmi:
jsr lcd_char jsr lcd_char
rti rti
irq: irq:
IRQ_VAR = 0
; read IRFs, while bit 7 ist set handle interrupts ; read IRFs, while bit 7 ist set handle interrupts
; Print str_irq
@irq_io1: @irq_io1:
; todo use a reserved address instead of 0 lda SPI_IO+IO::IFR
lda IO1+IO::IFR sta IRQ_VAR
sta 0 bbr7 IRQ_VAR,@irq_io2
bbr7 0,@irq_io2 bbs2 IRQ_VAR,@irq_spi_p ; check SR
bbs2 0,@irq_spi_p ; check SR
@irq_io2: @irq_io2:
lda IO2+IO::IFR ; lda IO2+IO::IFR
sta 0 ; sta IRQ_VAR
bbr7 0,@irq_return ; bbr7 IRQ_VAR,@irq_return
bbs4 0,@irq_keypad ; check CB1 ; bbs4 IRQ_VAR,@irq_keypad ; check CB1
; this should never be reached ; this should never be reached
jsr lcd_clear
Print str_irq_unknown Print str_irq_unknown
; force reset interrupt flags ; force reset interrupt flags
lda #$ff lda #$ff
@ -86,7 +87,7 @@ irq:
reset: reset:
jsr lcd_init jsr lcd_init
jsr kp_init ; jsr kp_init
jsr spi_p_init jsr spi_p_init
@ -114,53 +115,34 @@ reset:
.endproc .endproc
.proc home .proc home
.macro wait jsr rb_keypad_read
wait:
stz 1
stz 2
.repeat 2
nop
.endrepeat
inc 1
bne wait
inc 2
bne wait
.endmacro
; jsr rb_keypad_read
lda KB_LAST
beq home beq home
stz KB_LAST
; beq home ; beq home
cmp #'A' cmp #'A'
jeq printer jeq printer
cmp #'B' cmp #'B'
jeq SPI_CODE_START
; jeq dht_request ; jeq dht_request
cmp #'C' cmp #'C'
jeq print_1 jeq print_1
cmp #'D' cmp #'D'
jeq print_2 jeq print_2
cmp '4'
bra debug
cmp #'*' ; print home menu again if not visible (message 1 and 2 jmp to home) cmp #'*' ; print home menu again if not visible (message 1 and 2 jmp to home)
jeq return_home jeq return_home
jmp home jmp home
debug:
DEBUG_LED_ON 0
jmp home
.endproc .endproc
print_1: print_1:
Print message_1 jsr lcd_clear
PrintSlow message_1,10
jmp home jmp home
print_2: print_2:
Print message_2 jsr lcd_clear
PrintSlow message_2,10
jmp home jmp home
.segment "RODATA" .segment "RODATA"
@ -172,7 +154,8 @@ message_2:
.asciiz "================" .asciiz "================"
message_menu: message_menu:
.byte "<A> Printer " .byte "<A> Printer "
.byte "<B> Temperatur " ; .byte "<B> Temperatur "
.byte "<B> Run from SPI"
.byte "<C> Text 1 " .byte "<C> Text 1 "
.asciiz "<D> Text 2 " .asciiz "<D> Text 2 "
str_irq: str_irq:

View File

@ -9,28 +9,34 @@
.ifndef INCLUDE_SPI .ifndef INCLUDE_SPI
INCLUDE_SPI = 1 INCLUDE_SPI = 1
.segment "CODE" .segment "CODE"
SPI_CODE_START = $3000
SPI_PAGES_WRITTEN = $2fff
SPI_BYTES_WRITTEN = $2ffe
.struct SPI_P_Pins .struct SPI_P_Pins
; VIA addresses ; VIA addresses
DDR_a .word ; address of the data direction register DDR_a .word ; address of the data direction register
R_a .word ; address of the register R_a .word ; address of the register
; pin mask ; pin mask
SCLK_p .byte ; Serial Clock SCLK_p .byte ; Serial Clock
POCI_p .byte ; Peripheral Out / Controller In POCI_p .byte ; Peripheral Out / Controller In
PICO_p .byte ; Peripheral In / Controller Out PICO_p .byte ; Peripheral In / Controller Out
CSB_p .byte ; Chip Select CSB_p .byte ; Chip Select
; settings ; settings
CPOL .byte ; Clock Polarity CPOL .byte ; Clock Polarity
CPHA .byte ; Clock Phase CPHA .byte ; Clock Phase
.endstruct .endstruct
;******************************************************************************** ;********************************************************************************
; @function Initialize the IO Adapter for SPI ; @function Initialize the IO Adapter for SPI
; @param ARG0-1 Address of the SPI_Pins struct ; @param ARG0-1 Address of the SPI_Pins struct
;******************************************************************************** ;********************************************************************************
.proc spi_p_init .proc spi_p_init
stz SPI_PAGES_WRITTEN
stz SPI_BYTES_WRITTEN
; todo USE MASKS ; todo USE MASKS
; set Shift register to shift in under external clock on CB1 ; set Shift register to shift in under external clock on CB1
lda #IO::ACR::SR_SIN_PHIE lda #IO::ACR::SR_SIN_PHIE
@ -39,13 +45,16 @@ INCLUDE_SPI = 1
; enable SR interrupts ; enable SR interrupts
lda #(IO::IRQ::IRQ | IO::IRQ::SR) lda #(IO::IRQ::IRQ | IO::IRQ::SR)
sta SPI_IO + IO::IER sta SPI_IO + IO::IER
DEBUG_LED_ON 1
rts rts
.endproc .endproc
.proc spi_p_read .proc spi_p_read
DEBUG_LED_ON 0
; print received byte ; print received byte
lda SPI_IO + IO::SR lda SPI_IO + IO::SR
jsr lcd_char jsr lcd_char
inc SPI_BYTES_WRITTEN
rts rts
.endproc .endproc