⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 k9f2808u0c.inc

📁 在台湾义统公司ET44M210开发实验板环境下
💻 INC
字号:
/* //INCLUDE	"K9F2808U0C.H"
INCLUDE	"ET44M210_REG.H"


	ORG		0X0000
	JMP		START
	
	
;********************************************************	
INCLUDE	"DEFINE_REG.H"
INCLUDE "ET83X432_CODEC.INC"
;********************************************************



START:
	
		CALL    IO_INITIAL
	

        
FLASH_MAIN:
		CALL    IO_INITIAL
		
		CALL	FLASH_READ_ID
		MOV		A,MAKER_CODE
		MOV		A,FLASH_ID
		SUB		A,#0X73
		JBC		STATUS,Z,$							;CAN'T READ ID,STOP
		
		//CALL	VERIFY_INVALID_BLOCK_BEFORE_ERASE	;VERIFY  INVALID BLOCK 
													;USE FOR NEW FLASH
		CALL	ERASE_FIRST_BLOCK
		
		CALL	READ_FIRST_HALF_PAGE
		
		MOV		A,#0X55
		MOV		FLASH_WRITE_DATA,A
		
		CALL	WRITE_FIRST_PAGE					;WRITE 55
		
		CALL	WRITE_BANK
		
		CALL	READ_FIRST_HALF_PAGE
		//CALL	READ_SPARE_FIELD
		
		
		
		
		
		JMP		$
		
;main program over		*/


;================================================
;Subsrute begin
;================================================
FLASH_READ_ID_OK:
		CALL	FLASH_READ_ID
		MOV		A,MAKER_CODE
		MOV		A,FLASH_ID
		SUB		A,#0X73
		JBC		STATUS,Z,$
RET
;***********************************************************************************

ERASE_FIRST_BLOCK:
		MOV		A,#0X00
		MOV		ROW_ADDRESS_LOW,A
		
		MOV		A,#0X00
		MOV		ROW_ADDRESS_HIGH,A
		CALL	ERASE_ONE_BLOCK
		
RET
;***********************************************************************************
WRITE_FIRST_PAGE:
	
		MOV		A,#0X00
		MOV		COLUMN_ADDRESS,A

		MOV		A,#0X00
		MOV		ROW_ADDRESS_LOW,A
		
		MOV		A,#0X00
		MOV		ROW_ADDRESS_HIGH,A
		CALL	PROGRAM_ONE_PAGE
RET
;***********************************************************************************
READ_FIRST_HALF_PAGE_TO_BANK:
		MOV		A,#0X00
		MOV		READ_CMD,A
		
		MOV		A,#0X00
		MOV		COLUMN_ADDRESS,A

		CALL	READ_ONE_PAGE
RET
;***********************************************************************************
READ_SECOND_HALF_PAGE:
		MOV		A,#0X01
		MOV		READ_CMD,A
		
		MOV		A,#0X80
		MOV		COLUMN_ADDRESS,A
		
		CALL	READ_ONE_PAGE
RET
;***********************************************************************************
READ_SPARE_FIELD:
		MOV		A,#0X50
		MOV		READ_CMD,A
		
		MOV		A,#0X00
		MOV		COLUMN_ADDRESS,A
		
		MOV		A,#0X00
		MOV		ROW_ADDRESS_LOW,A
		
		MOV		A,#0X00
		MOV		ROW_ADDRESS_HIGH,A
		CALL	READ_ONE_PAGE
RET
;***********************************************************************************
ERASE_ONE_BLOCK:
		MOV		A,#0X60					;
		MOV		COMMAND_VAL,A
		CALL	COMMAND_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_LOW
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_HIGH
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,#0XD0					;
		MOV		COMMAND_VAL,A
		CALL	COMMAND_LATCH_INTO
		CALL	DELAY_1MS
		
		CALL	READ_STATUS
		MOV		A,FLASH_STATUS
		SUB		A,#0
		JBS		STATUS,Z,ERASE_ONE_BLOCK_OK
		JMP		$
