arm最小系统毕业设计程序清单.docx
- 文档编号:28943651
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:44
- 大小:24.51KB
arm最小系统毕业设计程序清单.docx
《arm最小系统毕业设计程序清单.docx》由会员分享,可在线阅读,更多相关《arm最小系统毕业设计程序清单.docx(44页珍藏版)》请在冰豆网上搜索。
arm最小系统毕业设计程序清单
附录二
系统程序清单
;StandarddefinitionsofModebitsandInterrupt(I&F)flagsinPSRs
Mode_USREQU0x10
Mode_FIQEQU0x11
Mode_IRQEQU0x12
Mode_SVCEQU0x13
Mode_ABTEQU0x17
Mode_UNDEQU0x1B
Mode_SYSEQU0x1F
I_BitEQU0x80;whenIbitisset,IRQisdisabled
F_BitEQU0x40;whenFbitisset,FIQisdisabled
;InternalMemoryBaseAddresses
FLASH_BASEEQU0x00100000
RAM_BASEEQU0x00200000
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)
AREASTACK,NOINIT,READWRITE,ALIGN=3
Stack_MemSPACEUSR_Stack_Size
__initial_spSPACEISR_Stack_Size
Stack_Top
Heap_SizeEQU0x00000000
AREAHEAP,NOINIT,READWRITE,ALIGN=3
__heap_base
Heap_MemSPACEHeap_Size
__heap_limit
;ResetController(RSTC)definitions
RSTC_BASEEQU0xFFFFFD00;RSTCBaseAddress
RSTC_MREQU0x08;RSTC_MROffset
RSTC_SETUPEQU1
RSTC_MR_ValEQU0xA5000401
;EmbeddedFlashController(EFC)definitions
EFC_BASEEQU0xFFFFFF00;EFCBaseAddress
EFC0_FMREQU0x60;EFC0_FMROffset
EFC1_FMREQU0x70;EFC1_FMROffset
EFC0_SETUPEQU1
EFC0_FMR_ValEQU0x00320100
EFC1_SETUPEQU0
EFC1_FMR_ValEQU0x00320100
;WatchdogTimer(WDT)definitions
WDT_BASEEQU0xFFFFFD40;WDTBaseAddress
WDT_MREQU0x04;WDT_MROffset
WDT_SETUPEQU0;//OFFWDT_SETUP(2009-10-22byZW)
WDT_MR_ValEQU0x00008000
;PowerMangementController(PMC)definitions
PMC_BASEEQU0xFFFFFC00;PMCBaseAddress
PMC_MOREQU0x20;PMC_MOROffset
PMC_MCFREQU0x24;PMC_MCFROffset
PMC_PLLREQU0x2C;PMC_PLLROffset
PMC_MCKREQU0x30;PMC_MCKROffset
PMC_SREQU0x68;PMC_SROffset
PMC_MOSCENEQU(1<<0);MainOscillatorEnable
PMC_OSCBYPASSEQU(1<<1);MainOscillatorBypass
PMC_OSCOUNTEQU(0xFF<<8);MainOScillatorStart-upTime
PMC_DIVEQU(0xFF<<0);PLLDivider
PMC_PLLCOUNTEQU(0x3F<<8);PLLLockCounter
PMC_OUTEQU(0x03<<14);PLLClockFrequencyRange
PMC_MULEQU(0x7FF<<16);PLLMultiplier
PMC_USBDIVEQU(0x03<<28);USBClockDivider
PMC_CSSEQU(3<<0);ClockSourceSelection
PMC_PRESEQU(7<<2);PrescalerSelection
PMC_MOSCSEQU(1<<0);MainOscillatorStable
PMC_LOCKEQU(1<<2);PLLLockStatus
PMC_MCKRDYEQU(1<<3);MasterClockStatus
PMC_SETUPEQU0;//OFFPMC_SETUP(2009-10-22byZW)
PMC_MOR_ValEQU0x00000601;//6*8个慢时钟等待后使能晶振时钟
PMC_PLLR_ValEQU0x00010001;//DIV:
1分频(18432000Hz),PLL:
2倍频(36864000Hz)
PMC_MCKR_ValEQU0x00000003;//主机时钟:
PLL_CLOCK(36864000Hz)
PRESERVE8
;AreaDefinitionandEntryPoint
;StartupCodemustbelinkedfirstatAddressatwhichitexpectstorun.
AREARESET,CODE,READONLY
ARM
;ExceptionVectors
;MappedtoAddress0.
;Absoluteaddressingmodemustbeused.
;DummyHandlersareimplementedasinfiniteloopswhichcanbemodified.
VectorsLDRPC,Reset_Addr
LDRPC,Undef_Addr
LDRPC,SWI_Addr
LDRPC,PAbt_Addr
LDRPC,DAbt_Addr
NOP;ReservedVector
;LDRPC,IRQ_Addr
LDRPC,[PC,#-0xF20];VectorFromAIC_IVR
;LDRPC,FIQ_Addr
LDRPC,[PC,#-0xF20];VectorFromAIC_FVR
Reset_AddrDCDReset_Handler
Undef_AddrDCDUndef_Handler
SWI_AddrDCDSWI_Handler
PAbt_AddrDCDPAbt_Handler
DAbt_AddrDCDDAbt_Handler
DCD0;ReservedAddress
IRQ_AddrDCDIRQ_Handler
FIQ_AddrDCDFIQ_Handler
Undef_HandlerBUndef_Handler
SWI_HandlerBSWI_Handler
PAbt_HandlerBPAbt_Handler
DAbt_HandlerBDAbt_Handler
IRQ_HandlerBIRQ_Handler
FIQ_HandlerBFIQ_Handler
;ResetHandler
EXPORTReset_Handler
Reset_Handler
;SetupRSTC
IFRSTC_SETUP!
=0
LDRR0,=RSTC_BASE
LDRR1,=RSTC_MR_Val
STRR1,[R0,#RSTC_MR]
ENDIF
;SetupEFC0
IFEFC0_SETUP!
=0
LDRR0,=EFC_BASE
LDRR1,=EFC0_FMR_Val
STRR1,[R0,#EFC0_FMR]
ENDIF
;SetupEFC1
IFEFC1_SETUP!
=0
LDRR0,=EFC_BASE
LDRR1,=EFC1_FMR_Val
STRR1,[R0,#EFC1_FMR]
ENDIF
;SetupWDT
IFWDT_SETUP!
=0
LDRR0,=WDT_BASE
LDRR1,=WDT_MR_Val
STRR1,[R0,#WDT_MR]
ENDIF
;SetupPMC
IFPMC_SETUP!
=0
LDRR0,=PMC_BASE
;SetupMainOscillator
LDRR1,=PMC_MOR_Val
STRR1,[R0,#PMC_MOR]
;WaituntilMainOscillatorisstablilized
IF(PMC_MOR_Val:
AND:
PMC_MOSCEN)!
=0
MOSCS_LoopLDRR2,[R0,#PMC_SR]
ANDSR2,R2,#PMC_MOSCS
BEQMOSCS_Loop
ENDIF
;SetupthePLL
IF(PMC_PLLR_Val:
AND:
PMC_MUL)!
=0
LDRR1,=PMC_PLLR_Val
STRR1,[R0,#PMC_PLLR]
;WaituntilPLLisstabilized
PLL_LoopLDRR2,[R0,#PMC_SR]
ANDSR2,R2,#PMC_LOCK
BEQPLL_Loop
ENDIF
;SelectClock
IF(PMC_MCKR_Val:
AND:
PMC_CSS)==1;MainClockSelected
LDRR1,=PMC_MCKR_Val
ANDR1,#PMC_CSS
STRR1,[R0,#PMC_MCKR]
WAIT_Rdy1LDRR2,[R0,#PMC_SR]
ANDSR2,R2,#PMC_MCKRDY
BEQWAIT_Rdy1
LDRR1,=PMC_MCKR_Val
STRR1,[R0,#PMC_MCKR]
WAIT_Rdy2LDRR2,[R0,#PMC_SR]
ANDSR2,R2,#PMC_MCKRDY
BEQWAIT_Rdy2
ELIF(PMC_MCKR_Val:
AND:
PMC_CSS)==3;PLLClockSelected
LDRR1,=PMC_MCKR_Val
ANDR1,#PMC_PRES
STRR1,[R0,#PMC_MCKR]
WAIT_Rdy1LDRR2,[R0,#PMC_SR]
ANDSR2,R2,#PMC_MCKRDY
BEQWAIT_Rdy1
LDRR1,=PMC_MCKR_Val
STRR1,[R0,#PMC_MCKR]
WAIT_Rdy2LDRR2,[R0,#PMC_SR]
ANDSR2,R2,#PMC_MCKRDY
BEQWAIT_Rdy2
ENDIF;SelectClock
ENDIF;PMC_SETUP
;CopyExceptionVectorstoInternalRAM
IF:
DEF:
RAM_INTVEC
ADRR8,Vectors;Source
LDRR9,=RAM_BASE;Destination
LDMIAR8!
{R0-R7};LoadVectors
STMIAR9!
{R0-R7};StoreVectors
LDMIAR8!
{R0-R7};LoadHandlerAddresses
STMIAR9!
{R0-R7};StoreHandlerAddresses
ENDIF
;Remapon-chipRAMtoaddress0
MC_BASEEQU0xFFFFFF00;MCBaseAddress
MC_RCREQU0x00;MC_RCROffset
IF:
DEF:
REMAP
LDRR0,=MC_BASE
MOVR1,#1
STRR1,[R0,#MC_RCR];Remap
ENDIF
;SetupStackforeachmode
LDRR0,=Stack_Top
;EnterUndefinedInstructionModeandsetitsStackPointer
MSRCPSR_c,#Mode_UND:
OR:
I_Bit:
OR:
F_Bit
MOVSP,R0
SUBR0,R0,#UND_Stack_Size
;EnterAbortModeandsetitsStackPointer
MSRCPSR_c,#Mode_ABT:
OR:
I_Bit:
OR:
F_Bit
MOVSP,R0
SUBR0,R0,#ABT_Stack_Size
;EnterFIQModeandsetitsStackPointer
MSRCPSR_c,#Mode_FIQ:
OR:
I_Bit:
OR:
F_Bit
MOVSP,R0
SUBR0,R0,#FIQ_Stack_Size
;EnterIRQModeandsetitsStackPointer
MSRCPSR_c,#Mode_IRQ:
OR:
I_Bit:
OR:
F_Bit
MOVSP,R0
SUBR0,R0,#IRQ_Stack_Size
;EnterSupervisorModeandsetitsStackPointer
MSRCPSR_c,#Mode_SVC:
OR:
I_Bit:
OR:
F_Bit
MOVSP,R0
SUBR0,R0,#SVC_Stack_Size
;EnterUserModeandsetitsStackPointer
MSRCPSR_c,#Mode_USR
IF:
DEF:
__MICROLIB
EXPORT__initial_sp
ELSE
MOVSP,R0
SUBSL,SP,#USR_Stack_Size
ENDIF
;EntertheCcode
IMPORT__main
LDRR0,=__main
BXR0
IF:
DEF:
__MICROLIB
EXPORT__heap_base
EXPORT__heap_limit
ELSE
;UserInitialStack&Heap
AREA|.text|,CODE,READONLY
IMPORT__use_two_region_memory
EXPORT__user_initial_stackheap
__user_initial_stackheap
LDRR0,=Heap_Mem
LDRR1,=(Stack_Mem+USR_Stack_Size)
LDRR2,=(Heap_Mem+Heap_Size)
LDRR3,=Stack_Mem
BXLR
ENDIF
END
/********************************************************************
;Project:
GM8802新版ARM平台
;Chip:
AT91SAM7S64
;Clock:
OSC=18.432MHz,PLLCK=36.864MHz,N=2
;Copyright:
(C)2009SHENZHENGeneralMeasure,Inc.
;Author:
;Date:
2009
;Update:
2009
;Version:
;Booker:
None,normativeprogram
********************************************************************/
#include"include.H"
u32ulOFLSign;
u32ulAutoClrZeroInUse;//上电自动清零
boolParaErrorSymbol=false;
/*********************************************************************
函数名称:
voidDoOnlyAtPowerUp(void)
功能:
执行只在上电时必要的任务
说明:
入口参数:
调用程序:
返回值:
设计:
zls时间:
2010.10.29
修改:
时间:
*********************************************************************/
voidDoOnlyAtPowerUp(void)
{
if((AT91F_RSTGetStatus(AT91C_BASE_RSTC)&0x00000700)==0)//上电复位
{
ulAutoClrZeroInUse=ulAutoClrZero;//初始化上电自动清零
BuzerDisplay();//蜂鸣两响,闪"8."三次
}
}
/**********************************************************
函数名称:
voidDealWithKey(void)
功能:
主函数
说明:
入口参数:
无
调用程序:
返回值:
无
设计:
slz时间:
2011-4-1910:
42:
07
修改:
时间:
************************************************************/
voidDealWithKey(void)
{
u32ulClear0=0;
switch(GetKeyValue())
{
caseKENTER:
if(ulEdition==GM8802E)//切换显示:
重量/毫伏数
{
if(GetSysStatue()&LW_MA)
ClrSysStatue(LW_MA);
else
SetSysStatue(LW_MA);
}
break;
caseKMODE:
Fnop();//入设置界面
FlashWeight();//刷新重量
break;
caseKOPTION:
break;
caseKZERO:
ulClear0=1;
ulSysAlarm|=Clr0(&ulClear0);
FlashWeight();
break;
}
}
/**********************************************************
函数名称:
voidDisplayInMain(u32ulPosOfl1NegOfl2)
功能:
处理主程序循环中的显示
说明:
入口参数:
无
调用程序:
返回值:
无
设计:
zsl时间:
2011-5-1910:
42:
07
修改:
时间:
************************************************************/
voidDisplayInMain(u32ulPosOfl1NegOfl2)
{
staticu32DispErrorTime=0;
staticu32u32Err=0;
if((u32Err==0)&&(ulSysAlarm!
=0))
{
DispErrorTime=GetSysTime();
}
u32Err=ulSysAlarm;
(0==WTInfo.slGrossWt)?
SetSysStatue(LZERO):
ClrSysStatue(LZERO);
if(ulSysAlarm!
=0)
{
if(ulSysAlarm&(CLR0ERR_OVERFOLW))
DispStr("Error2");
if(ulSysAlarm&(CLR0ERR_NOSTAB))
DispStr("Error3");
if((GetSysTime()-DispErrorTime)>1500)
ulSysAlarm=0;
}
elseif(ParaErrorSymbol)
{
DispStr("PA-Err");
}
elseif(ulPosOfl1NegOfl2==1)
{
DispStr("OFL");
}
elseif(ulPosOfl1NegOfl2==2)
{
DispStr("-OFL");
}
elseif((GetSysStatue()&LW_MA)&&(ulEdition==GM8802E))
{
DispData(GetDAOutputMAVValue(),1,1<<3);
}
else
{
if((-99999<=WTInfo.slGrossWt)&&(WTInfo.slGrossWt<=999999))
DispData(WTInfo.slGrossWt,1,1< elseif(WTInfo.slGrossWt<-99999) DispData(-99999,1,1< else DispData(999999,1,1<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arm 最小 系统 毕业设计 程序 清单