;;******************************************************************************** ;; @file ;; @brief SPI Perpiheral ;; @details ;; Support being a peripheral SPI device. ;; @depends IO-W65C22N ;;******************************************************************************** .ifndef INCLUDE_SPI INCLUDE_SPI = 1 .include "system/system.h65" ;;******************************************************************************** ;; @brief Support being a peripheral SPI device ;; @details ;; This requires the data line to be hooked up to `CB2` and the clock to `CB1`. ;; The VIA will be set to shift in the data into the shift register under the external clock. ;; @ingroup drivers ;; @see via_hardware_bug "VIA external clock bug" ;;******************************************************************************** .scope spi_p ;; Address of the VIA that is used for the spi connection SPI_IO = IO2 Import spi_p, init, irq_handler, status, buffer_size, recv_size ImportZp spi_p, buffer_ptr Import spi_p, begin_read, end_read, irq_read_byte, recv_bytes Import spi_p, begin_write, end_write, irq_write_byte, sent_bytes ;;******************************************************************************** ;; @brief Status of a SPI transfer ;;******************************************************************************** .enum STATUS XFER_SIZEL = %10000000 XFER_SIZEH = %01000000 XFER = %00000001 DONE = %00000000 ERROR = %00100000 .endenum .endscope .endif ; guard ; .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