753 lines
18 KiB
NASM
753 lines
18 KiB
NASM
;--------------------------------------------------------
|
|
; File Created by SDCC : free open source ANSI-C Compiler
|
|
; Version 4.2.0 #13081 (Linux)
|
|
;--------------------------------------------------------
|
|
.module eeprom
|
|
.optsdcc -mmcs51 --model-small
|
|
|
|
;--------------------------------------------------------
|
|
; Public variables in this module
|
|
;--------------------------------------------------------
|
|
.globl _delay_ms
|
|
.globl _EADC
|
|
.globl _ET1
|
|
.globl _ET0
|
|
.globl _ES
|
|
.globl _EA
|
|
.globl _REN
|
|
.globl _RI
|
|
.globl _TI
|
|
.globl _TR1
|
|
.globl _TF1
|
|
.globl _IT0
|
|
.globl _IE0
|
|
.globl _TR0
|
|
.globl _TF0
|
|
.globl _CMPCR2
|
|
.globl _CMPCR1
|
|
.globl _TA
|
|
.globl _IRCBAND_REG
|
|
.globl _IAP_TPS
|
|
.globl _IAP_CONTR
|
|
.globl _IAP_TRIG
|
|
.globl _IAP_CMD
|
|
.globl _IAP_ADDRL
|
|
.globl _IAP_ADDRH
|
|
.globl _IAP_DATA
|
|
.globl _WDT_CONTR
|
|
.globl _PCA_PWM3
|
|
.globl _PCA_PWM2
|
|
.globl _PCA_PWM1
|
|
.globl _PCA_PWM0
|
|
.globl _CCAP3L
|
|
.globl _CCAP2L
|
|
.globl _CCAP1L
|
|
.globl _CCAP0L
|
|
.globl _CCAPM3
|
|
.globl _CCAPM2
|
|
.globl _CCAPM1
|
|
.globl _CCAPM0
|
|
.globl _CMOD
|
|
.globl _CCON
|
|
.globl _ADCTIM_X
|
|
.globl _ADCCFG
|
|
.globl _ADC_RESL
|
|
.globl _ADC_RES
|
|
.globl _ADC_CONTR
|
|
.globl _SPDAT
|
|
.globl _SPCTL
|
|
.globl _SPSTAT
|
|
.globl _IP2H
|
|
.globl _IP2
|
|
.globl _IP
|
|
.globl _IE2
|
|
.globl _IE
|
|
.globl _BRT
|
|
.globl _P_SW1
|
|
.globl _SADEN
|
|
.globl _SADDR
|
|
.globl _S2BUF
|
|
.globl _S2CON
|
|
.globl _SBUF
|
|
.globl _SCON
|
|
.globl _TM4PS_X
|
|
.globl _TM3PS_X
|
|
.globl _TM2PS_X
|
|
.globl _T4T3M
|
|
.globl _T4L
|
|
.globl _T4H
|
|
.globl _T3L
|
|
.globl _T3H
|
|
.globl _T2L
|
|
.globl _T2H
|
|
.globl _INTCLKO
|
|
.globl _AUXR
|
|
.globl _TH1
|
|
.globl _TH0
|
|
.globl _TL1
|
|
.globl _TL0
|
|
.globl _TMOD
|
|
.globl _TCON
|
|
.globl _P_SW2
|
|
.globl _P5M0
|
|
.globl _P5M1
|
|
.globl _P4M0
|
|
.globl _P4M1
|
|
.globl _P3M0
|
|
.globl _P3M1
|
|
.globl _P2M0
|
|
.globl _P2M1
|
|
.globl _P1M0
|
|
.globl _P1M1
|
|
.globl _P0M0
|
|
.globl _P0M1
|
|
.globl _PSW
|
|
.globl _B
|
|
.globl _ACC
|
|
.globl _PCON
|
|
.globl _DPH
|
|
.globl _DPL
|
|
.globl _SP
|
|
.globl _P5
|
|
.globl _P4
|
|
.globl _P3
|
|
.globl _P2
|
|
.globl _P1
|
|
.globl _P0
|
|
.globl _eeprom_write_PARM_3
|
|
.globl _eeprom_write_PARM_2
|
|
.globl _eeprom_read_PARM_3
|
|
.globl _eeprom_read_PARM_2
|
|
.globl _eeprom_init
|
|
.globl _eeprom_read
|
|
.globl _eeprom_write
|
|
.globl _eeprom_format
|
|
;--------------------------------------------------------
|
|
; special function registers
|
|
;--------------------------------------------------------
|
|
.area RSEG (ABS,DATA)
|
|
.org 0x0000
|
|
_P0 = 0x0080
|
|
_P1 = 0x0090
|
|
_P2 = 0x00a0
|
|
_P3 = 0x00b0
|
|
_P4 = 0x00c0
|
|
_P5 = 0x00c8
|
|
_SP = 0x0081
|
|
_DPL = 0x0082
|
|
_DPH = 0x0083
|
|
_PCON = 0x0087
|
|
_ACC = 0x00e0
|
|
_B = 0x00f0
|
|
_PSW = 0x00d0
|
|
_P0M1 = 0x0093
|
|
_P0M0 = 0x0094
|
|
_P1M1 = 0x0091
|
|
_P1M0 = 0x0092
|
|
_P2M1 = 0x0095
|
|
_P2M0 = 0x0096
|
|
_P3M1 = 0x00b1
|
|
_P3M0 = 0x00b2
|
|
_P4M1 = 0x00b3
|
|
_P4M0 = 0x00b4
|
|
_P5M1 = 0x00c9
|
|
_P5M0 = 0x00ca
|
|
_P_SW2 = 0x00ba
|
|
_TCON = 0x0088
|
|
_TMOD = 0x0089
|
|
_TL0 = 0x008a
|
|
_TL1 = 0x008b
|
|
_TH0 = 0x008c
|
|
_TH1 = 0x008d
|
|
_AUXR = 0x008e
|
|
_INTCLKO = 0x008f
|
|
_T2H = 0x00d6
|
|
_T2L = 0x00d7
|
|
_T3H = 0x00d4
|
|
_T3L = 0x00d5
|
|
_T4H = 0x00d2
|
|
_T4L = 0x00d3
|
|
_T4T3M = 0x00d1
|
|
_TM2PS_X = 0xfea1
|
|
_TM3PS_X = 0xfea2
|
|
_TM4PS_X = 0xfea3
|
|
_SCON = 0x0098
|
|
_SBUF = 0x0099
|
|
_S2CON = 0x009a
|
|
_S2BUF = 0x009b
|
|
_SADDR = 0x00a9
|
|
_SADEN = 0x00b9
|
|
_P_SW1 = 0x00a2
|
|
_BRT = 0x009c
|
|
_IE = 0x00a8
|
|
_IE2 = 0x00af
|
|
_IP = 0x00b8
|
|
_IP2 = 0x00b6
|
|
_IP2H = 0x00b7
|
|
_SPSTAT = 0x00cd
|
|
_SPCTL = 0x00ce
|
|
_SPDAT = 0x00cf
|
|
_ADC_CONTR = 0x00bc
|
|
_ADC_RES = 0x00bd
|
|
_ADC_RESL = 0x00be
|
|
_ADCCFG = 0x00de
|
|
_ADCTIM_X = 0xfea8
|
|
_CCON = 0x00d8
|
|
_CMOD = 0x00d9
|
|
_CCAPM0 = 0x00da
|
|
_CCAPM1 = 0x00db
|
|
_CCAPM2 = 0x00dc
|
|
_CCAPM3 = 0x00dd
|
|
_CCAP0L = 0x00ea
|
|
_CCAP1L = 0x00eb
|
|
_CCAP2L = 0x00ec
|
|
_CCAP3L = 0x00ed
|
|
_PCA_PWM0 = 0x00f2
|
|
_PCA_PWM1 = 0x00f3
|
|
_PCA_PWM2 = 0x00f4
|
|
_PCA_PWM3 = 0x00f5
|
|
_WDT_CONTR = 0x00c1
|
|
_IAP_DATA = 0x00c2
|
|
_IAP_ADDRH = 0x00c3
|
|
_IAP_ADDRL = 0x00c4
|
|
_IAP_CMD = 0x00c5
|
|
_IAP_TRIG = 0x00c6
|
|
_IAP_CONTR = 0x00c7
|
|
_IAP_TPS = 0x00f7
|
|
_IRCBAND_REG = 0x009d
|
|
_TA = 0x00ae
|
|
_CMPCR1 = 0x00e6
|
|
_CMPCR2 = 0x00e7
|
|
;--------------------------------------------------------
|
|
; special function bits
|
|
;--------------------------------------------------------
|
|
.area RSEG (ABS,DATA)
|
|
.org 0x0000
|
|
_TF0 = 0x008d
|
|
_TR0 = 0x008c
|
|
_IE0 = 0x0089
|
|
_IT0 = 0x0088
|
|
_TF1 = 0x008f
|
|
_TR1 = 0x008e
|
|
_TI = 0x0099
|
|
_RI = 0x0098
|
|
_REN = 0x009c
|
|
_EA = 0x00af
|
|
_ES = 0x00ac
|
|
_ET0 = 0x00a9
|
|
_ET1 = 0x00ab
|
|
_EADC = 0x00ad
|
|
;--------------------------------------------------------
|
|
; overlayable register banks
|
|
;--------------------------------------------------------
|
|
.area REG_BANK_0 (REL,OVR,DATA)
|
|
.ds 8
|
|
;--------------------------------------------------------
|
|
; internal ram data
|
|
;--------------------------------------------------------
|
|
.area DSEG (DATA)
|
|
_iap_write_PARM_2:
|
|
.ds 1
|
|
_eeprom_read_PARM_2:
|
|
.ds 3
|
|
_eeprom_read_PARM_3:
|
|
.ds 3
|
|
_eeprom_write_PARM_2:
|
|
.ds 1
|
|
_eeprom_write_PARM_3:
|
|
.ds 3
|
|
;--------------------------------------------------------
|
|
; overlayable items in internal ram
|
|
;--------------------------------------------------------
|
|
;--------------------------------------------------------
|
|
; indirectly addressable internal ram data
|
|
;--------------------------------------------------------
|
|
.area ISEG (DATA)
|
|
;--------------------------------------------------------
|
|
; absolute internal ram data
|
|
;--------------------------------------------------------
|
|
.area IABS (ABS,DATA)
|
|
.area IABS (ABS,DATA)
|
|
;--------------------------------------------------------
|
|
; bit data
|
|
;--------------------------------------------------------
|
|
.area BSEG (BIT)
|
|
;--------------------------------------------------------
|
|
; paged external ram data
|
|
;--------------------------------------------------------
|
|
.area PSEG (PAG,XDATA)
|
|
;--------------------------------------------------------
|
|
; external ram data
|
|
;--------------------------------------------------------
|
|
.area XSEG (XDATA)
|
|
;--------------------------------------------------------
|
|
; absolute external ram data
|
|
;--------------------------------------------------------
|
|
.area XABS (ABS,XDATA)
|
|
;--------------------------------------------------------
|
|
; external initialized ram data
|
|
;--------------------------------------------------------
|
|
.area XISEG (XDATA)
|
|
.area HOME (CODE)
|
|
.area GSINIT0 (CODE)
|
|
.area GSINIT1 (CODE)
|
|
.area GSINIT2 (CODE)
|
|
.area GSINIT3 (CODE)
|
|
.area GSINIT4 (CODE)
|
|
.area GSINIT5 (CODE)
|
|
.area GSINIT (CODE)
|
|
.area GSFINAL (CODE)
|
|
.area CSEG (CODE)
|
|
;--------------------------------------------------------
|
|
; global & static initialisations
|
|
;--------------------------------------------------------
|
|
.area HOME (CODE)
|
|
.area GSINIT (CODE)
|
|
.area GSFINAL (CODE)
|
|
.area GSINIT (CODE)
|
|
;--------------------------------------------------------
|
|
; Home
|
|
;--------------------------------------------------------
|
|
.area HOME (CODE)
|
|
.area HOME (CODE)
|
|
;--------------------------------------------------------
|
|
; code
|
|
;--------------------------------------------------------
|
|
.area CSEG (CODE)
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'unlock_special'
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:31: static void unlock_special(void)
|
|
; -----------------------------------------
|
|
; function unlock_special
|
|
; -----------------------------------------
|
|
_unlock_special:
|
|
ar7 = 0x07
|
|
ar6 = 0x06
|
|
ar5 = 0x05
|
|
ar4 = 0x04
|
|
ar3 = 0x03
|
|
ar2 = 0x02
|
|
ar1 = 0x01
|
|
ar0 = 0x00
|
|
; src/eeprom.c:33: TA = 0xAA;
|
|
mov _TA,#0xaa
|
|
; src/eeprom.c:34: TA = 0x55;
|
|
mov _TA,#0x55
|
|
; src/eeprom.c:35: }
|
|
ret
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'iap_idle'
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:38: static void iap_idle(void)
|
|
; -----------------------------------------
|
|
; function iap_idle
|
|
; -----------------------------------------
|
|
_iap_idle:
|
|
; src/eeprom.c:40: IAP_CONTR = 0;
|
|
mov _IAP_CONTR,#0x00
|
|
; src/eeprom.c:41: IAP_CMD = 0;
|
|
mov _IAP_CMD,#0x00
|
|
; src/eeprom.c:42: IAP_TRIG = 0;
|
|
mov _IAP_TRIG,#0x00
|
|
; src/eeprom.c:43: }
|
|
ret
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'iap_read'
|
|
;------------------------------------------------------------
|
|
;addr Allocated to registers r6 r7
|
|
;val Allocated to registers r7
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:45: static uint8_t iap_read(uint16_t addr)
|
|
; -----------------------------------------
|
|
; function iap_read
|
|
; -----------------------------------------
|
|
_iap_read:
|
|
mov r6,dpl
|
|
mov r7,dph
|
|
; src/eeprom.c:48: EA = 0;
|
|
; assignBit
|
|
clr _EA
|
|
; src/eeprom.c:49: IAP_CONTR = IAP_EN | IAP_CMD_WAIT;
|
|
mov _IAP_CONTR,#0x80
|
|
; src/eeprom.c:50: IAP_CMD = 1; /* READ */
|
|
mov _IAP_CMD,#0x01
|
|
; src/eeprom.c:51: IAP_ADDRH = (uint8_t)(addr >> 8);
|
|
mov _IAP_ADDRH,r7
|
|
; src/eeprom.c:52: IAP_ADDRL = (uint8_t)(addr & 0xFF);
|
|
mov _IAP_ADDRL,r6
|
|
; src/eeprom.c:53: IAP_TRIG = 0x5A;
|
|
mov _IAP_TRIG,#0x5a
|
|
; src/eeprom.c:54: IAP_TRIG = 0xA5;
|
|
mov _IAP_TRIG,#0xa5
|
|
; src/eeprom.c:55: _nop_();
|
|
lcall __nop_
|
|
; src/eeprom.c:56: _nop_();
|
|
lcall __nop_
|
|
; src/eeprom.c:57: val = IAP_DATA;
|
|
mov r7,_IAP_DATA
|
|
; src/eeprom.c:58: iap_idle();
|
|
push ar7
|
|
lcall _iap_idle
|
|
pop ar7
|
|
; src/eeprom.c:59: EA = 1;
|
|
; assignBit
|
|
setb _EA
|
|
; src/eeprom.c:60: return val;
|
|
mov dpl,r7
|
|
; src/eeprom.c:61: }
|
|
ret
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'iap_erase'
|
|
;------------------------------------------------------------
|
|
;sector_addr Allocated to registers r6 r7
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:64: static void iap_erase(uint16_t sector_addr)
|
|
; -----------------------------------------
|
|
; function iap_erase
|
|
; -----------------------------------------
|
|
_iap_erase:
|
|
mov r6,dpl
|
|
mov r7,dph
|
|
; src/eeprom.c:66: EA = 0;
|
|
; assignBit
|
|
clr _EA
|
|
; src/eeprom.c:67: IAP_CONTR = IAP_EN | IAP_CMD_WAIT;
|
|
mov _IAP_CONTR,#0x80
|
|
; src/eeprom.c:68: IAP_CMD = 3; /* ERASE */
|
|
mov _IAP_CMD,#0x03
|
|
; src/eeprom.c:69: IAP_ADDRH = (uint8_t)(sector_addr >> 8);
|
|
mov _IAP_ADDRH,r7
|
|
; src/eeprom.c:70: IAP_ADDRL = (uint8_t)(sector_addr & 0xFF);
|
|
mov _IAP_ADDRL,r6
|
|
; src/eeprom.c:71: IAP_TRIG = 0x5A;
|
|
mov _IAP_TRIG,#0x5a
|
|
; src/eeprom.c:72: IAP_TRIG = 0xA5;
|
|
mov _IAP_TRIG,#0xa5
|
|
; src/eeprom.c:74: delay_ms(10);
|
|
mov dptr,#0x000a
|
|
lcall _delay_ms
|
|
; src/eeprom.c:75: iap_idle();
|
|
lcall _iap_idle
|
|
; src/eeprom.c:76: EA = 1;
|
|
; assignBit
|
|
setb _EA
|
|
; src/eeprom.c:77: }
|
|
ret
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'iap_write'
|
|
;------------------------------------------------------------
|
|
;val Allocated with name '_iap_write_PARM_2'
|
|
;addr Allocated to registers r6 r7
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:79: static void iap_write(uint16_t addr, uint8_t val)
|
|
; -----------------------------------------
|
|
; function iap_write
|
|
; -----------------------------------------
|
|
_iap_write:
|
|
mov r6,dpl
|
|
mov r7,dph
|
|
; src/eeprom.c:81: EA = 0;
|
|
; assignBit
|
|
clr _EA
|
|
; src/eeprom.c:82: IAP_CONTR = IAP_EN | IAP_CMD_WAIT;
|
|
mov _IAP_CONTR,#0x80
|
|
; src/eeprom.c:83: IAP_CMD = 2; /* WRITE */
|
|
mov _IAP_CMD,#0x02
|
|
; src/eeprom.c:84: IAP_ADDRH = (uint8_t)(addr >> 8);
|
|
mov _IAP_ADDRH,r7
|
|
; src/eeprom.c:85: IAP_ADDRL = (uint8_t)(addr & 0xFF);
|
|
mov _IAP_ADDRL,r6
|
|
; src/eeprom.c:86: IAP_DATA = val;
|
|
mov _IAP_DATA,_iap_write_PARM_2
|
|
; src/eeprom.c:87: IAP_TRIG = 0x5A;
|
|
mov _IAP_TRIG,#0x5a
|
|
; src/eeprom.c:88: IAP_TRIG = 0xA5;
|
|
mov _IAP_TRIG,#0xa5
|
|
; src/eeprom.c:89: _nop_();
|
|
lcall __nop_
|
|
; src/eeprom.c:90: _nop_();
|
|
lcall __nop_
|
|
; src/eeprom.c:91: iap_idle();
|
|
lcall _iap_idle
|
|
; src/eeprom.c:92: EA = 1;
|
|
; assignBit
|
|
setb _EA
|
|
; src/eeprom.c:93: }
|
|
ret
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'eeprom_init'
|
|
;------------------------------------------------------------
|
|
;m0 Allocated to registers r7
|
|
;m1 Allocated to registers r6
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:95: uint8_t eeprom_init(void)
|
|
; -----------------------------------------
|
|
; function eeprom_init
|
|
; -----------------------------------------
|
|
_eeprom_init:
|
|
; src/eeprom.c:98: uint8_t m0 = iap_read(IAP_EEPROM_BASE);
|
|
mov dptr,#0xfc00
|
|
lcall _iap_read
|
|
mov r7,dpl
|
|
; src/eeprom.c:99: uint8_t m1 = iap_read(IAP_EEPROM_BASE + 1);
|
|
mov dptr,#0xfc01
|
|
push ar7
|
|
lcall _iap_read
|
|
mov r6,dpl
|
|
pop ar7
|
|
; src/eeprom.c:100: if (m0 == 'L' && m1 == '3') return EEPROM_OK;
|
|
cjne r7,#0x4c,00102$
|
|
cjne r6,#0x33,00102$
|
|
mov dpl,#0x00
|
|
ret
|
|
00102$:
|
|
; src/eeprom.c:101: return EEPROM_ERR;
|
|
mov dpl,#0x01
|
|
; src/eeprom.c:102: }
|
|
ret
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'eeprom_read'
|
|
;------------------------------------------------------------
|
|
;ch Allocated with name '_eeprom_read_PARM_2'
|
|
;addr Allocated with name '_eeprom_read_PARM_3'
|
|
;mode Allocated to registers r5 r6 r7
|
|
;i Allocated to registers r7
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:104: uint8_t eeprom_read(uint8_t *mode, uint8_t *ch, uint8_t addr[5])
|
|
; -----------------------------------------
|
|
; function eeprom_read
|
|
; -----------------------------------------
|
|
_eeprom_read:
|
|
mov r5,dpl
|
|
mov r6,dph
|
|
mov r7,b
|
|
; src/eeprom.c:106: if (mode) *mode = iap_read(IAP_EEPROM_BASE + 4);
|
|
mov a,r5
|
|
orl a,r6
|
|
jz 00102$
|
|
mov dptr,#0xfc04
|
|
push ar7
|
|
push ar6
|
|
push ar5
|
|
lcall _iap_read
|
|
mov r4,dpl
|
|
pop ar5
|
|
pop ar6
|
|
pop ar7
|
|
mov dpl,r5
|
|
mov dph,r6
|
|
mov b,r7
|
|
mov a,r4
|
|
lcall __gptrput
|
|
00102$:
|
|
; src/eeprom.c:107: if (ch) *ch = iap_read(IAP_EEPROM_BASE + 5);
|
|
mov a,_eeprom_read_PARM_2
|
|
orl a,(_eeprom_read_PARM_2 + 1)
|
|
jz 00104$
|
|
mov r5,_eeprom_read_PARM_2
|
|
mov r6,(_eeprom_read_PARM_2 + 1)
|
|
mov r7,(_eeprom_read_PARM_2 + 2)
|
|
mov dptr,#0xfc05
|
|
push ar7
|
|
push ar6
|
|
push ar5
|
|
lcall _iap_read
|
|
mov r4,dpl
|
|
pop ar5
|
|
pop ar6
|
|
pop ar7
|
|
mov dpl,r5
|
|
mov dph,r6
|
|
mov b,r7
|
|
mov a,r4
|
|
lcall __gptrput
|
|
00104$:
|
|
; src/eeprom.c:108: if (addr) {
|
|
mov a,_eeprom_read_PARM_3
|
|
orl a,(_eeprom_read_PARM_3 + 1)
|
|
jz 00107$
|
|
; src/eeprom.c:109: for (uint8_t i = 0; i < 5; i++) {
|
|
mov r7,#0x00
|
|
00109$:
|
|
cjne r7,#0x05,00137$
|
|
00137$:
|
|
jnc 00107$
|
|
; src/eeprom.c:110: addr[i] = iap_read(IAP_EEPROM_BASE + 6 + i);
|
|
mov a,r7
|
|
add a,_eeprom_read_PARM_3
|
|
mov r4,a
|
|
clr a
|
|
addc a,(_eeprom_read_PARM_3 + 1)
|
|
mov r5,a
|
|
mov r6,(_eeprom_read_PARM_3 + 2)
|
|
mov ar2,r7
|
|
mov r3,#0x00
|
|
mov a,#0x06
|
|
add a,r2
|
|
mov r2,a
|
|
mov a,#0xfc
|
|
addc a,r3
|
|
mov r3,a
|
|
mov dpl,r2
|
|
mov dph,r3
|
|
push ar7
|
|
push ar6
|
|
push ar5
|
|
push ar4
|
|
lcall _iap_read
|
|
mov r3,dpl
|
|
pop ar4
|
|
pop ar5
|
|
pop ar6
|
|
pop ar7
|
|
mov dpl,r4
|
|
mov dph,r5
|
|
mov b,r6
|
|
mov a,r3
|
|
lcall __gptrput
|
|
; src/eeprom.c:109: for (uint8_t i = 0; i < 5; i++) {
|
|
inc r7
|
|
sjmp 00109$
|
|
00107$:
|
|
; src/eeprom.c:113: return EEPROM_OK;
|
|
mov dpl,#0x00
|
|
; src/eeprom.c:114: }
|
|
ret
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'eeprom_write'
|
|
;------------------------------------------------------------
|
|
;ch Allocated with name '_eeprom_write_PARM_2'
|
|
;addr Allocated with name '_eeprom_write_PARM_3'
|
|
;mode Allocated to registers r7
|
|
;i Allocated to registers r6
|
|
;cksum Allocated to registers r7
|
|
;i Allocated to registers r6
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:116: uint8_t eeprom_write(uint8_t mode, uint8_t ch, const uint8_t addr[5])
|
|
; -----------------------------------------
|
|
; function eeprom_write
|
|
; -----------------------------------------
|
|
_eeprom_write:
|
|
mov r7,dpl
|
|
; src/eeprom.c:119: iap_erase(IAP_EEPROM_BASE);
|
|
mov dptr,#0xfc00
|
|
push ar7
|
|
lcall _iap_erase
|
|
; src/eeprom.c:122: iap_write(IAP_EEPROM_BASE + 0, 'L');
|
|
mov _iap_write_PARM_2,#0x4c
|
|
mov dptr,#0xfc00
|
|
lcall _iap_write
|
|
; src/eeprom.c:123: iap_write(IAP_EEPROM_BASE + 1, '3');
|
|
mov _iap_write_PARM_2,#0x33
|
|
mov dptr,#0xfc01
|
|
lcall _iap_write
|
|
pop ar7
|
|
; src/eeprom.c:124: iap_write(IAP_EEPROM_BASE + 4, mode);
|
|
mov _iap_write_PARM_2,r7
|
|
mov dptr,#0xfc04
|
|
push ar7
|
|
lcall _iap_write
|
|
; src/eeprom.c:125: iap_write(IAP_EEPROM_BASE + 5, ch);
|
|
mov _iap_write_PARM_2,_eeprom_write_PARM_2
|
|
mov dptr,#0xfc05
|
|
lcall _iap_write
|
|
pop ar7
|
|
; src/eeprom.c:126: for (uint8_t i = 0; i < 5; i++) {
|
|
mov r6,#0x00
|
|
00104$:
|
|
cjne r6,#0x05,00129$
|
|
00129$:
|
|
jnc 00101$
|
|
; src/eeprom.c:127: iap_write(IAP_EEPROM_BASE + 6 + i, addr[i]);
|
|
mov ar4,r6
|
|
mov r5,#0x00
|
|
mov a,#0x06
|
|
add a,r4
|
|
mov r4,a
|
|
mov a,#0xfc
|
|
addc a,r5
|
|
mov r5,a
|
|
mov a,r6
|
|
add a,_eeprom_write_PARM_3
|
|
mov r1,a
|
|
clr a
|
|
addc a,(_eeprom_write_PARM_3 + 1)
|
|
mov r2,a
|
|
mov r3,(_eeprom_write_PARM_3 + 2)
|
|
mov dpl,r1
|
|
mov dph,r2
|
|
mov b,r3
|
|
lcall __gptrget
|
|
mov _iap_write_PARM_2,a
|
|
mov dpl,r4
|
|
mov dph,r5
|
|
push ar7
|
|
push ar6
|
|
lcall _iap_write
|
|
pop ar6
|
|
pop ar7
|
|
; src/eeprom.c:126: for (uint8_t i = 0; i < 5; i++) {
|
|
inc r6
|
|
sjmp 00104$
|
|
00101$:
|
|
; src/eeprom.c:130: uint8_t cksum = mode ^ ch;
|
|
mov a,_eeprom_write_PARM_2
|
|
xrl ar7,a
|
|
; src/eeprom.c:131: for (uint8_t i = 0; i < 5; i++) cksum ^= addr[i];
|
|
mov r6,#0x00
|
|
00107$:
|
|
cjne r6,#0x05,00131$
|
|
00131$:
|
|
jnc 00102$
|
|
mov a,r6
|
|
add a,_eeprom_write_PARM_3
|
|
mov r3,a
|
|
clr a
|
|
addc a,(_eeprom_write_PARM_3 + 1)
|
|
mov r4,a
|
|
mov r5,(_eeprom_write_PARM_3 + 2)
|
|
mov dpl,r3
|
|
mov dph,r4
|
|
mov b,r5
|
|
lcall __gptrget
|
|
mov r3,a
|
|
xrl ar7,a
|
|
inc r6
|
|
sjmp 00107$
|
|
00102$:
|
|
; src/eeprom.c:132: iap_write(IAP_EEPROM_BASE + 11, cksum);
|
|
mov _iap_write_PARM_2,r7
|
|
mov dptr,#0xfc0b
|
|
lcall _iap_write
|
|
; src/eeprom.c:134: return EEPROM_OK;
|
|
mov dpl,#0x00
|
|
; src/eeprom.c:135: }
|
|
ret
|
|
;------------------------------------------------------------
|
|
;Allocation info for local variables in function 'eeprom_format'
|
|
;------------------------------------------------------------
|
|
; src/eeprom.c:137: uint8_t eeprom_format(void)
|
|
; -----------------------------------------
|
|
; function eeprom_format
|
|
; -----------------------------------------
|
|
_eeprom_format:
|
|
; src/eeprom.c:139: return eeprom_write(MODE_SBUS, DEFAULT_RF_CH, DEFAULT_ADDR);
|
|
mov _eeprom_write_PARM_3,#_DEFAULT_ADDR
|
|
mov (_eeprom_write_PARM_3 + 1),#(_DEFAULT_ADDR >> 8)
|
|
mov (_eeprom_write_PARM_3 + 2),#0x80
|
|
mov _eeprom_write_PARM_2,#0x4c
|
|
mov dpl,#0x00
|
|
; src/eeprom.c:140: }
|
|
ljmp _eeprom_write
|
|
.area CSEG (CODE)
|
|
.area CONST (CODE)
|
|
_DEFAULT_ADDR:
|
|
.db #0xe7 ; 231
|
|
.db #0xe7 ; 231
|
|
.db #0xe7 ; 231
|
|
.db #0xe7 ; 231
|
|
.db #0xc2 ; 194
|
|
.area XINIT (CODE)
|
|
.area CABS (ABS,CODE)
|