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

📄 flashstr.asm

📁 Utils and test SD card read write cycles
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;============================================================================;
;  Project    : Startup Code, Trap Functions for Hyflash ControlProgram      ;
;  Module     : FLASHSTR.ASM						     ;
;									     ;
;  Copyright  : hyperstone AG                				     ;
;		Line Eid Stra醗 3					     ;
;		D-78467 Konstanz, Germany				     ;
;									     ;
;  Date       : January  26, 2004       	                             ;
;============================================================================;

include "FLASHSTR.INC"
include "SYSCONST.INC"
include "SAMSUNG.INC"
include "PCMRTK.INC"

LED         EQU      0
ROM_ACTIVE  EQU      1
	    XREF     _main
	    XREF     _ClockDown
	    XREF     _CopyBuffer
	    XREF     _AnchorBuffer
	    XREF     _SaveAnchorBuffer
	    XREF     G7Base
	    XREF     G8Base
	    XREF     _ResetCardEntry
	    XREF     _UpdateFCRTrapEntry
	    XREF     _UpdateMCRTrapEntry
	    XREF     _SetTimer
	    XREF     _WriteSectorBuffer
	    XREF     _ChipSelectSkipOpcTrapEntry
	    XREF     _ChipSelectTrapEntry
	    XREF     _FlashIdleTrapEntry
	    XREF     _SetOpcTrapEntry
	    XREF     _SetAddrTrapEntry
	    XREF     _PollForReadyTrapEntry
	    XREF     _ReadStatusTrapEntry
	    XREF     _ReadWordTrapEntry
	    XREF     _WriteWordTrapEntry
	    XREF     _WaitForReadyTrapEntry
	    XREF     _SetOverlappedTrapEntry
	    XREF     _WriteChunkTrapEntry
            XREF     _ReadChunkTrapEntry
	    XREF     _ReadSectorFromFlash
	    XREF     _ReadDeviceIdTrapEntry
	    XREF     _WriteSectorToFlash
	    XREF     _SectorToPageTrapEntry
	    XREF     _NextSectorTrapEntry
	    XREF     _SetColumnTrapEntry
	    XREF     _ClearSectorTrapEntry
	    XREF     _PcmciaInterruptEntry
	    XREF     _FlashReadyInterruptEntry
	    XREF     _FlashReadyInterruptEntryForRemap
            XREF     PowerDown
	    XREF     TimerInterruptEntry
	    XREF     WaitGuardEntry
	    XREF     WaitGuardMaxEntry
	    XREF     DelayByTrapEntry
	    XREF     _UpdateBCRTrapEntry
	    XREF     _FlashIdle1TrapEntry
	    XREF     _FlashReadyInterrupt2Entry
if defined(SD) || defined(MMC)
	    XREF     _CommandCode
endif

	    SEGMENT  SysTableSegment

SysTrap63:  ADDI     PC, #Main-PC
SysTrap62:  MOVI     PC, #_ResetCardEntry
SysTrap61:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap60:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap59:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap58:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap57:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap56:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap55:  MOVI     PC, #TimerInterruptEntry
SysTrap54:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap53:  MOVI     PC, #_PcmciaInterruptEntry
SysTrap52:  MOVI     PC, #_FlashReadyInterrupt2Entry
SysTrap51:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap50:  ADDI     PC, #UninitializedIntEntry-PC
ifdef REMAP
SysTrap49:  MOVI     PC, #_FlashReadyInterruptEntryForRemap
else
SysTrap49:  MOVI     PC, #_FlashReadyInterruptEntry
endif
SysTrap48:  ADDI     PC, #UninitializedIntEntry-PC
SysTrap47:  MOVI     PC, #WaitGuardEntry
SysTrap46:  MOVI     PC, #WaitGuardMaxEntry
SysTrap45:  MOVI     PC, #_FlashIdle1TrapEntry
SysTrap44:  MOVI     PC, #DelayByTrapEntry
if !(defined(HITACHI) || defined(HITA256) || defined(HITA512))
SysTrap43:  ADDI     PC, #_ChipSelectSkipOpcTrapEntry-PC
else
SysTrap43:  ADDI     PC, #UninitializedIntEntry-PC
endif
SysTrap42:  MOVI     PC, #_UpdateFCRTrapEntry
SysTrap41:  MOVI     PC, #_UpdateMCRTrapEntry
SysTrap40:  MOVI     PC, #_UpdateBCRTrapEntry
SysTrap39:  MOVI     PC, #_ChipSelectTrapEntry
SysTrap38:  MOVI     PC, #_FlashIdleTrapEntry
SysTrap37:  MOVI     PC, #_SetOpcTrapEntry
SysTrap36:  MOVI     PC, #_SetAddrTrapEntry
SysTrap35:  MOVI     PC, #_PollForReadyTrapEntry
SysTrap34:  MOVI     PC, #_ReadStatusTrapEntry
SysTrap33:  MOVI     PC, #_ReadWordTrapEntry
SysTrap32:  MOVI     PC, #_WriteWordTrapEntry
SysTrap31:  MOVI     PC, #_WaitForReadyTrapEntry
SysTrap30:  MOVI     PC, #_SetOverlappedTrapEntry
SysTrap29:  MOVI     PC, #_WriteChunkTrapEntry
SysTrap28:  MOVI     PC, #_ReadChunkTrapEntry
SysTrap27:  MOVI     PC, #_ReadSectorFromFlash
SysTrap26:  MOVI     PC, #_ReadDeviceIdTrapEntry
SysTrap25:  MOVI     PC, #_SectorToPageTrapEntry
if !(defined(HITACHI) || defined(HITA256) || defined(HITA512))
SysTrap24:  MOVI     PC, #_NextSectorTrapEntry
SysTrap23:  MOVI     PC, #_SetColumnTrapEntry
SysTrap22:  MOVI     PC, #_ClearSectorTrapEntry
endif
if defined(SD) || defined(MMC)
SysTrap21:  D.WU     _CommandCode
endif
ifdef REMAP
XREF _RegisterErrorTrapEntry
SysTrap20:  MOVI     PC, #_RegisterErrorTrapEntry
endif
XDEF _FirmwareVersion
_FirmwareVersion:
Version:    D.Bc[8]  "040409CD"
ifdef SD
ifdef B128
	    D.Bc[4]  " SD8"