ERASE_ONE_BLOCK_OK:				
RET		
;***********************************************************************************
PROGRAM_ONE_PAGE_FROM_BANK:
		CLR		RE_PROGRAM_COUNT
		
		MOV		A,#0X80					;
		MOV		COMMAND_VAL,A
		
		CALL	COMMAND_LATCH_INTO
		
		MOV		A,COLUMN_ADDRESS
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_LOW
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_HIGH
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO

		CALL	WRITE_512_DATA_TO_ONE_PAGE_FROM_BANK//WRITE_528_DATA_TO_ONE_PAGE_FROM_BANK		

		MOV		A,#0X10								;10H INITIATES PROGRAM
		MOV		COMMAND_VAL,A
		CALL	COMMAND_LATCH_INTO
		
		CALL	READ_STATUS
		MOV		A,FLASH_STATUS
		SUB		A,#0
		JBS		STATUS,Z,PROGRAM_ONE_PAGE_FROM_BANK_OK
		CALL	ERASE_ONE_BLOCK
		INC		RE_PROGRAM_COUNT
		MOV		A,RE_PROGRAM_COUNT
		SUB		A,#2
		JBS		STATUS,Z,$
		JMP		PROGRAM_ONE_PAGE_FROM_BANK
PROGRAM_ONE_PAGE_FROM_BANK_OK:				
RET
;***********************************************************************************
PROGRAM_ONE_PAGE:
		CLR		RE_PROGRAM_COUNT
		
		MOV		A,#0X80					;
		MOV		COMMAND_VAL,A
		
		CALL	COMMAND_LATCH_INTO
		
		MOV		A,COLUMN_ADDRESS
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_LOW
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_HIGH
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		//CALL	DELAY_100US
		
FIRST_256BYTE:
		CALL	WRITE_ONE_DATA
		INC		WRITE_BYTE_COUNT			;0-255
		MOV		A,#0X00
		SUB		A,WRITE_BYTE_COUNT
		JBC		STATUS,Z,FIRST_256BYTE
		CLR		WRITE_BYTE_COUNT
		JMP		SECOND_256BYTE
SECOND_256BYTE:
		CALL	WRITE_ONE_DATA
		INC		WRITE_BYTE_COUNT
		MOV		A,#0X00
		SUB		A,WRITE_BYTE_COUNT
		JBC		STATUS,Z,SECOND_256BYTE
		CLR		WRITE_BYTE_COUNT
		JMP		SPARE_16BYTE		
SPARE_16BYTE:
		CALL	WRITE_ONE_DATA
		INC		WRITE_BYTE_COUNT
		MOV		A,#16
		SUB		A,WRITE_BYTE_COUNT
		JBC		STATUS,Z,SPARE_16BYTE
		CLR		WRITE_BYTE_COUNT
			
		
		MOV		A,#0X10								;10H INITIATES PROGRAM
		MOV		COMMAND_VAL,A
		CALL	COMMAND_LATCH_INTO
		
		CALL	READ_STATUS
		MOV		A,FLASH_STATUS
		SUB		A,#0
		JBS		STATUS,Z,PROGRAM_ONE_PAGE_OK
		CALL	ERASE_ONE_BLOCK
		INC		RE_PROGRAM_COUNT
		MOV		A,RE_PROGRAM_COUNT
		SUB		A,#2
		JBS		STATUS,Z,$
		JMP		PROGRAM_ONE_PAGE
PROGRAM_ONE_PAGE_OK:				
RET
;***********************************************************************************		
READ_ONE_PAGE:
		CLR		PAGE_BYTE_COUNT						;0-128 CHECK PAGE END
		MOV		A,#0X02
		MOV		BANK_COUNT,A
		MOV		RAMBS1,A
		MOV		A,#0X80
		MOV		IAP1,A

		MOV		A,READ_CMD//#0X00					;00H READ1 0-527BYTE
		MOV		COMMAND_VAL,A
		
		CALL	COMMAND_LATCH_INTO
		
		MOV		A,COLUMN_ADDRESS//#0X00
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_LOW//#0X00
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_HIGH//#0X00
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		CALL	DELAY_20US
		
		
READ_NEXT:
		CALL	READ_ONE_DATA
		MOV		A,READ_DATA_VALUE
		MOV		IAC1,A
		INC		IAP1
		INC		PAGE_BYTE_COUNT
		MOV		A,IAP1
		SUB		A,#0X00
		JBC		STATUS,Z,READ_NEXT
		JMP		CHECK_CHANGE_BANK
CHECK_CHANGE_BANK:
		MOV		A,BANK_COUNT				;CHECK BANK 5 FULL
		SUB		A,#5						;BANK_COUNT==5,BANK FULL
		JBS		STATUS,Z,CHECK_PAGE_END		;IF BANK 5 FULL,CHECK PAGE END
		JMP		CHANGE_BANK
		
