📄 at49bv162_driver.s
字号:
INC BC
LD (IX+-9),BC
LD BC,(IX+-3)
INC BC
LD (IX+-3),BC
; 86 }
L_11:
.LINE 86
LD BC,(IX+12)
LD HL,(IX+-3)
OR A,A
SBC HL,BC
JR C,L_9
; 87
; 88 return num_bytes ;
.LINE 88
LD BC,(IX+12)
XOR A,A
LD E,A
LD HL,BC
; 89 }
.LINE 89
LD SP,IX
POP IX
RET
;**************************** _AT49BV162_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 "AT49BV162_Read",89,"_AT49BV162_Read"
; 90
; 91 INT32 AT49BV162_Write( void *paddr, void *pbuf, UINT num_bytes )
; 92 #ifdef _IAR_CODE
; 93 @ "DATA_PER_RAM"
; 94 #endif
; 95 {
_AT49BV162_Write:
.DEFINE "_AT49BV162_Write"
.VALUE _AT49BV162_Write
.CLASS 2
.TYPE 69
.ENDEF
.BEGFUNC "AT49BV162_Write",95,"_AT49BV162_Write"
.LINE 95
.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
; 96 volatile UINT8 *addr = ( UINT8 * ) paddr ;
.LINE 96
LD BC,(IX+6)
LD (IX+-6),BC
; 97 volatile UINT8 *base_addr = ( UINT8 * ) ( ( UINT32 ) paddr & AT49BV162_MASK_BITS ) ;
.LINE 97
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
; 98 UINT8 *buf = ( UINT8 * ) pbuf ;
.LINE 98
LD BC,(IX+9)
LD (IX+-3),BC
; 99 UINT8 result ;
; 100 UINT nbytes = 0 ;
.LINE 100
LD BC,0
LD (IX+-9),BC
LD (IX+-9),BC
; 101
; 102 for( nbytes = 0 ; nbytes < num_bytes ; nbytes++ )
.LINE 102
JR L_23
L_21:
; 103 {
; 104 // setup the Program command for the device.
; 105 *( base_addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 105
LD HL,(IX+-12)
LD BC,2730
ADD HL,BC
LD A,170
LD (HL),A
; 106 *( base_addr + 0x554 ) = FLASH_CODE_55 ;
.LINE 106
LD HL,(IX+-12)
LD BC,1364
ADD HL,BC
LD A,85
LD (HL),A
; 107 *( base_addr + 0xAAA ) = CMD_PROGRAM ;
.LINE 107
LD HL,(IX+-12)
LD BC,2730
ADD HL,BC
LD A,160
LD (HL),A
; 108
; 109 *addr = *buf ;
LD IY,(IX+-6)
.LINE 109
LD HL,(IX+-3)
LD A,(HL)
LD (IY),A
; 110
; 111 while(1)
.LINE 111
L_17:
; 112 {
; 113 // loop till when the same data read back that means the byte is written
; 114 // onto the device.
; 115
; 116
; 117 result = *addr ;
.LINE 117
LD IY,(IX+-6)
LD A,(IY)
LD (IX+-13),A
; 118 if( result == *buf )
.LINE 118
LD IY,(IX+-3)
LD A,(IX+-13)
CP A,(IY)
JR NZ,L_17
; 119 break ;
.LINE 119
JR L_19
; 120 }
L_16:
.LINE 120
JR L_17
L_19:
; 121
; 122 buf ++ ;
.LINE 122
LD BC,(IX+-3)
INC BC
LD (IX+-3),BC
; 123 addr ++ ;
.LINE 123
LD BC,(IX+-6)
INC BC
LD (IX+-6),BC
LD BC,(IX+-9)
INC BC
LD (IX+-9),BC
; 124
; 125 }
L_23:
.LINE 125
LD BC,(IX+12)
LD HL,(IX+-9)
OR A,A
SBC HL,BC
JR C,L_21
; 126 return num_bytes;
.LINE 126
LD BC,(IX+12)
XOR A,A
LD E,A
LD HL,BC
; 127 }
.LINE 127
LD SP,IX
POP IX
RET
;**************************** _AT49BV162_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 "AT49BV162_Write",127,"_AT49BV162_Write"
; 128
; 129 INT AT49BV162_Erase( void *paddr, UINT32 num_bytes )
; 130 #ifdef _IAR_CODE
; 131 @ "DATA_PER_RAM"
; 132 #endif
; 133 {
_AT49BV162_Erase:
.DEFINE "_AT49BV162_Erase"
.VALUE _AT49BV162_Erase
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "AT49BV162_Erase",133,"_AT49BV162_Erase"
.LINE 133
.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
; 134 volatile UINT8 *addr = ( UINT8 * )( ( UINT32 ) paddr & AT49BV162_MASK_BITS ) ;
.LINE 134
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
; 135 UINT8 result ;
; 136 // setup the Sector Erase command
; 137 *( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 137
LD HL,(IX+-3)
LD BC,2730
ADD HL,BC
LD A,170
LD (HL),A
; 138 *( addr + 0x554 ) = FLASH_CODE_55 ;
.LINE 138
LD HL,(IX+-3)
LD BC,1364
ADD HL,BC
LD A,85
LD (HL),A
; 139 *( addr + 0xAAA ) = CMD_ERASE_SETUP ;
.LINE 139
LD HL,(IX+-3)
LD BC,2730
ADD HL,BC
LD A,128
LD (HL),A
; 140
; 141 *( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 141
LD HL,(IX+-3)
ADD HL,BC
LD A,170
LD (HL),A
; 142 *( addr + 0x554 ) = FLASH_CODE_55 ;
.LINE 142
LD HL,(IX+-3)
LD BC,1364
ADD HL,BC
LD A,85
LD (HL),A
; 143 *( addr ) = CMD_ERASE_CONFIRM ; // Erasing the sector
.LINE 143
LD IY,(IX+-3)
LD A,48
LD (IY),A
; 144
; 145
; 146 while(1)
.LINE 146
L_28:
; 147 {
; 148 result = *addr ;
.LINE 148
LD IY,(IX+-3)
LD A,(IY)
LD (IX+-4),A
; 149 if ( (result) & BIT_ERASE_DONE)
.LINE 149
LD A,(IX+-4)
AND A,128
JR Z,L_28
; 150 {
; 151 // the erase is completed.
; 152 break ;
.LINE 152
JR L_29
; 153 }
; 154 }
L_27:
.LINE 154
JR L_28
L_29:
; 155
; 156 return SUCCESS;
.LINE 156
LD HL,0
; 157 }
.LINE 157
LD SP,IX
POP IX
RET
;**************************** _AT49BV162_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 "AT49BV162_Erase",157,"_AT49BV162_Erase"
; 158
; 159 INT AT49BV162_Close( void )
; 160 #ifdef _IAR_CODE
; 161 @ "DATA_PER_RAM"
; 162 #endif
; 163 {
_AT49BV162_Close:
.DEFINE "_AT49BV162_Close"
.VALUE _AT49BV162_Close
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "AT49BV162_Close",163,"_AT49BV162_Close"
PUSH IX
LD IX,0
ADD IX,SP
; 164 return SUCCESS ;
.LINE 164
LD HL,0
; 165 }
.LINE 165
LD SP,IX
POP IX
RET
;**************************** _AT49BV162_Close ***************************
;Name Addr/Register Size Type
; Stack Frame Size: 6 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "AT49BV162_Close",165,"_AT49BV162_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 _AT49BV162_Close
XDEF _AT49BV162_Erase
XDEF _AT49BV162_Write
XDEF _AT49BV162_Read
XDEF _AT49BV162_Init
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -