diff src/eeprom_rs232.inc @ 631:185ba2f91f59

3.09 beta 1 release
author heinrichsweikamp
date Fri, 28 Feb 2020 15:45:07 +0100
parents 237931377539
children 4050675965ea
line wrap: on
line diff
--- a/src/eeprom_rs232.inc	Fri Feb 21 10:51:36 2020 +0100
+++ b/src/eeprom_rs232.inc	Fri Feb 28 15:45:07 2020 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File eeprom_rs232.inc                     combined next generation V3.06.1
+;   File eeprom_rs232.inc                     combined next generation V3.08.8
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -9,40 +9,305 @@
 ;  2011-08-03 : [mH] moving from OSTC code
 
 
-write_int_eeprom	macro	eeprom_address
-	movlw	eeprom_address
-	call	write_int_eeprom_1
+; --------------------------------------------------------------------------------------------
+;           EEPROM read & write Macros
+; --------------------------------------------------------------------------------------------
+
+
+; read 1 byte from EEPROM to memory
+;
+; eeprom_address: address:2 containing source address in EEPROM
+; memory_address: address:2 containing target address in memory
+;
+EEPROM_CC_READ		macro	eeprom_address, memory_address
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM
+	movwf	EEADRH					; set     bank in EEPROM
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     start address in EEPROM
+	call	read_eeprom				; read from EEPROM
+	movff	EEDATA,memory_address	; store to memory
+	endm
+
+
+; read 2 bytes from EEPROM to memory, both bytes must be in same EEPROM bank
+;
+; eeprom_address: address:2 containing start address in EEPROM
+; memory_address: address:2 containing start address in memory
+;
+EEPROM_II_READ		macro	eeprom_address, memory_address
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM
+	movwf	EEADRH					; set     bank in EEPROM
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     start address in EEPROM
+	lfsr	FSR1,memory_address		; set start address in memory
+	movlw	.2						; read  2 bytes
+	call	eeprom_read_common		; execute read
+	endm
+
+
+; read 3 bytes from EEPROM to memory, all bytes must be in same EEPROM bank
+;
+; eeprom_address: address:2 containing start address in EEPROM
+; memory_address: address:2 containing start address in memory
+;
+EEPROM_TT_READ		macro	eeprom_address, memory_address
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM
+	movwf	EEADRH					; set     bank in EEPROM
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     start address in EEPROM
+	lfsr	FSR1,memory_address		; set start address in memory
+	movlw	.3						; read  3 bytes
+	call	eeprom_read_common		; execute read
+	endm
+
+
+; read a range of bytes from EEPROM to memory, all bytes must be in same EEPROM bank
+;
+; eeprom_address: address:2 containing start address in EEPROM
+; memory_address: address:2 containing start address in memory (bank safe)
+; range         : number of bytes to read (1-256), will wrap-around staying in same EEPROM bank!
+;
+EEPROM_RR_READ		macro	eeprom_address, memory_address, range
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM
+	movwf	EEADRH					; set     bank in EEPROM
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     start address in EEPROM
+	lfsr	FSR1,memory_address		; set start address in memory
+	movlw	low(range)				; set size of range to read
+	call	eeprom_read_common		; execute read
+	endm
+
+
+; write 1 byte from memory to EEPROM
+;
+; memory_address: address:2 containing source      address in memory (bank safe)
+; eeprom_address: address:2 containing destination address in EEPROM
+;
+EEPROM_CC_WRITE		macro	memory_address, eeprom_address
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM
+	movwf	EEADRH					; set     bank in EEPROM
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     start address in EEPROM
+	movff	memory_address,EEDATA	; copy byte to EEPROM data register
+	call	write_eeprom			; execute write
+	endm
+
+
+; write 2 bytes from memory to EEPROM, both bytes must go into the same EEPROM bank
+;
+; memory_address: address:2 containing start address in memory (bank safe)
+; eeprom_address: address:2 containing start address in EEPROM
+;
+EEPROM_II_WRITE		macro	memory_address, eeprom_address
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM
+	movwf	EEADRH					; set     bank in EEPROM
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     start address in EEPROM
+	lfsr	FSR1,memory_address		; set start address in memory
+	movlw	.2						; write 2 bytes
+	call	eeprom_write_common		; execute write
+	endm
+
+
+; write 3 bytes from memory to EEPROM, all bytes must go into the same EEPROM bank
+;
+; memory_address: address:2 containing start address in memory (bank safe)
+; eeprom_address: address:2 containing start address in EEPROM
+;
+EEPROM_TT_WRITE		macro	memory_address, eeprom_address
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM
+	movwf	EEADRH					; set     bank in EEPROM
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     start address in EEPROM
+	lfsr	FSR1,memory_address		; set start address in memory
+	movlw	.3						; write 3 bytes
+	call	eeprom_write_common		; execute write
+	endm
+
+
+; write a range of bytes from memory to EEPROM, all bytes must go into the same EEPROM bank
+;
+; memory_address: address:2 containing start address in memory (bank safe)
+; eeprom_address: address:2 containing start address in EEPROM
+; range         : number of bytes to write (1-256), will wrap-around staying in same EEPROM bank!
+;
+EEPROM_RR_WRITE		macro	memory_address, eeprom_address, range
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM
+	movwf	EEADRH					; set     bank in EEPROM
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     start address in EEPROM
+	lfsr	FSR1,memory_address		; set start address in memory
+	movlw	low(range)				; set size of range to write
+	call	eeprom_write_common		; execute write
+	endm
+
+
+; set up EEPROM address register for subsequent read/write operations
+;
+; eeprom_address: address:2 containing the EEPROM address to set up
+;
+EEPROM_SET_ADDRESS	macro	eeprom_address							; Set EEPROM address
+	movlw	HIGH(eeprom_address)	; extract bank in EEPROM		; for subsequent calls to
+	movwf	EEADRH					; set     EEPROM bank			; write_eeprom / read_eeprom
+	movlw	LOW (eeprom_address)	; extract start address in EEPROM
+	movwf	EEADR					; set     EEPROM cell
 	endm
 