CHANGE_BANK:	
		INC		BANK_COUNT
		CLR		PAGE_BYTE_COUNT
		MOV		A,BANK_COUNT				;SELECT BANK
		MOV		RAMBS1,A
		MOV		A,#0X80						;first Register	address
		MOV		IAP1,A
		JMP		READ_NEXT
CHECK_PAGE_END:
		MOV		A,PAGE_BYTE_COUNT			;0-127		TOTAL 128BYTE
		SUB		A,#0X80						;0-127 BYTE
		JBC		STATUS,Z,READ_NEXT
				
RET		
;***********************************************************************************		
READ_STATUS:
		//CALL	DELAY_50US
		JBC		FLASH_CON_PORT,RB,$			;CHECK BUSY
		
		MOV		A,#0X70
		MOV		COMMAND_VAL,A
		
		CALL	COMMAND_LATCH_INTO

CHECK_BUSY:
		CALL	READ_ONE_DATA				;WHEN READY,READ STATUS
		MOV		A,READ_DATA_VALUE
		MOV		FLASH_STATUS,A
CHECK_IO0:
		AND		A,#0B000000001
		SUB		A,#0B000000001
		JBS		STATUS,Z,FAIL
		JMP		PASS
FAIL:
		MOV		A,#1
		MOV		FLASH_STATUS,A
RET

PASS:
		MOV		A,#0
		MOV		FLASH_STATUS,A
RET

;***********************************************************************************					

FLASH_READ_ID:
		MOV		A,#0X90
		MOV		COMMAND_VAL,A
		
		CALL	COMMAND_LATCH_INTO
		
		MOV		A,#0X00
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		CALL	READ_ONE_DATA
		MOV		A,READ_DATA_VALUE
		MOV		MAKER_CODE,A
		
		CALL	READ_ONE_DATA
		MOV		A,READ_DATA_VALUE
		MOV		FLASH_ID,A
RET		
;***********************************************************************************
COMMAND_LATCH_INTO://FLASH_READ_ID:			;FLASH CONTROL PORT

		BS		FLASH_CON_PORT,CE			;COMMAND_LATCH_INTO_INITAIL
		BC		FLASH_CON_PORT,CLE
		BS		FLASH_CON_PORT,WE
		BC		FLASH_CON_PORT,ALE
		BS		FLASH_CON_PORT,RE

		BC		FLASH_CON_PORT,CE			;CHIP ENABLE
		BS		FLASH_CON_PORT,CLE			;COMMAND LATCH ENABLE
		BC		FLASH_CON_PORT,WE			;WRITE ENABLE
		//BC		FLASH_CON_PORT,ALE
		//BS		FLASH_CON_PORT,RE
		CALL	DATA_PORT_OUT_INITIAL		;MCU OUTPUT,FLASH READ COMMAND
		MOV		A,COMMAND_VAL				;DATA SETUP
		MOV		DATA_PORT,A					;
		
		BS		FLASH_CON_PORT,WE			;LATCH INTO THE COMMAND
RET		
;********************************************************
		
ADDRESS_LATCH_INTO:	

		//BC		FLASH_CON_PORT,CE			;CHIP ENABLE
		BC		FLASH_CON_PORT,CLE
		//BC		FLASH_CON_PORT,WE
		BS		FLASH_CON_PORT,ALE
		BC		FLASH_CON_PORT,WE
		
		CALL	DATA_PORT_OUT_INITIAL			;MCU OUTPUT,FLASH READ ADDRESS
		MOV		A,ADDRESS_VALUE					;DATA SETUP
		MOV		DATA_PORT,A				
		
		BS		FLASH_CON_PORT,WE
		BC		FLASH_CON_PORT,ALE
		
RET
;********************************************************
WRITE_ONE_DATA:
		BC		FLASH_CON_PORT,WE
		CALL	DATA_PORT_OUT_INITIAL			;MCU OUTPUT,MCU WRITE A DATA TO FLASH
		MOV		A,FLASH_WRITE_DATA
		MOV		DATA_PORT,A
						
		BS		FLASH_CON_PORT,WE
		
RET
		
;********************************************************
READ_ONE_DATA:

		BC		FLASH_CON_PORT,RE				;RE IS LOW,ENABLE READ DATA
		
		CALL	DATA_PORT_IN_INITIAL			;MCU INPUT,MCU READ A DATA
		MOV		A,DATA_PORT
		MOV		READ_DATA_VALUE,A				
		
		BS		FLASH_CON_PORT,RE
		
								
		//BC	FLASH_CON_PORT,RE
		//CALL	DATA_PORT_IN_INITIAL
		//MOV	A,DATA_PORT
		//MOV	FLASH_ID,A
