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

📄 mpmc_pl175_ddr.s_lauto.svn-base

📁 Spearhead2000 的 USB驱动程序
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
    STR     a2, [a1, #0]    ; /* Program MPMCDynamictRAS register */    ; ((PL175_sRegisters *) eBase)->DynamictRAS = pInitial->sConfig.DynamictRAS;      LDR     a2, =PL175_DYNAMIC_TRAS_INIT    LDR     a1, =MPMCDynamictRAS    STR     a2, [a1, #0]    ; /* Program MPMCDynamictSREX register */    ; ((PL175_sRegisters *) eBase)->DynamictSREX = pInitial->sConfig.DynamictSREX;      LDR     a2, =PL175_DYNAMIC_TSREX_INIT    LDR     a1, =MPMCDynamictSREX    STR     a2, [a1, #0]    ; /* Program MPMCDynamictWR register */    ; ((PL175_sRegisters *) eBase)->DynamictWR = pInitial->sConfig.DynamictWR;      LDR     a2, =PL175_DYNAMIC_TWR_INIT    LDR     a1, =MPMCDynamictWR    STR     a2, [a1, #0]    ; /* Program MPMCDynamictRC register */    ; ((PL175_sRegisters *) eBase)->DynamictRC = pInitial->sConfig.DynamictRC;      LDR     a2, =PL175_DYNAMIC_TRC_INIT    LDR     a1, =MPMCDynamictRC    STR     a2, [a1, #0]    ; /* Program MPMCDynamictRFC register */    ; ((PL175_sRegisters *) eBase)->DynamictRFC = pInitial->sConfig.DynamictRFC;      LDR     a2, =PL175_DYNAMIC_TRFC_INIT    LDR     a1, =MPMCDynamictRFC    STR     a2, [a1, #0]    ; /* Program MPMCDynamictXSR register */    ; ((PL175_sRegisters *) eBase)->DynamictXSR = pInitial->sConfig.DynamictXSR;      LDR     a2, =PL175_DYNAMIC_TXSR_INIT    LDR     a1, =MPMCDynamictXSR    STR     a2, [a1, #0]      ; /* Program MPMCDynamictRRD register */    ; ((PL175_sRegisters *) eBase)->DynamictRRD = pInitial->sConfig.DynamictRRD;      LDR     a2, =PL175_DYNAMIC_TRRD_INIT    LDR     a1, =MPMCDynamictRRD    STR     a2, [a1, #0]    ; /* Program MPMCDynamictMRD register */    ; ((PL175_sRegisters *) eBase)->DynamictMRD = pInitial->sConfig.DynamictMRD;      LDR     a2, =PL175_DYNAMIC_TMRD_INIT    LDR     a1, =MPMCDynamictMRD    STR     a2, [a1, #0]    ; /* Program MPMCDynamictCDLR register */    ; ((PL175_sRegisters *) eBase)->DynamictCDLR = pInitial->sConfig.DynamictCDLR;      LDR     a2, =PL175_DYNAMIC_TCDLR_INIT    LDR     a1, =MPMCDynamictCDLR    STR     a2, [a1, #0]    ; /* Program MPMCStaticExtendedWait register */    ; ((PL175_sRegisters *) eBase)->StaticExtendedWait = pInitial->sConfig.StaticExtendedWait;    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;    ; Program Dynamic memory #0    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;        ; /* Program MPMCDynamicRasCas register[] */									          ; ((PL175_sDynamicRegs *) pMemRegs)->DynamicRasCas =								          ; 	apBIT_BUILD( PL175_DYNAMIC_RASCAS_RAS, ((apPL175_sDynamicConfig *)pMemConfig)->eDynamicRASLatency ) |	          ;	apBIT_BUILD( PL175_DYNAMIC_RASCAS_CAS, ((apPL175_sDynamicConfig *)pMemConfig)->eDynamicCASLatency );	            LDR     a2, =PL175_RAS_CAS_LATENCY    LDR     a1, =MPMCDynamicRasCas0    STR     a2, [a1, #0]    ; /* Program MPMCDynamicConfig[] register */									          ; ((PL175_sDynamicRegs *) pMemRegs)->DynamicConfig =								          ;	apBIT_BUILD( PL175_DYNAMIC_CONFIG_MD, ((apPL175_sDynamicConfig *)pMemConfig)->eDynamicMemoryDevice   ) |          ;	apBIT_BUILD( PL175_DYNAMIC_CONFIG_AM, ((apPL175_sDynamicConfig *)pMemConfig)->eDynamicAddressMapping ) |          ;	apBIT_BUILD( PL175_DYNAMIC_CONFIG_P,  ((apPL175_sDynamicConfig *)pMemConfig)->eDynamicWriteProtect   );             LDR     a2, =PL175_CONFIG    LDR     a1, =MPMCDynamicConfig0    STR     a2, [a1, #0]     ;/* Select command write mode */    ;((PL175_sRegisters *) eBase)->DynamicControl =    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_CE,   apPL175_CLK_DRIVEN_HIGH )   |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_CS,   apPL175_CLKOUT_RUNS ) |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_SR,   apPL175_NORMAL_MODE )       |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_SRMCC,  apPL175_CLKOUT_SREF_RUN )	|    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_IMCC, apPL175_NCLKOUT_ENABLED )   |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_MCC,  apPL175_CLKOUT_ENABLED )    |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_I,    apPL175_INIT_MODE )	      |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DC,   apPL175_DLL_HANDSHAKING_DISABLED )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DE,   apPL175_DLL_HANDSHAKING_DISABLED )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DP,   apPL175_NORMAL_OPERATION )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_NRP,  apPL175_RP_HIGH )	      |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_RPV,  apPL175_RPVHH_NORMAL );    LDR     a2, =0x008b    LDR     a1, =MPMCDynamicControl    STR     a2, [a1, #0]    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;    ; Program Mode and ExtMode registers for dynamic #0    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;        ; /* If the Extended Mode Register has been set , perform additional read	             ;  * to program the SDRAM extended mode register.				             ;  * For DDR memories should disable DLL.					             ;  */									             ; if( pInitial->uSDRAMExtModeConfig[ 0 ] != 0 )				             ; {										             ; 	 (void) *((volatile UWORD32 *) pInitial->uSDRAMExtModeConfig[ I ]);	             ; }										             LDR     a1, =uSDRAMExtModeConfig    CMP     a1, #0x0    LDRNE   a2, [a1, #0]    ; /* Perform read to each device. 						             ;  * The address of the read is used to configure the SDRAM memories mode register.       ;  * For DDR memories should reset DLL.					             ;  */									             ; if( pInitial->uSDRAMModeConfig[ 0 ] != 0 ) 				             ; {										             ; 	 (void) *((volatile UWORD32 *) pInitial->uSDRAMModeConfig[ I ]);	             ; }										             LDR     a1, =uSDRAMModeConfig    CMP     a1, #0x0    LDRNE   a2, [a1, #0]                ; /* Wait */    ; apOS_TIMER_Wait( pInitial->PauseMemInit );    LDR     a1, =PAUSE_MEM_INIT;    BL      TimerWait    ;/* Issue PALL */    ;((PL175_sRegisters *) eBase)->DynamicControl =    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_CE,   apPL175_CLK_DRIVEN_HIGH )   |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_CS,   apPL175_CLKOUT_RUNS ) |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_SR,   apPL175_NORMAL_MODE )       |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_SRMCC,  apPL175_CLKOUT_SREF_RUN )	|    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_IMCC, apPL175_NCLKOUT_ENABLED )   |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_MCC,  apPL175_CLKOUT_ENABLED )    |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_I,    apPL175_INIT_PALL )	      |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DC,   apPL175_DLL_HANDSHAKING_DISABLED )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DE,   apPL175_DLL_HANDSHAKING_DISABLED )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DP,   apPL175_NORMAL_OPERATION )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_NRP,  apPL175_RP_HIGH )	      |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_RPV,  apPL175_RPVHH_NORMAL );    LDR     a2, =0x010b    LDR     a1, =MPMCDynamicControl    STR     a2, [a1, #0]    ; /* Wait */    ; apOS_TIMER_Wait( pInitial->PauseRefresh );    LDR     a1, =PAUSE_REFRESH_INIT;    BL      TimerWait    ;/* Select command write mode */    ;((PL175_sRegisters *) eBase)->DynamicControl =    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_CE,   apPL175_CLK_DRIVEN_HIGH )   |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_CS,   apPL175_CLKOUT_RUNS ) |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_SR,   apPL175_NORMAL_MODE )       |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_SRMCC,  apPL175_CLKOUT_SREF_RUN )	|    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_IMCC, apPL175_NCLKOUT_ENABLED )   |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_MCC,  apPL175_CLKOUT_ENABLED )    |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_I,    apPL175_INIT_MODE )	      |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DC,   apPL175_DLL_HANDSHAKING_DISABLED )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DE,   apPL175_DLL_HANDSHAKING_DISABLED )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DP,   apPL175_NORMAL_OPERATION )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_NRP,  apPL175_RP_HIGH )	      |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_RPV,  apPL175_RPVHH_NORMAL );    LDR     a2, =0x008b    LDR     a1, =MPMCDynamicControl    STR     a2, [a1, #0]    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;    ; Reset Mode config for dynamic #0    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;        ; /* Perform read to each device.						            ;  * required for DDR memories to remove reset DLL bit 			            ;  * The address of the read is used to configure the SDRAM memories mode register     ;  */									            ; if( pInitial->uDDRResetModeConfig[ 0 ] != 0 )				            ; {										            ; 	 (void) *((volatile UWORD32 *) pInitial->uDDRResetModeConfig[ I ]);	            ; }										            ;         LDR     a1, =uDDRResetModeConfig    CMP     a1, #0x0    LDRNE   a2, [a1, #0]        ;/* Select Normal mode, clear Dynamic memory clock enable */    ;((PL175_sRegisters *) eBase)->DynamicControl =    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_CE,   apPL175_CLK_DRIVEN_HIGH )   |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_CS,   apPL175_CLKOUT_RUNS ) |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_SR,   apPL175_NORMAL_MODE )       |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_SRMCC,  apPL175_CLKOUT_SREF_RUN )	|    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_IMCC, apPL175_NCLKOUT_ENABLED )   |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_MCC,  apPL175_CLKOUT_ENABLED )    |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_I,    apPL175_INIT_NORMAL )       |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DC,   apPL175_DLL_HANDSHAKING_DISABLED )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DE,   apPL175_DLL_HANDSHAKING_DISABLED )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_DP,   apPL175_NORMAL_OPERATION )  |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_NRP,  apPL175_RP_HIGH )	      |    ;	 apBIT_BUILD( PL175_DYNAMIC_CONTROL_RPV,  apPL175_RPVHH_NORMAL );    LDR     a2, =0x000b    LDR     a1, =MPMCDynamicControl    STR     a2, [a1, #0]    ;/* Initialise Static Memory registers for all banks */    ;for( I = 0; I < 4; I++)          ;{    ;    if(pInitial->StaticConfigEnable[ I ] == TRUE)    ;    {     ;       apPL175_StaticMemoryConfigSet( oId, I, &pInitial->sConfig.sStaticConfig[ I ] );    ;    }    ;}    ;/* Program MPMCStaticExtendedWait register*/    ;((PL175_sRegisters *) eBase)->StaticExtendedWait = pInitial->sConfig.StaticExtendedWait;    ;  return();    ;    MOV		pc, v1      ; Restore lr      ;};-------------------------------------------------------------------------------; USE TIMER2 for MPMC PL175 programming;-------------------------------------------------------------------------------TIMER       EQU	0x12001000; timer2 registersTIMER_CONTROL2    EQU	TIMER + 0x100TIMER_STATUS2     EQU	TIMER + 0x104TIMER_INT_ACK2    EQU	TIMER + 0x104TIMER_COMPARE2    EQU	TIMER + 0x108TIMER_COUNT2      EQU	TIMER + 0x10CTIMER_REDG_CAPT2  EQU	TIMER + 0x110       ;not usedTIMER_FEDG_CAPT2  EQU	TIMER + 0x114;	Detailed Registers NamingTIMER_PRESCAL     EQU	0x00F	TIMER_MODE        EQU	0x010	TIMER_ENAB        EQU	0x020	TIMER_NO_CAPT     EQU	0x000TIMER_RE_CAPT     EQU	0x040TIMER_FE_CAPT     EQU	0x080TIMER_RF_CAPT     EQU	0x0C0TIMER_MATCH_INT   EQU	0x100	TIMER_FEDG_INT    EQU	0x200	TIMER_REDG_INT    EQU	0x400	TIMER_MATCH       EQU	0x001   TIMER_FEDG        EQU	0x002   TIMER_REDG        EQU	0x004   ;; This routine uses the TIMER2 to wait for 'val' microseconds.; Please note that at this stage the timer is clocked with 10MHz clock ; (cycle time is 100 nsec).;;VOID  TimerWait(UINT32 val);{TimerWait    ; a1 keeps the 'val' parameter    LDR     a2, =TIMER_CONTROL2  ; keep the timer_control2 register address in a2    ; turn the timer off (just in case ...)    ; GPTCntl->TIMER_2_CONTROL_REG &= ~GPT_ENAB;     MOV     a4, #0x0    STR     a4, [a2, #0]        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    ; Enable timer2, but do not use the prescaler (unit is 100 ns)    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    ; GPTCntl->TIMER_2_CONTROL_REG  |=  GPT_ENAB | GPT_AUTO_RELOAD;     MOV     a4, #0x20    STR     a4, [a2, #0]    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    ; Wait until timer2 reaches 'val'    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    MOV     a3, #10    MUL     a4, a1, a3   ; Since 'val' isn usec unit but timer2 unit is in 100 nsec, we                     ; need to multiply it by ten.    MOV     a1, a4    LDR     a3, =TIMER_COUNT2    ; keep the timer_count2 register address in a3loop    LDR     a4, [a3, #0]    CMP     a4, a1    BLT     loop        ; turn the timer off    ; GPTCntl->TIMER_2_CONTROL_REG &= ~GPT_ENAB;     MOV     a4, #0x0    STR     a4, [a2, #0]    ;  return();    ;    MOV		pc, lr      ; Restore lr      ;}	END

⌨️ 快捷键说明

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