avr: added modules spi_sw, 23LC512, 25LC256
This commit is contained in:
10
avr/modules/eeprom/0BUILD
Normal file
10
avr/modules/eeprom/0BUILD
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml?>
|
||||
|
||||
<gwbuild>
|
||||
|
||||
<subdirs>
|
||||
25LC256
|
||||
</subdirs>
|
||||
|
||||
</gwbuild>
|
||||
|
||||
10
avr/modules/eeprom/25LC256/0BUILD
Normal file
10
avr/modules/eeprom/25LC256/0BUILD
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml?>
|
||||
|
||||
<gwbuild>
|
||||
|
||||
<extradist>
|
||||
main.asm
|
||||
</extradist>
|
||||
|
||||
</gwbuild>
|
||||
|
||||
224
avr/modules/eeprom/25LC256/main.asm
Normal file
224
avr/modules/eeprom/25LC256/main.asm
Normal file
@@ -0,0 +1,224 @@
|
||||
; ***************************************************************************
|
||||
; copyright : (C) 2026 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. *
|
||||
; ***************************************************************************
|
||||
|
||||
#ifndef AQH_AVR_MODULES_EE_25LC256_MAIN_ASM
|
||||
#define AQH_AVR_MODULES_EE_25LC256_MAIN_ASM
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; defs
|
||||
|
||||
.equ EE_25LC256_SIZE = 32768
|
||||
|
||||
.equ EE_25LC256_CMD_READ = 0x03
|
||||
.equ EE_25LC256_CMD_WRITE = 0x02
|
||||
.equ EE_25LC256_CMD_WRDI = 0x04
|
||||
.equ EE_25LC256_CMD_WREN = 0x06
|
||||
.equ EE_25LC256_CMD_RDSR = 0x05
|
||||
.equ EE_25LC256_CMD_WRSR = 0x01
|
||||
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; data
|
||||
|
||||
.dseg
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; code
|
||||
|
||||
.cseg
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine EE_25LC256_Init @global
|
||||
;
|
||||
; @param X destination address
|
||||
|
||||
EE_25LC256_Init:
|
||||
sbi EEPROMCS_DDR, EEPROMCS_PIN ; EEPROMCS: output
|
||||
sbi EEPROMCS_OUTPUT, EEPROMCS_PIN ; EEPROMCS high
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine EE_25LC256_StartWriting @global
|
||||
;
|
||||
; @param X destination address
|
||||
; @clobbers r16-r19, r23
|
||||
|
||||
EE_25LC256_StartWriting:
|
||||
ldi r16, EE_25LC256_CMD_WRITE
|
||||
rjmp ee25LC256StartTransfer ; (r16-r19, r23)
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine EE_25LC256_StartReading @global
|
||||
;
|
||||
; @param X source address
|
||||
; @clobbers r16-r19, r23
|
||||
|
||||
EE_25LC256_StartReading:
|
||||
ldi r16, EE_25LC256_CMD_READ
|
||||
rjmp ee25LC256StartTransfer ; (r16-r19, r23)
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine EE_25LC256_EndTransfer @global
|
||||
;
|
||||
; @clobbers none
|
||||
|
||||
EE_25LC256_EndTransfer:
|
||||
sbi EEPROMCS_OUTPUT, EEPROMCS_PIN ; CS high
|
||||
bigcall SPISW_MasterStop ; (none)
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine EE_25LC256_ReadBytes @global
|
||||
;
|
||||
; @param X source address
|
||||
; @param Y destination address
|
||||
; @param R25:r24 number of bytes to read
|
||||
; @clobbers r16-r19, r23-r25, Y
|
||||
|
||||
EE_25LC256_ReadBytes:
|
||||
rcall EE_25LC256_StartReading ; (r16-r19, r23)
|
||||
|
||||
EE_25LC256_ReadBytes_loop:
|
||||
ldi r16, 0xff
|
||||
bigcall SPISW_MasterExchangeByteMode0 ; (r17, r18, r19, r23)
|
||||
st Y+, r16
|
||||
sbiw r25:r24, 1
|
||||
brne EE_25LC256_ReadBytes_loop
|
||||
rcall EE_25LC256_EndTransfer
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine EE_25LC256_WriteBytes @global
|
||||
;
|
||||
; @param X destination address
|
||||
; @param Y source address
|
||||
; @param R25:r24 number of bytes to write
|
||||
; @clobbers r16-r19, r23-r25, Y
|
||||
|
||||
EE_25LC256_WriteBytes:
|
||||
rcall EE_25LC256_WriteEnable ; (r16-r19, r23)
|
||||
rcall EE_25LC256_StartWriting ; (r16-r19, r23)
|
||||
EE_25LC256_WriteBytes_loop:
|
||||
ld r16, Y+
|
||||
bigcall SPISW_MasterExchangeByteMode0 ; (r17, r18, r19, r23)
|
||||
sbiw r25:r24, 1
|
||||
brne EE_25LC256_WriteBytes_loop
|
||||
rcall EE_25LC256_EndTransfer ; (none)
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine EE_25LC256_ReadStatusRegister
|
||||
;
|
||||
; @return r16 mode register
|
||||
; @clobbers r17-r19, r23
|
||||
|
||||
EE_25LC256_ReadStatusRegister:
|
||||
ldi r16, EE_25LC256_CMD_RDSR
|
||||
rcall ee25LC256StartCommand
|
||||
clr r16
|
||||
bigcall SPISW_MasterExchangeByteMode0 ; (r17, r18, r19, r23)
|
||||
push r16
|
||||
rcall EE_25LC256_EndTransfer
|
||||
pop r16
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine EE_25LC256_WriteEnable
|
||||
;
|
||||
; @clobbers r16-r19, r23
|
||||
|
||||
EE_25LC256_WriteEnable:
|
||||
ldi r16, EE_25LC256_CMD_WREN
|
||||
rcall ee25LC256StartCommand ; (r16-r19, r23)
|
||||
rcall EE_25LC256_EndTransfer ; (none)
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ee25LC256StartTransfer
|
||||
;
|
||||
; @param r16 command
|
||||
; @param X address
|
||||
; @clobbers r16-r19, r23
|
||||
|
||||
ee25LC256StartTransfer:
|
||||
rcall ee25LC256StartCommand
|
||||
|
||||
; send address
|
||||
mov r16, xh
|
||||
bigcall SPISW_MasterExchangeByteMode0 ; (r17, r18, r19, r23)
|
||||
mov r16, xl
|
||||
bigcall SPISW_MasterExchangeByteMode0 ; (r17, r18, r19, r23)
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ee25LC256StartCommand
|
||||
;
|
||||
; @param r16 command
|
||||
; @clobbers r16-r19, r23
|
||||
|
||||
ee25LC256StartCommand:
|
||||
push r16
|
||||
bigcall SPISW_MasterStart
|
||||
pop r16
|
||||
nop
|
||||
sbi EEPROMCS_DDR, EEPROMCS_PIN ; CS: output
|
||||
cbi EEPROMCS_OUTPUT, EEPROMCS_PIN ; CS low
|
||||
nop
|
||||
|
||||
; send command
|
||||
bigcall SPISW_MasterExchangeByteMode0 ; (r17, r18, r19, r23)
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user