RET
;***********************************************************************************
WRITE_512_DATA_TO_ONE_PAGE_FROM_BANK://WRITE_528_DATA_TO_ONE_PAGE_FROM_BANK:
	MOV		A,#1
	MOV		BANK_COUNT,A
READ_BANK_INITIAL:
	INC		BANK_COUNT
	MOV		A,BANK_COUNT
	MOV		RAMBS1,A

	MOV		A,#0X80
	MOV		IAP1,A
	CALL	DELAY_5US
NEXT_REGI:							;NEXT REGISTER
	MOV		A,IAC1
	MOV		FLASH_WRITE_DATA,A
	CALL	WRITE_ONE_DATA
	INC		IAP1
	MOV		A,IAP1
	SUB		A,#0
	JBS		STATUS,Z,READ_BANK_CHANGE
	JMP		NEXT_REGI
	
READ_BANK_CHANGE:
	MOV		A,BANK_COUNT
	SUB		A,#5
	
	JBS		STATUS,Z,READ_BANK_END
	JMP		READ_BANK_INITIAL
	
READ_BANK_END:

RET		

;***********************************************************************************
ZERO_ADDRESS:
		MOV		A,#0X00
		MOV		COLUMN_ADDRESS,A

		MOV		A,#0X00
		MOV		ROW_ADDRESS_LOW,A
		
		MOV		A,#0X00
		MOV		ROW_ADDRESS_HIGH,A
RET		

;***********************************************************************************
WRITE_BANK:
	MOV		A,#1
	MOV		BANK_COUNT,A
SET_BANK_INITIAL:
	INC		BANK_COUNT
	MOV		A,BANK_COUNT
	MOV		RAMBS1,A

	MOV		A,#0X80
	MOV		IAP1,A
NEXT_REGISTER:
	MOV		A,#0X0F
	MOV		IAC1,A
	INC		IAP1
	MOV		A,IAP1
	SUB		A,#0
	JBS		STATUS,Z,BANK_CHANGE
	JMP		NEXT_REGISTER
	
BANK_CHANGE:
	MOV		A,BANK_COUNT
	SUB		A,#5
	
	JBS		STATUS,Z,WRITE_BANK_END
	JMP		SET_BANK_INITIAL
	
WRITE_BANK_END:

RET		
;************************************************
ROTATE_LEFT:
		BC		STATUS,C
		RLC		ROTATE_VALUE_0,#1
		RLC		ROTATE_VALUE_1,#1
		DJZ		ROTATE_COUNT,ROTATE_END
		JMP		ROTATE_LEFT
ROTATE_END:
RET
			
;***********************************************************************************
ERASE_MAX_NUM_BLOCK:
ERASE_NEXT_BLOCK:
		CALL	ERASE_ONE_BLOCK
		INC		BLOCK_COUNT		
INC_BLOCK_NUM_LOW:				
		INC		BLOCK_ADDRESS_LOW
		JBS		STATUS,C,INC_BLOCK_NUM_HIGH
		
		MOV		A,BLOCK_COUNT//#0B00000100
		SUB		A,MAX_BLOCK_NUM
		JBS		STATUS,Z,LAST_BLOCK	
		JMP		CACULATE_PAGE_NUM					;BLOCK *32==PAGE ADDRESS
		
INC_BLOCK_NUM_HIGH:
		INC		BLOCK_ADDRESS_HIGH
		MOV		A,BLOCK_COUNT//#0B00000100
		SUB		A,MAX_BLOCK_NUM
		JBS		STATUS,Z,LAST_BLOCK			;LAST BLOCK #OB00000100 00000000
		
CACULATE_PAGE_NUM:
		MOV		A,#5
		MOV		ROTATE_COUNT,A
		MOV		A,BLOCK_ADDRESS_LOW
		MOV		ROTATE_VALUE_0,A
		MOV		A,BLOCK_ADDRESS_HIGH
		MOV		ROTATE_VALUE_1,A
		
		CALL	ROTATE_LEFT								;CACULATE PAGE ADDRESS
	
		MOV		A,ROTATE_VALUE_0
		MOV		ROW_ADDRESS_LOW,A
		
		MOV		A,ROTATE_VALUE_1
		MOV		ROW_ADDRESS_HIGH,A
			
		JMP		ERASE_NEXT_BLOCK	
