📄 am29lv160_driver.s
字号:
LD HL,(IX+-3)
OR A,A
SBC HL,BC
JR C,L_9
; 84
; 85 return num_bytes ;
.LINE 85
LD BC,(IX+12)
XOR A,A
LD E,A
LD HL,BC
; 86 }
.LINE 86
LD SP,IX
POP IX
RET
;**************************** _AM29LV160_Read ***************************
;Name Addr/Register Size Type
;pcaddr IX-9 3 variable
;pcbuf IX-6 3 variable
;nbytes IX-3 3 variable
;num_bytes IX+12 3 parameter
;pbuf IX+9 3 parameter
;paddr IX+6 3 parameter
; Stack Frame Size: 24 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "AM29LV160_Read",86,"_AM29LV160_Read"
; 87
; 88 INT32 AM29LV160_Write( void *paddr, void *pbuf, UINT num_bytes )
; 89 #ifdef _IAR_CODE
; 90 @ "DATA_PER_RAM"
; 91 #endif
; 92 {
_AM29LV160_Write:
.DEFINE "_AM29LV160_Write"
.VALUE _AM29LV160_Write
.CLASS 2
.TYPE 69
.ENDEF
.BEGFUNC "AM29LV160_Write",92,"_AM29LV160_Write"
.LINE 92
.DEFINE "paddr"
.CLASS 65
.VALUE 6
.TYPE 33
.ENDEF
.DEFINE "pbuf"
.CLASS 65
.VALUE 9
.TYPE 33
.ENDEF
.DEFINE "num_bytes"
.CLASS 65
.VALUE 12
.TYPE 14
.ENDEF
.DEFINE "buf"
.CLASS 65
.VALUE -3
.TYPE 44
.ENDEF
.DEFINE "addr"
.CLASS 65
.VALUE -6
.TYPE 44
.ENDEF
.DEFINE "nbytes"
.CLASS 65
.VALUE -9
.TYPE 14
.ENDEF
.DEFINE "base_addr"
.CLASS 65
.VALUE -12
.TYPE 44
.ENDEF
.DEFINE "result"
.CLASS 65
.VALUE -13
.TYPE 12
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
LEA IY,IX+-13
LD SP,IY
; 93 volatile UINT8 *addr = ( UINT8 * ) paddr ;
.LINE 93
LD BC,(IX+6)
LD (IX+-6),BC
; 94 volatile UINT8 *base_addr = ( UINT8 * ) ( ( UINT32 ) paddr & AM29LV160_MASK_BITS ) ;
.LINE 94
LD BC,(IX+6)
XOR A,A
LD E,A
LD HL,BC
LD BC,16711680
XOR A,A
CALL __land
LD (IX+-12),HL
; 95 UINT8 *buf = ( UINT8 * ) pbuf ;
.LINE 95
LD BC,(IX+9)
LD (IX+-3),BC
; 96 UINT8 result ;
; 97 UINT nbytes = 0 ;
.LINE 97
LD BC,0
LD (IX+-9),BC
LD (IX+-9),BC
; 98
; 99 for( nbytes = 0 ; nbytes < num_bytes ; nbytes++ )
.LINE 99
JR L_23
L_21:
; 100 {
; 101 // setup the Program command for the device.
; 102 *( base_addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 102
LD HL,(IX+-12)
LD BC,2730
ADD HL,BC
LD A,170
LD (HL),A
; 103 *( base_addr + 0x555 ) = FLASH_CODE_55 ;
.LINE 103
LD HL,(IX+-12)
LD BC,1365
ADD HL,BC
LD A,85
LD (HL),A
; 104 *( base_addr + 0xAAA ) = CMD_PROGRAM ;
.LINE 104
LD HL,(IX+-12)
LD BC,2730
ADD HL,BC
LD A,160
LD (HL),A
; 105
; 106 *addr = *buf ;
LD IY,(IX+-6)
.LINE 106
LD HL,(IX+-3)
LD A,(HL)
LD (IY),A
; 107
; 108 while(1)
.LINE 108
L_17:
; 109 {
; 110 // loop till when the same data read back that means the byte is written
; 111 // onto the device.
; 112
; 113
; 114 result = *addr ;
.LINE 114
LD IY,(IX+-6)
LD A,(IY)
LD (IX+-13),A
; 115 if( result == *buf )
.LINE 115
LD IY,(IX+-3)
LD A,(IX+-13)
CP A,(IY)
JR NZ,L_17
; 116 break ;
.LINE 116
JR L_19
; 117 }
L_16:
.LINE 117
JR L_17
L_19:
; 118
; 119 buf ++ ;
.LINE 119
LD BC,(IX+-3)
INC BC
LD (IX+-3),BC
; 120 addr ++ ;
.LINE 120
LD BC,(IX+-6)
INC BC
LD (IX+-6),BC
LD BC,(IX+-9)
INC BC
LD (IX+-9),BC
; 121 }
L_23:
.LINE 121
LD BC,(IX+12)
LD HL,(IX+-9)
OR A,A
SBC HL,BC
JR C,L_21
; 122 return num_bytes;
.LINE 122
LD BC,(IX+12)
XOR A,A
LD E,A
LD HL,BC
; 123 }
.LINE 123
LD SP,IX
POP IX
RET
;**************************** _AM29LV160_Write ***************************
;Name Addr/Register Size Type
;result IX-13 1 variable
;base_addr IX-12 3 variable
;nbytes IX-9 3 variable
;addr IX-6 3 variable
;buf IX-3 3 variable
;num_bytes IX+12 3 parameter
;pbuf IX+9 3 parameter
;paddr IX+6 3 parameter
; Stack Frame Size: 28 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "AM29LV160_Write",123,"_AM29LV160_Write"
; 124
; 125 INT AM29LV160_Erase( void *paddr, UINT32 num_bytes )
; 126 #ifdef _IAR_CODE
; 127 @ "DATA_PER_RAM"
; 128 #endif
; 129 {
_AM29LV160_Erase:
.DEFINE "_AM29LV160_Erase"
.VALUE _AM29LV160_Erase
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "AM29LV160_Erase",129,"_AM29LV160_Erase"
.LINE 129
.DEFINE "paddr"
.CLASS 65
.VALUE 6
.TYPE 33
.ENDEF
.DEFINE "num_bytes"
.CLASS 65
.VALUE 9
.TYPE 15
.ENDEF
.DEFINE "addr"
.CLASS 65
.VALUE -3
.TYPE 44
.ENDEF
.DEFINE "result"
.CLASS 65
.VALUE -4
.TYPE 12
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
DEC SP
; 130 volatile UINT8 *addr = ( UINT8 * )( ( UINT32 ) paddr & AM29LV160_MASK_BITS ) ;
.LINE 130
LD BC,(IX+6)
XOR A,A
LD E,A
LD HL,BC
LD BC,16711680
XOR A,A
CALL __land
LD (IX+-3),HL
; 131 UINT8 result ;
; 132
; 133 // setup the Sector Erase command
; 134 *( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 134
LD HL,(IX+-3)
LD BC,2730
ADD HL,BC
LD A,170
LD (HL),A
; 135 *( addr + 0x555 ) = FLASH_CODE_55 ;
.LINE 135
LD HL,(IX+-3)
LD BC,1365
ADD HL,BC
LD A,85
LD (HL),A
; 136 *( addr + 0xAAA ) = CMD_ERASE_SETUP ;
.LINE 136
LD HL,(IX+-3)
LD BC,2730
ADD HL,BC
LD A,128
LD (HL),A
; 137
; 138 *( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 138
LD HL,(IX+-3)
ADD HL,BC
LD A,170
LD (HL),A
; 139 *( addr + 0x554 ) = FLASH_CODE_55 ;
.LINE 139
LD HL,(IX+-3)
LD BC,1364
ADD HL,BC
LD A,85
LD (HL),A
; 140 *( addr ) = CMD_ERASE_CONFIRM ; // Erasing the sector
.LINE 140
LD IY,(IX+-3)
LD A,48
LD (IY),A
; 141
; 142 while(1)
.LINE 142
L_28:
; 143 {
; 144 result = *addr ;
.LINE 144
LD IY,(IX+-3)
LD A,(IY)
LD (IX+-4),A
; 145 if ( (result) & BIT_ERASE_DONE)
.LINE 145
LD A,(IX+-4)
AND A,128
JR Z,L_28
; 146 {
; 147 // the erase is completed.
; 148 break ;
.LINE 148
JR L_29
; 149 }
; 150 }
L_27:
.LINE 150
JR L_28
L_29:
; 151
; 152 // the device is put in the READ ARRAY mode after the ERASE is complete
; 153 // *( addr + 0x555 ) = CMD_READ_ARRAY ;
; 154
; 155 return SUCCESS;
.LINE 155
LD HL,0
; 156 }
.LINE 156
LD SP,IX
POP IX
RET
;**************************** _AM29LV160_Erase ***************************
;Name Addr/Register Size Type
;result IX-4 1 variable
;addr IX-3 3 variable
;num_bytes IX+9 4 parameter
;paddr IX+6 3 parameter
; Stack Frame Size: 19 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "AM29LV160_Erase",156,"_AM29LV160_Erase"
; 157
; 158 INT AM29LV160_Close( void )
; 159 #ifdef _IAR_CODE
; 160 @ "DATA_PER_RAM"
; 161 #endif
; 162 {
_AM29LV160_Close:
.DEFINE "_AM29LV160_Close"
.VALUE _AM29LV160_Close
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "AM29LV160_Close",162,"_AM29LV160_Close"
PUSH IX
LD IX,0
ADD IX,SP
; 163 return SUCCESS ;
.LINE 163
LD HL,0
; 164 }
.LINE 164
LD SP,IX
POP IX
RET
;**************************** _AM29LV160_Close ***************************
;Name Addr/Register Size Type
; Stack Frame Size: 6 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "AM29LV160_Close",164,"_AM29LV160_Close"
XREF __u_uitoa:ROM
XREF ___print_sendstring:ROM
XREF ___print_xputch:ROM
XREF ___print_sputch:ROM
XREF ___print_uputch:ROM
XREF ___print_fmt:ROM
XREF __land:ROM
XREF __itol:ROM
XDEF _AM29LV160_Close
XDEF _AM29LV160_Erase
XDEF _AM29LV160_Write
XDEF _AM29LV160_Read
XDEF _AM29LV160_Init
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -