📄 pageread.asm
字号:
#include <def21262.h>
.global FLASH_READ_Command;
.extern BYTE_PPDMA;
.extern page_read_cmd;
.extern PP_DMA_READ;
.extern PP_DMA_WRITE;
//delay funcntions
.extern CLE_delay_func;
.extern ALE_delay_func;
.extern AFTER_RD_WR_delay_func;
.extern Delay_Before_Return_func;
//
.section/pm seg_dmda;
.var Read_Row_Addr[1] = 0;
.section/pm seg_pmco;
//PAGE READ Command
FLASH_READ_Command:
//Generate page address from r12, r13, r14 and r15
r11 = 0;//Initialize to "0"
r13 = LSHIFT r13 by 8; //left shift by 8
r14 = LSHIFT r14 by 16; //left shift by 16
r15 = LSHIFT r15 by 24; //left shift by 24
r11 = r12 or r13;
r11 = r11 or r14;
r11 = r11 or r15;//r11 has the generated block address
bit clr FLAGS FLG0; //enable chip - FLASH CS# asserted here
bit set FLAGS FLG1; //Drive CLE "HI" for the command phase
//First byte - command "0x00"
i0 = page_read_cmd;
r7 = i0;
r8 = 1;//external memory byte transfer count
m0 = 1;//modifier to select next byte of command
CALL BYTE_PPDMA;
idle;//wait for PP Interrupt
CALL CLE_delay_func;//call CLE delay
bit clr FLAGS FLG1;
//Drive ALE "HI" - address phase
bit set FLAGS FLG2;
//Write "column", "row_1_2_3" address
i1 = Read_Row_Addr;
dm(i1,0) = r11;
r7 = i1;
r8 = 4;//external memory byte transfer count
CALL BYTE_PPDMA;
idle;//wait for PP Interrupt
//Drive ALE "LO"
CALL ALE_delay_func;//call ALE delay
bit clr FLAGS FLG2;
idle;//wait for DAI Interrupt/BUSY (R/B#) signal from NAND FLASH
//read data DN, DN+1......DN+527
r8 = 528;//external memory byte transfer count
r7 = i4;
r6 = LSHIFT r8 by -2;//internal packed word count = r8 / 4
CALL PP_DMA_READ;
idle;//wait for PP Interrupt
CALL AFTER_RD_WR_delay_func;//Delay after read / write
bit set FLAGS FLG0;//Disable chip - FLASH CS# de-asserted
CALL Delay_Before_Return_func;
RTS;
FLASH_READ_Command.end:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -