📄 mt28f008_driver.s
字号:
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH BC
PUSH BC
DEC SP
; 91 UINT i;
; 92 volatile UINT8 *ucPtr;
; 93 UINT8 *ucSrcAddr;
; 94 UINT8 ucStatus;
; 95
; 96 ucSrcAddr=(UINT8*)pbuf;
.LINE 96
LD BC,(IX+9)
LD (IX+-7),BC
; 97 ucPtr = ( UINT8 * ) paddr;
.LINE 97
LD BC,(IX+6)
LD (IX+-3),BC
LD BC,0
LD (IX+-10),BC
; 98 for(i=0; i < num_bytes; i++, ucPtr++)
.LINE 98
JR L_32
L_30:
; 99 {
; 100 // Write set up
; 101
; 102 *ucPtr=MT28F008_RESET;
.LINE 102
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 103 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 103
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 104 *ucPtr=MT28F008_WRITE_SETUP;
.LINE 104
LD IY,(IX+-3)
LD A,64
LD (IY),A
; 105 *ucPtr=*ucSrcAddr;
LD IY,(IX+-3)
.LINE 105
LD HL,(IX+-7)
LD A,(HL)
LD (IY),A
; 106 do
L_20:
.LINE 106
; 107 {
; 108 ucStatus = (UINT8)(MT28F008_STATUS_BITS & *ucPtr);
.LINE 108
LD IY,(IX+-3)
LD A,(IY)
AND A,248
LD (IX+-4),A
; 109 } while( ucStatus == MT28F008_BUSY);
.LINE 109
LD A,(IX+-4)
OR A,A
JR Z,L_20
; 110
; 111 if(ucStatus != MT28F008_READY)
.LINE 111
LD A,(IX+-4)
CP A,128
JR Z,L_29
; 112 { //if failed ..
; 113 //wait(ONE_SECOND);
; 114 *ucPtr=MT28F008_RESET; // try one more time
.LINE 114
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 115 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 115
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 116 *ucPtr=MT28F008_WRITE_SETUP;
.LINE 116
LD IY,(IX+-3)
LD A,64
LD (IY),A
; 117 *ucPtr=*ucSrcAddr;
LD IY,(IX+-3)
.LINE 117
LD HL,(IX+-7)
LD A,(HL)
LD (IY),A
; 118 do
L_22:
.LINE 118
; 119 {
; 120 ucStatus = (UINT8)(MT28F008_STATUS_BITS & *ucPtr);
.LINE 120
LD IY,(IX+-3)
LD A,(IY)
AND A,248
LD (IX+-4),A
; 121 } while( ucStatus == MT28F008_BUSY);
.LINE 121
LD A,(IX+-4)
OR A,A
JR Z,L_22
; 122 if( ucStatus != MT28F008_READY)
.LINE 122
LD A,(IX+-4)
CP A,128
JR Z,L_29
; 123 {
; 124 *ucPtr=MT28F008_RESET;
.LINE 124
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 125 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 125
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 126 *ucPtr=MT28F008_READ_ARRAY;
.LINE 126
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 127
; 128 return FlashError(ucStatus);
LD C,(IX+-4)
LD B,0
PUSH BC
.LINE 128
CALL _FlashError
POP BC
JR L_34
; 129 }
; 130 }//end 'if:failed'
L_29:
.LINE 130
; 131 ucSrcAddr++;
.LINE 131
LD BC,(IX+-7)
INC BC
LD (IX+-7),BC
LD BC,(IX+-10)
INC BC
LD (IX+-10),BC
LD BC,(IX+-3)
INC BC
LD (IX+-3),BC
; 132 }
L_32:
.LINE 132
LD BC,(IX+12)
LD HL,(IX+-10)
OR A,A
SBC HL,BC
JR C,L_30
; 133 *ucPtr=MT28F008_RESET;
.LINE 133
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 134 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 134
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 135 *ucPtr=MT28F008_READ_ARRAY;
.LINE 135
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 136 //Readback the data from the flash and verify with the
; 137 // data buffer whether they match
; 138 // if( memcmp( (void*)(ucPtr-num_bytes), (void*)pbuf, num_bytes ) ) //doesn't match?
; 139 // gucReadbackFailed = 1 ; //set the flag saying that read back failed
; 140
; 141 return num_bytes;
.LINE 141
LD BC,(IX+12)
XOR A,A
LD E,A
LD HL,BC
; 142
; 143 }
L_34:
.LINE 143
LD SP,IX
POP IX
RET
;**************************** _MT28F008_Write ***************************
;Name Addr/Register Size Type
;i IX-10 3 variable
;ucSrcAddr IX-7 3 variable
;ucStatus IX-4 1 variable
;ucPtr IX-3 3 variable
;num_bytes IX+12 3 parameter
;pbuf IX+9 3 parameter
;paddr IX+6 3 parameter
; Stack Frame Size: 25 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "MT28F008_Write",143,"_MT28F008_Write"
; 144
; 145 INT MT28F008_Erase( void *paddr, UINT32 num_bytes )
; 146 #ifdef _IAR_CODE
; 147 @ "DATA_PER_RAM"
; 148 #endif
; 149 {
_MT28F008_Erase:
.DEFINE "_MT28F008_Erase"
.VALUE _MT28F008_Erase
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "MT28F008_Erase",149,"_MT28F008_Erase"
.LINE 149
.DEFINE "paddr"
.CLASS 65
.VALUE 6
.TYPE 33
.ENDEF
.DEFINE "num_bytes"
.CLASS 65
.VALUE 9
.TYPE 15
.ENDEF
.DEFINE "ucPtr"
.CLASS 65
.VALUE -3
.TYPE 44
.ENDEF
.DEFINE "ucStatus"
.CLASS 65
.VALUE -4
.TYPE 12
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
DEC SP
; 150 UINT8 ucStatus;
; 151 UINT8 *ucPtr= (UINT8*)paddr;
.LINE 151
LD BC,(IX+6)
LD (IX+-3),BC
; 152
; 153 *ucPtr=MT28F008_RESET;
.LINE 153
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 154 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 154
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 155 *ucPtr=MT28F008_ERASE_SETUP;
.LINE 155
LD IY,(IX+-3)
LD A,32
LD (IY),A
; 156 *ucPtr=MT28F008_ERASE_CONFIRM;
.LINE 156
LD IY,(IX+-3)
LD A,208
LD (IY),A
; 157 do
L_35:
.LINE 157
; 158 {
; 159 ucStatus = (UINT8)(MT28F008_STATUS_BITS & *ucPtr);
.LINE 159
LD IY,(IX+-3)
LD A,(IY)
AND A,248
LD (IX+-4),A
; 160 } while(ucStatus == MT28F008_BUSY);
.LINE 160
LD A,(IX+-4)
OR A,A
JR Z,L_35
; 161
; 162 if(ucStatus != MT28F008_READY)// if failed ...
.LINE 162
LD A,(IX+-4)
CP A,128
JR Z,L_43
; 163 {
; 164 //wait(ONE_SECOND);
; 165 *ucPtr=MT28F008_RESET; // try one more time
.LINE 165
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 166 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 166
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 167 *ucPtr=MT28F008_ERASE_SETUP;
.LINE 167
LD IY,(IX+-3)
LD A,32
LD (IY),A
; 168 *ucPtr=MT28F008_ERASE_CONFIRM;
.LINE 168
LD IY,(IX+-3)
LD A,208
LD (IY),A
; 169
; 170 do
L_37:
.LINE 170
; 171 {
; 172 ucStatus = (UINT8)(MT28F008_STATUS_BITS & *ucPtr);
.LINE 172
LD IY,(IX+-3)
LD A,(IY)
AND A,248
LD (IX+-4),A
; 173 } while(ucStatus == MT28F008_BUSY);
.LINE 173
LD A,(IX+-4)
OR A,A
JR Z,L_37
; 174
; 175 if(ucStatus != MT28F008_READY)
.LINE 175
LD A,(IX+-4)
CP A,128
JR Z,L_43
; 176 {
; 177 *ucPtr=MT28F008_RESET;
.LINE 177
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 178 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 178
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 179 *ucPtr=MT28F008_READ_ARRAY;
.LINE 179
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 180 return FlashError(ucStatus);
LD C,(IX+-4)
LD B,0
PUSH BC
.LINE 180
CALL _FlashError
POP BC
JR L_44
; 181 }
; 182 }
L_43:
.LINE 182
; 183
; 184 *ucPtr=MT28F008_RESET;
.LINE 184
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 185 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 185
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 186 *ucPtr=MT28F008_READ_ARRAY;
.LINE 186
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 187
; 188 return SUCCESS;
.LINE 188
LD HL,0
; 189 }
L_44:
.LINE 189
LD SP,IX
POP IX
RET
;**************************** _MT28F008_Erase ***************************
;Name Addr/Register Size Type
;ucStatus IX-4 1 variable
;ucPtr 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 "MT28F008_Erase",189,"_MT28F008_Erase"
; 190
; 191 INT MT28F008_Close( void )
; 192 #ifdef _IAR_CODE
; 193 @ "DATA_PER_RAM"
; 194 #endif
; 195 {
_MT28F008_Close:
.DEFINE "_MT28F008_Close"
.VALUE _MT28F008_Close
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "MT28F008_Close",195,"_MT28F008_Close"
PUSH IX
LD IX,0
ADD IX,SP
; 196 return SUCCESS ;
.LINE 196
LD HL,0
; 197 }
.LINE 197
LD SP,IX
POP IX
RET
;**************************** _MT28F008_Close ***************************
;Name Addr/Register Size Type
; Stack Frame Size: 6 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "MT28F008_Close",197,"_MT28F008_Close"
XDEF _MT28F008_Close
XDEF _MT28F008_Erase
XDEF _MT28F008_Write
XDEF _MT28F008_Read
XDEF _MT28F008_Init
XDEF _FlashError
XDEF _gucReadbackFailed
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -