; *************************************************************************** ; copyright : (C) 2025 by Martin Preuss ; email : martin@libchipcard.de ; ; *************************************************************************** ; * This file is part of the project "AqHome". * ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** ; *************************************************************************** ; defines .equ SPIHW_MODE_SPEED0_BIT = 0 ; 00=CLK/4, 01=CLK/16 .equ SPIHW_MODE_SPEED1_BIT = 1 ; 10=CLK/64, 11=CLK/128 .equ SPIHW_MODE_DOUBLESPEED_BIT = 2 ; 1=double speed from SPIHW_MODE_SPEED0/1_BIT .equ SPIHW_MODE_DATAORDER_BIT = 3 ; 1=LSB first, 0=MSB first .equ SPIHW_MODE_CPOL_BIT = 4 ; 0=leading edge rising/trailing edge falling .equ SPIHW_MODE_CPHA_BIT = 5 ; 0=sample on leading edge, setup on trailing edge ; *************************************************************************** ; data .dseg ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine SPIHW_Init @global ; SPIHW_Init: sbi SPIHW_SS0_DDR, SPIHW_SS0_PIN ; SS0= output sbi SPIHW_SS1_DDR, SPIHW_SS1_PIN ; SS1= output sbi SPIHW_SS2_DDR, SPIHW_SS2_PIN ; SS2= output sec ret ; @end ; --------------------------------------------------------------------------- ; @routine SPIHW_Fini @global ; SPIHW_Fini: ret ; @end ; --------------------------------------------------------------------------- ; @routine SPIHW_MasterStart @global ; ; Start SPI hardware master with the given mode (see @ref SPIHW_MODE_SPEED0_BIT ; and others). ; @param r16 mode ; @param r17 device num (0-7) ; @clobbers r17 SPIHW_MasterStart: ; setup pins sbi SPIHW_SS_DDR, SPIHW_SS_PIN ; SS : output sbi SPIHW_MOSI_DDR, SPIHW_MOSI_PIN ; MOSI: output cbi SPIHW_MISO_DDR, SPIHW_MISO_PIN ; MISO: input sbi SPIHW_SCK_DDR, SPIHW_SCK_PIN ; SCK: output ; select device sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high rcall spiHwSelectDevice ; (none) ; cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low ; setup SPCR clr r17 sbrc r16, SPIHW_MODE_DATAORDER_BIT sbr r17, (1<