keil调试环境下S3C2440s的分析报告.docx
《keil调试环境下S3C2440s的分析报告.docx》由会员分享,可在线阅读,更多相关《keil调试环境下S3C2440s的分析报告.docx(34页珍藏版)》请在冰点文库上搜索。
![keil调试环境下S3C2440s的分析报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/de89464c-3b10-4617-956e-4c041ce61734/de89464c-3b10-4617-956e-4c041ce617341.gif)
keil调试环境下S3C2440s的分析报告
;StandarddefinitionsofModebitsandInterrupt(I&F)flagsinPSRs;向量中断模式/非向量中断模式设置
;通过PSRs(程序状态寄存器)来设置
;系统工作模式设定
;CPSR是当系统前程序状态寄存器,SPSR是备份程序状态寄存器。
其中CPSR共用一个物理寄存器,而SPSR一共有5个物理寄存器
;CPSR寄存器设定:
CPSR[4..0]为M4-M0,通过它可以设定处理器的工作模式
Mode_USREQU0x10;用户模式
Mode_FIQEQU0x11;快速中断模式
Mode_IRQEQU0x12;外部中断模式
Mode_SVCEQU0x13;超级用户模式
Mode_ABTEQU0x17;数据访问终止模式
Mode_UNDEQU0x1B;未定义指令终止模式
Mode_SYSEQU0x1F;系统模式
I_BitEQU0x80;whenIbitisset,IRQisdisabled外部中断屏蔽位,置1,关闭中断,置0,打开中断
F_BitEQU0x40;whenFbitisset,FIQisdisabled快速中断屏蔽位,置1,关闭中断,置0,打开中断
;-----------------------StackandHeapDefinitions----------------------------
;//StackConfiguration(StackSizesinBytes)
;//UndefinedMode<0x0-0xFFFFFFFF:
8>
;//SupervisorMode<0x0-0xFFFFFFFF:
8>
;//AbortMode<0x0-0xFFFFFFFF:
8>
;//FastInterruptMode<0x0-0xFFFFFFFF:
8>
;//InterruptMode<0x0-0xFFFFFFFF:
8>
;//User/SystemMode<0x0-0xFFFFFFFF:
8>
;//
;栈配置,系统的栈空间设定
UND_Stack_SizeEQU0x00000000;未定义模式的栈大小
SVC_Stack_SizeEQU0x00000008;超级用户模式的栈大小
ABT_Stack_SizeEQU0x00000000;数据访问终止模式的栈大小
FIQ_Stack_SizeEQU0x00000000;快速中断模式的栈大小
IRQ_Stack_SizeEQU0x00000080;外部中断模式的栈大小
USR_Stack_SizeEQU0x00000400;用户模式的栈大小
ISR_Stack_SizeEQU(UND_Stack_Size+SVC_Stack_Size+ABT_Stack_Size+\
FIQ_Stack_Size+IRQ_Stack_Size);所有模式的堆栈相加得到总堆栈的大小
;ARM的汇编程序由段组成,段是相对独立的指令或数据单位,每个段由AREA伪指令定义,并定义段的属性。
----READWRITE(读写)、READONLY(只读)
AREASTACK,NOINIT,READWRITE,ALIGN=3;开辟一个堆栈段,段名字为STACK,定义为可读可写,
;不初始化内存单元,或将内存单元初始化为0
Stack_MemSPACEUSR_Stack_Size;
__initial_spSPACEISR_Stack_Size;汇编代码的地址标号
Stack_Top;堆栈段内容结束,在这里放个标号,用来获得堆栈顶部地址
;//HeapConfiguration
;//HeapSize(inBytes)<0x0-0xFFFFFFFF>
;//
Heap_SizeEQU0x00000000;堆大小设置
AREAHEAP,NOINIT,READWRITE,ALIGN=3;开辟一个段,名字为HEAP可读可写,不初始化内存单元,或者初始化为0
__heap_base
Heap_MemSPACEHeap_Size
__heap_limit
;-----------------------MemoryDefinitions------------------------------------
;InternalMemoryBaseAddresses;片上SRAM的基地址,即内存基地址
IRAM_BASEEQU0x40000000
;-----------------------WatchdogTimerDefinitions----------------------------
WT_BASEEQU0x53000000;WatchdogTimerBaseAddress看门狗定时器基地址
WTCON_OFSEQU0x00;WatchdogTimerControlRegisterOffset看门狗控制寄存器偏移地址,相对于基址
WTDAT_OFSEQU0x04;WatchdogTimerDataRegisterOffset看门狗数据寄存器偏移地址,相对于基址
WTCNT_OFSEQU0x08;WatchdogTimerCountRegisterOffset看门狗计数寄存器偏移地址,相对于基址
;//WatchdogTimerSetup
;//WatchdogTimerControlRegister(WTCON)
;//PrescalerValue<0-255>
;//WatchdogTimerEnable
;//ClockDivisionFactor
;//<0=>16<1=>32<2=>64<3=>128
;//InterruptGenerationEnable
;//ResetEnable
;//
;//WatchdogTimerDataRegister(WTDAT)
;//CountReloadValue<0-65535>
;//
;//WatchdogTimerSetup
WT_SETUPEQU1;看门狗设置
WTCON_ValEQU0x00000000;看门狗控制寄存器设置,关闭看门狗
WTDAT_ValEQU0x00008000;看门狗数据寄存器设置,初始值即为0x8000
;-----------------------ClockandPowerManagementDefinitions----------------
CLOCK_BASEEQU0x4C000000;ClockBaseAddress;时钟基地址
LOCKTIME_OFSEQU0x00;PLLLockTimeCountRegisterOffset;锁相环锁定时间计数寄存器偏移地址,相对于基址
MPLLCON_OFSEQU0x04;MPLLConfigurationRegisterOffset;MPLL配置寄存器偏移地址,相对于基址,主时钟源PLL
UPLLCON_OFSEQU0x08;UPLLConfigurationRegisterOffset;UPLL配置寄存器偏移地址,相对于基址,USB时钟源PLL
CLKCON_OFSEQU0x0C;ClockGeneratorControlRegOffset;时钟控制寄存器偏移地址,相对于基址
CLKSLOW_OFSEQU0x10;ClockSlowControlRegisterOffset;时钟减慢控制寄存器偏移地址,相对于基址
CLKDIVN_OFSEQU0x14;ClockDividerControlRegisterOffset;时钟分频器控制寄存器偏移地址,相对于基址
CAMDIVN_OFSEQU0x18;CameraClockDividerRegisterOffset;摄像头时钟分频器控制寄存器偏移地址,相对于基址,UPLL提供
;//ClockSetup
;//PLLLockTimeCountRegister(LOCKTIME)
;//U_LTIME:
UPLLLockTimeCountValueforUCLK<0x0-0xFFFF>
;//M_LTIME:
MPLLLockTimeCountValueforFCLK,HCLKandPCLK<0x0-0xFFFF>
;//
;//MPLLConfigurationRegister(MPLLCON)
;//MPLL=(2*m*Fin)/(p*2^s)
;//m:
MainDividermValue<9-256><#-8>
;//m=MDIV+8
;//p:
Pre-dividerpValue<3-64><#-2>
;//p=PDIV+2
;//s:
PostDividersValue<0-3>
;//s=SDIV
;//
;//UPLLConfigurationRegister(UPLLCON)
;//UPLL=(m*Fin)/(p*2^s)
;//m:
MainDividermValue<8-263><#-8>
;//m=MDIV+8
;//p:
Pre-dividerpValue<2-65><#-2>
;//p=PDIV+2
;//s:
PostDividersValue<0-3>
;//s=SDIV
;//
;//ClockGenerationControlRegister(CLKCON)
;//AC97Enable
;//CameraEnable
;//SPIEnable
;//IISEnable
;//IICEnable
;//ADC+TouchScreenEnable
;//RTCEnable
;//GPIOEnable
;//UART2Enable
;//UART1Enable
;//UART0Enable
;//SDIEnable
;//PWMTIMEREnable
;//USBDeviceEnable
;//USBHostEnable
;//LCDCEnable
;//NANDFLASHControllerEnable
;//SLEEPEnable
;//IDLEBITEnable
;//
;//ClockSlowControlRegister(CLKSLOW)
;//UCLK_ON:
UCLKON
;//MPLL_OFF:
TurnoffPLL
;//SLOW_BIT:
SlowModeEnable
;//SLOW_VAL:
SlowClockDivider<0-7>
;//
;//ClockDividerControlRegister(CLKDIVN)
;//DIVN_UPLL:
UCLKSelect
;//<0=>UCLK=UPLLclock
;//<1=>UCLK=UPLLclock/2
;//HDIVN:
HCLKSelect
;//<0=>HCLK=FCLK
;//<1=>HCLK=FCLK/2
;//<2=>HCLK=FCLK/4ifHCLK4_HALF=0inCAMDIVN,elseHCLK=FCLK/8
;//<3=>HCLK=FCLK/3ifHCLK3_HALF=0inCAMDIVN,elseHCLK=FCLK/6
;//PDIVN:
PCLKSelect
;//<0=>PCLK=HCLK
;//<1=>PCLK=HCLK/2
;//
;//CameraClockDividerControlRegister(CAMDIVN)
;//DVS_EN:
ARMCoreClockSelect
;//<0=>ARMcorerunsatFCLK
;//<1=>ARMcorerunsatHCLK
;//HCLK4_HALF:
HDIVNDivisionRateChangeBit
;//<0=>IfHDIVN=2inCLKDIVNthenHCLK=FCLK/4
;//<1=>IfHDIVN=2inCLKDIVNthenHCLK=FCLK/8
;//HCLK3_HALF:
HDIVNDivisionRateChangeBit
;//<0=>IfHDIVN=3inCLKDIVNthenHCLK=FCLK/3
;//<1=>IfHDIVN=3inCLKDIVNthenHCLK=FCLK/6
;//CAMCLKSelect
;//<0=>CAMCLK=UPLL
;//<1=>CAMCLK=UPLL/CAMCLK_DIV
;//CAMCLK_DIV:
CAMCLKDivider<0-15>
;//CameraClock=UPLL/(2*(CAMCLK_DIV+1))
;//DividerisusedonlyifCAMCLK_SEL=1
;//
;//ClockSetup
CLOCK_SETUPEQU0;时钟设置
LOCKTIME_ValEQU0x0FFF0FFF;PLL锁定时间计数器值
MPLLCON_ValEQU0x00043011;MPLL配置寄存器值
UPLLCON_ValEQU0x00038021;UPLL配置寄存器值
CLKCON_ValEQU0x001FFFF0;时钟配置寄存器值
CLKSLOW_ValEQU0x00000004;时钟减慢控制寄存器值
CLKDIVN_ValEQU0x0000000F;时钟分频控制寄存器值
CAMDIVN_ValEQU0x00000000;摄像头分频控制寄存器值
;-----------------------MemoryControllerDefinitions-------------------------
;存储控制器设置
MC_BASEEQU0x48000000;MemoryControllerBaseAddress;存储控制器基地址
BWSCON_OFSEQU0x00;BusWidthandWaitStatusCtrlOffset;总线宽度和等待控制寄存器
BANKCON0_OFSEQU0x04;Bank0ControlRegisterOffset;BANK0---BOOTROM控制寄存器设置
BANKCON1_OFSEQU0x08;Bank1ControlRegisterOffset;BANK1
BANKCON2_OFSEQU0x0C;Bank2ControlRegisterOffset;BANK2
BANKCON3_OFSEQU0x10;Bank3ControlRegisterOffset;BANK3
BANKCON4_OFSEQU0x14;Bank4ControlRegisterOffset;BANK4
BANKCON5_OFSEQU0x18;Bank5ControlRegisterOffset;BANK5
BANKCON6_OFSEQU0x1C;Bank6ControlRegisterOffset;BANK6
BANKCON7_OFSEQU0x20;Bank7ControlRegisterOffset;BANK7
REFRESH_OFSEQU0x24;SDRAMRefreshControlRegisterOffset;DRAM/SDRAM刷新控制
BANKSIZE_OFSEQU0x28;FlexibleBankSizeRegisterOffset;可调的bank大小寄存器
MRSRB6_OFSEQU0x2C;Bank6ModeRegisterOffset;模式控制寄存器bank6
MRSRB7_OFSEQU0x30;Bank7ModeRegisterOffset;模式控制寄存器bank7
;//MemoryControllerSetup
;//BusWidthandWaitControlRegister(BWSCON)
;//ST7:
UseUB/LBforBank7
;//WS7:
EnableWaitStatusforBank7
;//DW7:
DataBusWidthforBank7
;//<0=>8-bit<1=>16-bit<2=>32-bit<3=>Reserved
;//ST6:
UseUB/LBforBank6
;//WS6:
EnableWaitStatusforBank6
;//DW6:
DataBusWidthforBank6
;//<0=>8-bit<1=>16-bit<2=>32-bit<3=>Reserved
;//ST5:
UseUB/LBforBank5
;//WS5:
EnableWaitStatusforBank5
;//DW5:
DataBusWidthforBank5
;//<0=>8-bit<1=>16-bit<2=>32-bit<3=>Reserved
;//ST4:
UseUB/LBforBank4
;//WS4:
EnableWaitStatusforBank4
;//DW4:
DataBusWidthforBank4
;//<0=>8-bit<1=>16-bit<2=>32-bit<3=>Reserved
;//ST3:
UseUB/LBforBank3
;//WS3:
EnableWaitStatusforBank3
;//DW3:
DataBusWidthforBank3
;//<0=>8-bit<1=>16-bit<2=>32-bit<3=>Reserved
;//ST2:
UseUB/LBforBank2
;//WS2:
EnableWaitStatusforBank2
;//DW2:
DataBusWidthforBank2
;//<0=>8-bit<1=>16-bit<2=>32-bit<3=>Reserved
;//ST1:
UseUB/LBforBank1
;//WS1:
EnableWaitStatusforBank1
;//DW1:
DataBusWidthforBank1
;//<0=>8-bit<1=>16-bit<2=>32-bit<3=>Reserved
;//DW0:
IndicateDataBusWidthforBank0
;//<1=>16-bit<2=>32-bit
;//
;//Bank0ControlRegister(BANKCON0)
;//Tacs:
AddressSet-upTimebeforenGCS
;//<0=>0clocks<1=>1clocks<2=>2clocks<3=>4clocks
;//Tcos:
ChipSelectionSet-upTimebeforenOE
;//<0=>0clocks<1=>1clocks<2=>2clocks<3=>4clocks
;//Tacc:
AccessCycle
;//<0=>1clocks<1=>2clocks<2=>3clocks<3=>4clocks
;//<4=>6clocks<5=>8clocks<6=>10cloc