-read_int_eeprom		macro	eeprom_address
-	movlw	eeprom_address
-	call	read_int_eeprom_1
+
+; --------------------------------------------------------------------------------------------
+;       EEPROM Defines
+; --------------------------------------------------------------------------------------------
+
+#DEFINE DECO_DATA_VALID_TOKEN			0x55		; deco data valid
+#DEFINE DECO_DATA_INVALID_TOKEN			0xAA		; deco data invalid
+
+
+; --------------------------------------------------------------------------------------------
+;       EEPROM Memory Map
+; --------------------------------------------------------------------------------------------
+
+;       Label						EEPROM Address	 Size  Description
+
+; bank 1+2: settings & options
+; ----------------------------						  +--- do not change the position of these data!
+#DEFINE eeprom_ostc_serial				0x000		; | 2  OSTC dive computer unique serial number
+#DEFINE eeprom_num_dives				0x002		; | 2  total number of dives
+#DEFINE eeprom_log_pointer				0x004		; | 3  pointer used for accessing log data in external flash
+#DEFINE eeprom_battery_gauge			0x007		; | 6  backup storage for the battery gauge meter
+#DEFINE eeprom_log_offset				0x00D		; | 2  offset between OSTC dive counting and user's counting
+#DEFINE eeprom_battery_type				0x00F		; | 1  battery type inside the OSTC
+#DEFINE eeprom_options_version			0x010		;   2  options version identifier
+;										0x012		;   8  unused
+#DEFINE eeprom_options_storage			0x01A		; 486  backup storage for the options
+
+
+; bank 2: deco data backup
+; ------------------------
+#DEFINE eeprom_deco_data_validity		0x200		;   1  deco data validity
+#DEFINE eeprom_deco_data_version		0x201		;   1  deco data format version
+#DEFINE eeprom_deco_data_timestamp		0x202		;   6  date/time of deco data
+#DEFINE eeprom_deco_data_surfinterval	0x208		;   2  surface interval
+;										0x20A		;   6  unused
+#DEFINE eeprom_deco_data_bank3			0x210		;   9  desaturation status
+;										0x219		;   1  unused
+#DEFINE eeprom_deco_data_bank5			0x21A		;   4  CNS
+;										0x21E		;   2  unused
+#DEFINE eeprom_deco_data_bank7			0x220		; 128  tissue pressures
+; 										0x2A0		;  96  unused
+
+
+; bank 3: flash backup & factory use
+; ----------------------------------
+#DEFINE eeprom_prog_page0_backup		0x300		; 128  backup storage for the first program memory page
+;										0x380		;   1  unused
+#DEFINE eeprom_button_polarity			0x381		;   1  button polarity (factory use only, do not change position!)
+;										0x382		; 126  unused
+
+
+
+; --------------------------------------------------------------------------------------------
+;           Serial read & write Macros
+; --------------------------------------------------------------------------------------------
+
+; receive 1 byte and write to memory, in case of timeout the flag 'rs232_rx_timeout' will be set
+;
+SERIAL_CC_RECEIVE	macro	mem_address
+	call	rs232_get_byte				; (try to) receive one byte
+	movff	RCREG1,mem_address			; copy received byte to memory
 	endm
 
 