else
	    D.Bc[4]  " SD "
endif
endif
ifdef MMC
            D.Bc[4]  " MMC"
endif
	    SEGMENT  StackSegment
STACK_SIZE  EQU      128
Stack:      D.WU[STACK_SIZE] [STACK_SIZE]$aa55aa55
StackEnd:

if LED
	    SEGMENT  trapcode
	    XDEF     _SetRedLed
	    XDEF     _SetGreenLed
	    XDEF     _ClearRedLed
	    XDEF     _ClearGreenLed

MCR_ADDR    EQU      $000013B8 | (4 << 13)

_SetRedLed: FRAME    L3, L0
	    LDW.IOA  0, L2, MCR_ADDR
	    ORI      L2, 1<<2
	    STW.IOA  0, L2, MCR_ADDR
	    RET      PC, L0

_SetGreenLed:
	    FRAME    L3, L0
	    LDW.IOA  0, L2, MCR_ADDR
	    ORI      L2, 1<<3
	    STW.IOA  0, L2, MCR_ADDR
	    RET      PC, L0

_ClearRedLed:
	    FRAME    L3, L0
            LDW.IOA  0, L2, MCR_ADDR
	    ANDNI    L2, 1<<2
	    STW.IOA  0, L2, MCR_ADDR
	    RET      PC, L0
_ClearGreenLed:
	    FRAME    L3, L0
	    LDW.IOA  0, L2, MCR_ADDR
	    ANDNI    L2, 1<<3
	    STW.IOA  0, L2, MCR_ADDR
	    RET      PC, L0
endif

	    SEGMENT  trapcode

;============================================================================;
; Function   : UninitializedInterrupt                                        ;
;============================================================================;

UninitializedIntEntry:
if LED
if 1
frame L6,L0
LDW.IOA   0, L3, 150994952  ;read_isr
	    MOVI     L4, 1<<11           ; need Addressbus for Leds
	    MOVI     L5, 0
	    UpdateFCR
	    LDW.IOA  0, L5, MCR_ADDR     ; Red Led
	    ORI      L5, 1<<2
	    STW.IOA  0, L5, MCR_ADDR
movi  L4, $4000f000
stw.p L4, L0
stw.p L4, L1
;stw.p L4, L3  ; isr
stw.p L4, G14 ; DebugAddress
stw.p L4, G2  ; NumberOfTwins
stw.p L4, G3  ; ErrorReg
stw.p L4, G4  ; StatusReg
stw.p L4, G6  ; EventFlags
stw.p L4, G7  ; BaseReg
stw.p L4, G10 ; BCR
stw.p L4, G9  ; TwinEntry
stw.p L4, G13 ; OverlappedFlags
   setadr L3
stw.p L4, L3  ; StackAddr
loop:
   Ldw.s L3, L5, 0
   addi  L3, -4
   stw.p L4, L5
   cmpi  L4, $4000f200
   bne   loop
else
SECTOR_NUMBER EQU $1ffe0
;MCR_ADDR    EQU      $000013B8 | (4 << 13)
	    LDW.IOA  0, G6, MCR_ADDR     ; Red Led
	    ORI      G6, 1<<2
	    STW.IOA  0, G6, MCR_ADDR
xref _ERASE_COUNT
xref _WriteSector
xref _ReadSectorFromFlash
xref _ChunkTab

frame L8,L0
   movi  L3, SECTOR_NUMBER+2
   movi  L4, $c0003c00
   movi  L5, _ChunkTab
   movi  L6, WITH_ECC
   movi  L7, $12345678
   call  L8, 0, #_WriteSector
movi  L4, $c0003c00
stw.p L4, L0
stw.p L4, G2
stw.p L4, G9
   setadr L3
stw.p L4, L3
loop:
   Ldw.s L3, L5, 0
   addi  L3, -4
   stw.p L4, L5
   cmpi  L4, $c0003e00
   bne   loop
   movi  L4, -1
   stw.a 0, L4, #_ERASE_COUNT
   movi  L3, SECTOR_NUMBER
   movi  L4, $c0003c00
   movi  L5, _ChunkTab
   movi  L6, WITH_ECC
   movi  L7, $12345678
   call  L8, 0, #_WriteSector
   movi  L3, SECTOR_NUMBER+1
   movi  L4, #_AnchorBuffer
   movi  L5, _ChunkTab
   movi  L6, WITH_ECC
   movi  L7, $12345678
   call  L8, 0, #_WriteSector
   movi  L0, SECTOR_NUMBER-32
   movi  L1, $c0000000
   movi  L2, 32
loop1:
   movd  L3, L0
   movi  L5, _ChunkTab
   movi  L6, WITH_ECC
   movi  L7, $12345678
   call  L8, 0, #_WriteSector
   addi  L0, 1
   addi  L1, 512
   addi  L2, -1
   bne   loop1
   movi  L3, 0
   movi  L4, $c0003c00
   call  L5, 0, #_ReadSectorFromFlash
   movi  L3, 0
   movi  L4, $c0003c00
   stw.r L4, 0
   movi  L5, _ChunkTab

⌨️ 快捷键说明

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