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

📄 nand.asm

📁 完整的方案
💻 ASM
📖 第 1 页 / 共 2 页
字号:
EraseTestCir:  .EQU  0x8000
PgmTestCir:    .EQU  0x8000
EraseAll:
          R4=0
EraseAll0:
          CALL ClearWatchDog
          CALL EnUart
          R1=R4&0x0f
          JNE EraseAll_
          CALL TxChg
EraseAll_:
          R1=R4
          CALL TxHex
          CALL DiUart
          R1=R4
          CALL EraseBlock
          CMP R1, 0
          JE EraseAll__
          RETF
EraseAll__:
          R4+=0x01
          CMP R4, 0x800
          JNE EraseAll0
          R1=0
          RETF

EraseCurrentPageBlock:
          R1=R1 LSR 4
          R1=R1 LSR 1
          JMP EraseBlock
EraseCurrentAddrBlock:
           R1=R4 LSL 2
           TEST R3, BitF
           JE EraseCurrentAddrBlock1
           R1|=Bit1
EraseCurrentAddrBlock1:
           TEST R3, BitE
           JE EraseCurrentAddrBlock2
           R1|=Bit0
EraseCurrentAddrBlock2:
EraseBlock:
           R5=R1
           DATAOUT
           SCMD 0x60
           R1=R5 LSL 4
           R1=R1 LSL 1
           R1&=0xff
           SADR0

           R1=R5 LSR 3
           R1&=0xff
           .ifdef M64
           SADR
           R1=R5 LSR 3
           R1=R1 LSR 4
           R1=R1 LSR 4
           R1&=0xff
           .endif
           SADRE
           SCMD 0xd0
           SCMD 0x70
           R1=EraseTestCir
           PC=NandReadyTest
PgmSector:
           R5=R1
           DATAOUT
           SCMD 0x00
           SCMD 0x80
           R1=0
           SADR0
           R1=R5&0xff
           SADR
           R1=R5 LSR 4
           R1=R1 LSR 4
           .ifdef M64
           SADR
           R1=0
           .endif
           SADRE
           R4=0x200

PgmSector0:
           R1=[R4++]
           WBYTE
           R1=[R4++]
           WBYTE
           R1=[R4++]
           WBYTE
           R1=[R4++]
           WBYTE          
           CMP R4, 0x400
           JCC PgmSector0
           SCMD 0x10
           SCMD 0x70
           R1=PgmTestCir
NandReadyTest:
           TESTRB
           JNE NandReadyTest_
           R1-=1
           JNE NandReadyTest
           DATAOUT
           R1=1
           RETF
NandReadyTest_:
//           DATAIN
//           R1=8
//           CALL Delay0
//           R1=[P_IOB_Data]
//           TEST R1, Bit0
//           JNE NandReadyTestErr
NandReadyTestOk:
           DATAOUT
           R1=0
           RETF
NandReadyTestErr:
           DATAOUT
           R1=2
           RETF



VerifySector:
           R5=R1
           DATAOUT
           SCMD 0x00
           R1=0
           SADR0
           R1=R5&0xff
           SADR
           R1=R5 LSR 4
           R1=R1 LSR 4
           .ifdef M64
           SADR
           R1=0
           .endif
           SADRE
           R4=0x200
           DATAIN
           CALL DelayN
VerifySector0:
           RBYTE
           R1&=0xff
           CMP R1, [R4]
           JNE VerifySectorErr
           R4+=1
           CMP R4, 0x400
           JCC VerifySector0
           DATAOUT
           R1=0
           RETF
VerifySectorErr:
           DATAOUT
           R1=1
           RETF

ReadSector:
           R5=R1
           DATAOUT
           SCMD 0x00
           R1=0
           SADR0
           R1=R5&0xff
           SADR
           R1=R5 LSR 4
           R1=R1 LSR 4
           .ifdef M64
           SADR
           R1=0
           .endif
           SADRE
           R4=0x200
           DATAIN
           CALL DelayN
ReadSector0:
           RBYTE
           R1&=0xff
           [R4]=R1
           R4+=1
           CMP R4, 0x400
           JCC ReadSector0
           DATAOUT
           RETF

PrintSector:
           R5=R1
           CALL EnUart
           CALL TxChg
           DATAOUT
           SCMD 0x00
           R1=0
           SADR0
           R1=R5&0xff
           SADR
           R1=R5 LSR 4
           R1=R1 LSR 4
           .ifdef M64
           SADR
           R1=0
           .endif

           SADRE
           CALL DelayN
           DATAIN
           R4=0x200
PrintSector0:
           R1=R4&0x0f
           JNE PrintSector_
           CALL TxChg

PrintSector_:
           RBYTE
           R1&=0xff
           CALL TxHex
           [R4]=R1
           R4-=1
           JNE PrintSector0
           DATAOUT
           RETF


IDChip:
           DATAOUT
           CALL PrID
           SCMD 0x90
           SADR00
           DATAIN
           CALL DelayN
           RBYTE
           R1&=0xff
           [_Tmp1]=R1
           RBYTE
           R1&=0xff
           [_Tmp2]=R1
           RBYTE
           R1&=0xff
           [_Tmp3]=R1
           RBYTE
           R1&=0xff
           [_Tmp4]=R1
           DATAOUT
           CALL EnUart
           R1=[_Tmp1]
           CALL TxHex
           R1=[_Tmp2]
           CALL TxHex
           R1=[_Tmp3]
           CALL TxHex
           R1=[_Tmp4]
           CALL TxHex
           CALL DiUart
           R1=0x800
           [_NandMaxBank]=R1
           RETF