+; stream a range of bytes to memory, in case of timeout the flag 'rs232_rx_timeout' will be set
+;
+; mem_address: address:2 containing the start address in memory (bank safe)
+; range      : number of bytes to receive (1-256)
+;
+SERIAL_RR_RECEIVE_RAM	macro	mem_address, range
+	lfsr	FSR2,mem_address			; set start address in memory
+	movlw	low(range)					; set number of bytes to receive
+	extern	serial_rx_stream_ram
+	call	serial_rx_stream_ram
+	endm
+
+
+
+; send 1 byte literal
+;
+SERIAL_LC_SEND	macro	literal
+	call	rs232_wait_tx				; wait for completion of last transmit
+	movlw	literal						; load literal
+	movwf	TXREG1						; send literal to serial TX
+	endm
+
+
+; send 1 byte from memory
+;
+; mem_address: address:2 containing the source address in memory (bank safe)
+;
+SERIAL_CC_SEND	macro	mem_address
+	call	rs232_wait_tx				; wait for completion of last transmit
+	movff	mem_address,TXREG1			; send byte from memory to serial TX
+	endm
+
+
+; send a range of bytes from memory
+;
+; mem_address: address:2 containing the start address in memory (bank safe)
+; range      : number of bytes to send (1-256)
+;
+SERIAL_RR_SEND_RAM	macro	mem_address, range
+	lfsr	FSR2,mem_address			; set start address in memory
+	movlw	low(range)					; set number of bytes to send
+	extern	serial_tx_ram
+	call	serial_tx_ram
+	endm
+
+
+; --------------------------------------------------------------------------------------------
+;       EXTERN Directives
+; --------------------------------------------------------------------------------------------
+
+ IFNDEF INSIDE_EEPROM_RS232
+
+; EEPROM - basic read & write
+
+	extern	eeprom_read_common
+	extern	eeprom_write_common
+
+	extern	read_eeprom
+	extern	write_eeprom
+
+
+; EEPROM high-level access
+
+	extern	eeprom_serial_number_read
+
+	extern	eeprom_total_dives_read
+	extern	eeprom_total_dives_write
+
+	extern	eeprom_log_offset_read
+	extern	eeprom_log_offset_write
+
+	extern	eeprom_battery_gauge_read
+	extern	eeprom_battery_gauge_write
+
+	extern	eeprom_deco_data_read
+	extern	eeprom_deco_data_write
+
+
+; Serial - IR / S8
+
+	extern	enable_ir_s8
+	extern	disable_ir_s8
+	extern	ir_s8_wait_tx
+
+
+; Serial - RS232 (USB / BT)
+
 	extern	enable_rs232
 	extern	disable_rs232
 	extern	rs232_get_byte
 	extern	rs232_wait_tx
-	extern	rs232_wait_tx2
 
-	extern	enable_ir_s8
-	extern	disable_ir_s8
-
-	extern	write_int_eeprom_1
-	extern	read_int_eeprom_1
-	extern	read_eeprom
-	extern	write_eeprom
 
-	extern	update_battery_registers
-	extern	retrieve_battery_registers
-
-	extern	vault_decodata_into_eeprom
-	extern	restore_decodata_from_eeprom
-
-	extern	do_logoffset_common_write
-	extern	do_logoffset_common_read
-	extern	eeprom_reset_logbook_pointers
-
-	extern	reset_battery_pointer			; reset battery pointer 0x07-0x0C and battery_gauge
-	extern	reset_battery_internal_only		; reset internal battery registers only
+ ENDIF	; INSIDE_EEPROM_RS232