LAST_BLOCK:
		CLR		BLOCK_COUNT		
RET		
;***********************************************************************************		
;***********************************************************************************
VERIFY_INVALID_BLOCK_BEFORE_ERASE:			;REFER TO K9F2808U0C DATASHEET,PAGE 12

		CLR		BLOCK_ADDRESS_LOW
		CLR		BLOCK_ADDRESS_HIGH
		CLR		PAGE_COUNT
		MOV		A,#0B00000100
		MOV		MAX_BLOCK_NUM,A
		MOV		A,#0X50
		MOV		READ_CMD,A
		
		MOV		A,#0X05
		MOV		COLUMN_ADDRESS,A
		
		MOV		A,#0X00						;BLOCK ADDRESS==0
		MOV		ROW_ADDRESS_LOW,A
		
		MOV		A,#0X00
		MOV		ROW_ADDRESS_HIGH,A
		
		
CHECK_NEXT_BLOCK_FIRST_PAGE:
CHECK_SAME_BLOCK_SECOND_PAGE:

		MOV		A,READ_CMD					;50H READ1 511-527BYTE
		MOV		COMMAND_VAL,A
		
		CALL	COMMAND_LATCH_INTO
		
		MOV		A,#0X05
		OR		COLUMN_ADDRESS,A
		MOV		A,COLUMN_ADDRESS//#0X00
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_LOW//#0X00
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		
		MOV		A,ROW_ADDRESS_HIGH//#0X00
		MOV		ADDRESS_VALUE,A
		CALL	ADDRESS_LATCH_INTO
		CALL	DELAY_20US
		

		CALL	READ_ONE_DATA
		INC		PAGE_COUNT
		MOV		A,READ_DATA_VALUE
		SUB		A,#0XFF
		JBS		STATUS,Z,CHECK_PAGE_COUNT		;1st or 2nd PAGE'S 517 BYTE IN EACH BLOCK==FF VALID
		JMP		RECORD_INVALID_BLOCK
CHECK_PAGE_COUNT:
		MOV		A,#2
		SUB		A,PAGE_COUNT
		JBC		STATUS,Z,INC_ROW_ADDRESS_LOW	;PAGE_COUNT==1,NEXT PAGE
		CLR		PAGE_COUNT
		JMP		INC_BLOCK_ADDRESS_LOW			;PAGE_COUNT==2,NEXT BLOCK
INC_ROW_ADDRESS_LOW:
		
		INC		ROW_ADDRESS_LOW
		JBS		STATUS,C,INC_ROW_ADDRESS_HIGH
		JMP		CHECK_SAME_BLOCK_SECOND_PAGE					;BLOCK *32==PAGE ADDRESS
INC_ROW_ADDRESS_HIGH:
		INC		ROW_ADDRESS_HIGH
		JMP		CHECK_SAME_BLOCK_SECOND_PAGE
				
INC_BLOCK_ADDRESS_LOW:
		INC		BLOCK_ADDRESS_LOW
		JBS		STATUS,C,INC_BLOCK_ADDRESS_HIGH
		JMP		CACULATE_PAGE_ADDRESS					;BLOCK *32==PAGE ADDRESS
		
INC_BLOCK_ADDRESS_HIGH:
		INC		BLOCK_ADDRESS_HIGH
		MOV		A,MAX_BLOCK_NUM//#0B00000100
		SUB		A,BLOCK_ADDRESS_HIGH
		JBS		STATUS,Z,VERIFY_INVALID_END				;LAST BLOCK #OB00000100 00000000
CACULATE_PAGE_ADDRESS:
		MOV		A,#5
		MOV		ROTATE_COUNT,A
		MOV		A,BLOCK_ADDRESS_LOW
		MOV		ROTATE_VALUE_0,A
		MOV		A,BLOCK_ADDRESS_HIGH
		MOV		ROTATE_VALUE_1,A
		
		CALL	ROTATE_LEFT								;CACULATE PAGE ADDRESS
	
		MOV		A,ROTATE_VALUE_0
		MOV		ROW_ADDRESS_LOW,A
		
		MOV		A,ROTATE_VALUE_1
		MOV		ROW_ADDRESS_HIGH,A
		
		JMP		CHECK_NEXT_BLOCK_FIRST_PAGE		
		
		
		
RECORD_INVALID_BLOCK:					;WRITE IN LAST BLOCK
		JMP		$
						
VERIFY_INVALID_END:
				
RET		
;***********************************************************************************
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -