6502-OS/system/spi.s65
2023-11-13 19:14:39 +01:00

104 lines
2.5 KiB
Plaintext

;********************************************************************************
; @module SPI
; @type driver
; @details
; @depends IO-W65C22N
;********************************************************************************
.include "system/system.s65"
.include "programs/print_slow.s65"
.ifndef INCLUDE_SPI
INCLUDE_SPI = 1
.bss
SPI_PAGES_WRITTEN: .res 1
SPI_BYTES_WRITTEN: .res 1
.segment "SPI"
SPI_CODE_START: ; .res $1000
lda $1000
sta $1000
lda $1000
sta $1000
lda $1000
sta $1000
lda IO1 + IO::RA
lda IO1 + IO::RA
bra SPI_CODE_START
; jsr lcd_clear
; PrintSlow msg,20
; jmp home
; msg:
; .asciiz "YO DAS WAR SPI"
.code
.struct SPI_P_Pins
; VIA addresses
DDR_a .word ; address of the data direction register
R_a .word ; address of the register
; pin mask
SCLK_p .byte ; Serial Clock
POCI_p .byte ; Peripheral Out / Controller In
PICO_p .byte ; Peripheral In / Controller Out
CSB_p .byte ; Chip Select
; settings
CPOL .byte ; Clock Polarity
CPHA .byte ; Clock Phase
.endstruct
;********************************************************************************
; @function Initialize the IO Adapter for SPI
; @param ARG0-1 Address of the SPI_Pins struct
;********************************************************************************
.proc spi_p_init
stz SPI_PAGES_WRITTEN
stz SPI_BYTES_WRITTEN
; todo USE MASKS
; set Shift register to shift in under external clock on CB1
lda #IO::ACR::SR_SIN_PHIE
sta SPI_IO + IO::ACR
; enable SR interrupts
lda #(IO::IRQ::IRQ | IO::IRQ::SR)
sta SPI_IO + IO::IER
DEBUG_LED_ON 1
rts
.endproc
.proc spi_p_read
DEBUG_LED_ON 0
; print received byte
lda SPI_IO + IO::SR
sta SPI_CODE_START,x
inc SPI_BYTES_WRITTEN
jsr lcd_char
rts
.endproc
;********************************************************************************
; @function Read bytes
; @param X Number of bytes to send
; @param ARG0-1 Address of the SPI_Pins struct
; @param ARG2-3 Address of the first byte
;********************************************************************************
.proc recv_data
.endproc
;********************************************************************************
; @function Send bytes
; @param X Number of bytes to send
; @param ARG0-1 Address of the SPI_Pins struct
; @param ARG2-3 Address of the first byte
;********************************************************************************
.proc send_data
.endproc
_send_byte:
.endif