ReadNandByteBuf:
           DATAOUT 
           [_NandBufBak]=R4
           R4=R2
           TEST R3,Bit8
           JE ReadNandByteBuf2
ReadNandByteBuf1:
           SCMD 0x01
           JMP  ReadNandByteBuf3
ReadNandByteBuf2:
           SCMD 0x00
ReadNandByteBuf3:
           R1=R3&0xff
           SADR0
           R1=[_NandBufBak]
           TEST R1, Bit0
           JE ReadNandByteBuf5
ReadNandByteBuf4:
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           R1|=Bit7
           JMP ReadNandByteBuf6
ReadNandByteBuf5:
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
ReadNandByteBuf6:
           SADR
           R1=[_NandBufBak]
           R1=R1 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=[_NandBufBak]
           R1=R1 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN
ReadNandByteBuf0:
           RBYTE
           R1&=0xff
           [R4++]=R1
           R5-=1
           JE ReadNandByteBufE
           R3+=1
           JCS ReadNandByteChgB1
           R1=R3&0x1ff
           JNE ReadNandByteBuf0
           JMP ReadNandByteChgB2
ReadNandByteChgB1:
           R1=[_NandBufBak]
           R1+=1
           [_NandBufBak]=R1
ReadNandByteChgB2:
           DATAOUT
           PC=ReadNandByteBuf2
ReadNandByteBufE:
           DATAOUT
           RETF

ReadNandWordBuf:
           R5=R5 LSL 1
           DATAOUT 
           [_NandBufBak]=R4
           R4=R2
           TEST R3,Bit8
           JE ReadNandWordBuf2
ReadNandWordBuf1:
           SCMD 0x01
           JMP  ReadNandWordBuf3
ReadNandWordBuf2:
           SCMD 0x00
ReadNandWordBuf3:
           R1=R3&0xff
           SADR0
           R1=[_NandBufBak]
           TEST R1, Bit0
           JE ReadNandWordBuf5
ReadNandWordBuf4:
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           R1|=Bit7
           JMP ReadNandWordBuf6
ReadNandWordBuf5:
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
ReadNandWordBuf6:
           SADR
           R1=[_NandBufBak]
           R1=R1 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=[_NandBufBak]
           R1=R1 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN
ReadNandWordBuf0:
           TEST R5, Bit0
           JNE ReadNandWordBuf0_2
ReadNandWordBuf0_1:
           RBYTE
           R1&=0xff
           [R4]=R1
           JMP ReadNandWordBuf0_
ReadNandWordBuf0_2:
           RBYTE
           R1=R1 LSL 4
           R1=R1 LSL 4
           R1|=[R4]
           [R4++]=R1
ReadNandWordBuf0_:
           R5-=1
           JE ReadNandWordBufE
           R3+=1
           JCS ReadNandWordChgB1
           R1=R3&0x1ff
           JNE ReadNandWordBuf0
           JMP ReadNandWordChgB2
ReadNandWordChgB1:
           R1=[_NandBufBak]
           R1+=1
           [_NandBufBak]=R1
ReadNandWordChgB2:
           DATAOUT
           PC=ReadNandWordBuf2
ReadNandWordBufE:
           DATAOUT
           RETF


ReadNandByte:   
           DATAOUT
           TEST R3,Bit8
           JE ReadNandByte2
ReadNandByte1:
           SCMD 0x01
           JMP  ReadNandByte_
ReadNandByte2:
           SCMD 0x00
ReadNandByte_:
           R1=R3&0xff
           SADR0
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           TEST R4, Bit0
           JE ReadNandByte__
           R1|=Bit7
ReadNandByte__:
           SADR
           R1=R4 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=R4 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN
           RBYTE
           R5=R1&0xff
           DATAOUT
           R1=R5
           RETF

ReadNandWord:
           DATAOUT
           TEST R3,Bit8
           JE ReadNandWord2
ReadNandWord1:
           SCMD 0x01
           JMP  ReadNandWord_
ReadNandWord2:
           SCMD 0x00
ReadNandWord_:
           R1=R3&0xff
           SADR0
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           TEST R4, Bit0
           JE ReadNandWord__
           R1|=Bit7
ReadNandWord__:
           SADR
           R1=R4 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=R4 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN
           RBYTE
           R5=R1&0xff
           R1=R3&0x1ff
           CMP R1, 0x1ff
           JCS ReadNandWordAgain
           RBYTE
           R1=R1 LSL 4
           R1=R1 LSL 4
           R5|=R1
           DATAOUT
           R1=R5
           RETF

ReadNandWordAgain:
           DATAOUT
           R3+=1
           JCC ReadNandWordAgain_
           R4+=1
ReadNandWordAgain_:
           SCMD 0x00
           R1=R3&0xff
           SADR0
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           TEST R4, Bit0
           JE ReadNandWordAgain2__
           R1|=Bit7
ReadNandWordAgain2__:
           SADR
           R1=R4 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=R4 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN

⌨️ 快捷键说明

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