Arm9 跑马灯程序阅读.docx
《Arm9 跑马灯程序阅读.docx》由会员分享,可在线阅读,更多相关《Arm9 跑马灯程序阅读.docx(61页珍藏版)》请在冰豆网上搜索。
Arm9跑马灯程序阅读
目录
Arm9跑马灯程序阅读
(1)--2410addr.h&2410addr.inc2
Arm9跑马灯程序阅读
(2)--Memcfg.inc6
Arm9跑马灯程序阅读(3)--Option.h&Option.inc10
Arm9跑马灯程序阅读(5)--2410slib.s11
Arm9跑马灯程序阅读(6)--2410lib.c21
Arm9跑马灯程序阅读(7)--start.s
(1)33
Arm9跑马灯程序阅读
(1)--2410addr.h&2410addr.inc
2010-06-1115:
12:
42| 分类:
Linux嵌入式学习| 标签:
|字号大中小 订阅
写在前面:
网易这个不知道为什么不能从eclipse粘贴出来不能带颜色了,让我很不爽。
//FileName:
2410addr.h(2410addr.inc和2410addr.h实现的功能一样,只是他是为汇编提供的头文件)
//Function :
S3C2410DefineAddressRegister
//这个文件的内容就不全粘贴出来了,因为太长了,这个文件主要是定义了S3C2410的寄存器地址。
其中包括:
//Memorycontrol
#definerBWSCON (*(volatileunsigned*)0x48000000)//Buswidth&waitstatus
...
#definerMRSRB7 (*(volatileunsigned*)0x48000030)//ModeregistersetforSDRAM
//INTERRUPT
#definerSRCPND (*(volatileunsigned*)0x4a000000)//Interruptrequeststatus
#definerINTMOD (*(volatileunsigned*)0x4a000004)//Interruptmodecontrol
#definerINTMSK (*(volatileunsigned*)0x4a000008)//Interruptmaskcontrol
#definerPRIORITY (*(volatileunsigned*)0x4a00000c)//IRQprioritycontrol
#definerINTPND (*(volatileunsigned*)0x4a000010)//Interruptrequeststatus
#definerINTOFFSET (*(volatileunsigned*)0x4a000014)//Interruotrequestsourceoffset
#definerSUBSRCPND (*(volatileunsigned*)0x4a000018)//Subsourcepending
#definerINTSUBMSK (*(volatileunsigned*)0x4a00001c)//Interruptsubmask
//DMA0-3
#definerDISRC0 (*(volatileunsigned*)0x4b000000)//DMA0Initialsource
...
#definerDMASKTRIG0(*(volatileunsigned*)0x4b000020)//DMA0Masktrigger
//CLOCK&POWERMANAGEMENT
#definerLOCKTIME (*(volatileunsigned*)0x4c000000)//PLLlocktimecounter
#definerMPLLCON (*(volatileunsigned*)0x4c000004)//MPLLControl
#definerUPLLCON (*(volatileunsigned*)0x4c000008)//UPLLControl
#definerCLKCON (*(volatileunsigned*)0x4c00000c)//Clockgeneratorcontrol
#definerCLKSLOW (*(volatileunsigned*)0x4c000010)//Slowclockcontrol
#definerCLKDIVN (*(volatileunsigned*)0x4c000014)//Clockdividercontrol
//LCDCONTROLLER
#definerLCDCON1 (*(volatileunsigned*)0x4d000000)//LCDcontrol1
...
#definePALETTE 0x4d000400 //Palettestartaddress
//NANDflash
#definerNFCONF (*(volatileunsigned*)0x4e000000) //NANDFlashconfiguration
...
#definerNFECC2 (*(volatileU8 *)0x4e000016)
//UART0-2
#definerULCON0 (*(volatileunsigned*)0x50000000)//UART0Linecontrol
...
#definerUBRDIV0 (*(volatileunsigned*)0x50000028)//UART0Baudratedivisor
//有关大小端方面的设置,这里是小端
#ifdef__BIG_ENDIAN
...
#defineURXH2 (0x50008024+3)
#else//LittleEndian
#definerUTXH0(*(volatileunsignedchar*)0x50000020)//UART0TransmissionHold
...
#defineURXH2 (0x50008024)
#endif
//PWMTIMER
#definerTCFG0 (*(volatileunsigned*)0x51000000)//Timer0configuration
...
#definerTCNTO4(*(volatileunsigned*)0x51000040)//Timercountobservation4
//USBDEVICE
#ifdef__BIG_ENDIAN
#definerFUNC_ADDR_REG (*(volatileunsignedchar*)0x52000143)//Functionaddress
...
#definerEP4_DMA_TTC_H (*(volatileunsignedchar*)0x5200026f)
#else //LittleEndian
#definerFUNC_ADDR_REG (*(volatileunsignedchar*)0x52000140)//Functionaddress
...
#definerEP4_DMA_TTC_H (*(volatileunsignedchar*)0x5200026c)
#endif //__BIG_ENDIAN
//WATCHDOGTIMER
#definerWTCON (*(volatileunsigned*)0x53000000)//Watch-dogtimermode
#definerWTDAT (*(volatileunsigned*)0x53000004)//Watch-dogtimerdata
#definerWTCNT (*(volatileunsigned*)0x53000008)//Eatch-dogtimercount
//IIC
#definerIICCON (*(volatileunsigned*)0x54000000)//IICcontrol
#definerIICSTAT(*(volatileunsigned*)0x54000004)//IICstatus
#definerIICADD (*(volatileunsigned*)0x54000008)//IICaddress
#definerIICDS (*(volatileunsigned*)0x5400000c)//IICdatashift
//IIS
#definerIISCON (*(volatileunsigned*)0x55000000)//IISControl
#definerIISMOD (*(volatileunsigned*)0x55000004)//IISMode
#definerIISPSR (*(volatileunsigned*)0x55000008)//IISPrescaler
#definerIISFCON(*(volatileunsigned*)0x5500000c)//IISFIFOcontrol
#ifdef__BIG_ENDIAN
#defineIISFIFO ((volatileunsignedshort*)0x55000012)//IISFIFOentry
#else//LittleEndian
#defineIISFIFO ((volatileunsignedshort*)0x55000010)//IISFIFOentry
#endif
//I/OPORTA-H以及IO的其他功能(GPIO)
#definerGPACON (*(volatileunsigned*)0x56000000)//PortAcontrol
...
#definerGPHUP (*(volatileunsigned*)0x56000078)//Pull-upcontrolH
//IO的其他function
#definerMISCCR (*(volatileunsigned*)0x56000080)//Miscellaneouscontrol
...
#definerGSTATUS4 (*(volatileunsigned*)0x560000bc)//Saveddata0(32-bit)beforeenteringPOWER_OFFmode
//RTC
#ifdef__BIG_ENDIAN
...
#definerBCDYEAR (*(volatileunsignedchar*)0x5700008b)//BCDyear
#else//LittleEndian
#definerRTCCON (*(volatileunsignedchar*)0x57000040)//RTCcontrol
...
#definerBCDYEAR (*(volatileunsignedchar*)0x57000088)//BCDyear
#endif //RTC
//ADC
#definerADCCON (*(volatileunsigned*)0x58000000)//ADCcontrol
#definerADCTSC (*(volatileunsigned*)0x58000004)//ADCtouchscreencontrol
#definerADCDLY (*(volatileunsigned*)0x58000008)//ADCstartorIntervalDelay
#definerADCDAT0 (*(volatileunsigned*)0x5800000c)//ADCconversiondata0
#definerADCDAT1 (*(volatileunsigned*)0x58000010)//ADCconversiondata1
//SPI
#definerSPCON0 (*(volatileunsigned*)0x59000000)//SPI0control
...
#definerSPRDAT1 (*(volatileunsigned*)0x59000034)//SPI1Rxdata
//SDInterface
#definerSDICON (*(volatileunsigned*)0x5a000000)//SDIcontrol
...
#definerSDIIMSK (*(volatileunsigned*)0x5a000040)//SDIinterruptmask
#ifdef__BIG_ENDIAN
#definerSDIDAT (*(volatileunsigned*)0x5a00003f)//SDIdata
#defineSDIDAT 0x5a00003f
#else //LittleEndian
#definerSDIDAT (*(volatileunsigned*)0x5a00003c)//SDIdata
#defineSDIDAT 0x5a00003c
#endif //SDInterface
//ISR
#definepISR_RESET (*(unsigned*)(_ISR_STARTADDRESS+0x0))
...
#definepISR_ADC (*(unsigned*)(_ISR_STARTADDRESS+0x9c))
//PENDINGBIT
#defineBIT_EINT0 (0x1)
...
#defineBIT_SUB_RXD0 (0x1<<0)
#define EnableIrq(bit) rINTMSK&=~(bit)
#define DisableIrq(bit) rINTMSK|=(bit)
#define EnableSubIrq(bit) rINTSUBMSK&=~(bit)
#define DisableSubIrq(bit) rINTSUBMSK|=(bit)
__inlinevoidClearPending(intbit)
{
registeri;
rSRCPND=bit;
rINTPND=bit;
i=rINTPND;
}
__inlinevoidClearSubPending(intbit)
{
registeri;
rSUBSRCPND=bit;
i=rINTPND;
}
#ifdef__cplusplus
}
#endif
#endif //__2410ADDR_H___
Arm9跑马灯程序阅读
(2)--Memcfg.inc
2010-06-1315:
02:
50| 分类:
Linux嵌入式学习| 标签:
|字号大中小 订阅
;************************************************
;NAME :
MEMCFG.A
;DESC :
Memorybankconfigurationfile
; 这里主要配置的就是内存
; S3C2410的存储控制器有以下特性:
; 1.—Little/Bigendian(selectablebyasoftware) 大小端设置;
; 2.—Addressspace:
128Mbytesperbank(total1GB/8banks) 地址空间:
每个bank为128MB(总共1GB);
; 3.—Programmableaccesssize(8/16/32-bit)forallbanksexceptbank0(16/32-bit) 除了bank0其余所有banks的数据位宽是可编程的(8/16/32-bit);
; 4. —Total8memorybanks总共8个memorybanks
; SixmemorybanksforROM,SRAM,etc. 其中6个bank是接ROM,SRAM等
; RemainingtwomemorybanksforROM,SRAM,SDRAM,etc. 其余2个bank是接ROM,SRAM,SDRAM等
; 5.—Sevenfixedmemorybankstartaddress 7个memorybank的起始地址是固定的;(发现size也是固定的,128MB)
; 6.—Oneflexiblememorybankstartaddressandprogrammablebanksize 1个memorybank的起始地址和大小是可灵活可变的;
; 7.—Programmableaccesscyclesforallmemorybanks 所有banks的访问周期数是可编程的;
; 8.—Externalwaittoextendthebuscycles 支持片外等待信号以扩充总线周期;
; 9.—Supportingself-refreshandpowerdownmodeinSDRAM SDRAM在Powerdown模式下支持自动刷新.
; bank6和bank7的大小必须一样,并且bank7的起始地址根据bank6的大小不同而不同
;************************************************
;MemoryArea 内存挂在bank上的片选
;GCS616bit(16MB)SDRAM(0x0c000000-0x0cffffff)
;GCS716bit(16MB)SDRAM(0x0d000000-0x0dffffff)
; or
;GCS632bit(32MB)SDRAM(0x0c000000-0x0dffffff)
;BWSCON
DW8 EQU (0x0)
DW16 EQU (0x1)
DW32 EQU (0x2)
WAIT EQU (0x1<<2)
UBLB EQU (0x1<<3)
ASSERT:
DEF:
BUSWIDTH
[BUSWIDTH=16
B1_BWSCON EQU(DW16)
B2_BWSCON EQU(DW16)
B3_BWSCON EQU(DW16)
B4_BWSCON EQU(DW16)
B5_BWSCON EQU(DW16)
B6_BWSCON EQU(DW16)
B7_BWSCON EQU(DW16)
|;BUSWIDTH=32
B1_BWSCON EQU(DW32)
B2_BWSCON EQU(DW16)
B3_BWSCON EQU(DW16)
B4_BWSCON EQU(DW16)
B5_BWSCON EQU(DW16)
B6_BWSCON EQU(DW32)
B7_BWSCON EQU(DW32)
]
;BANK0CON
B0_Tacs EQU 0x0 ;0clk
B0_Tcos EQU 0x0 ;0clk
B0_Tacc EQU 0x7 ;14clk
B0_Tcoh EQU 0x0 ;0clk
B0_Tah EQU 0x0 ;0clk
B0_Tacp EQU 0x0
B0_PMC EQU 0x0 ;normal
;BANK1CON
B1_Tacs EQU 0x0 ;0clk
B1_Tcos EQU 0x0 ;0clk
B1_Tacc EQU 0x7 ;14clk
B1_Tcoh EQU 0x0 ;0clk
B1_Tah EQU 0x0 ;0clk
B1_Tacp EQU 0x0
B1_PMC EQU 0x0 ;normal
;Bank2parameter
B2_Tacs EQU 0x0 ;0clk
B2_Tcos EQU 0x0 ;0clk
B2_Tacc EQU 0x7 ;14clk
B2_Tcoh EQU 0x0 ;0clk
B2_Tah EQU 0x0 ;0clk
B2_Tacp EQU 0x0
B2_PMC EQU 0x0 ;normal
;Bank3parameter
B3_Tacs EQU 0x0 ;0clk
B3_Tcos EQU 0x0 ;0clk
B3_Tacc EQU 0x7 ;14clk
B3_Tcoh EQU 0x0 ;0clk
B3_Tah EQU 0x0 ;0clk
B3_Tacp EQU 0x0
B3_PMC EQU 0x0 ;normal
;Bank4parameter
B4_Tacs EQU 0x0 ;0clk
B4_Tcos EQU 0x0 ;0clk
B4_Tacc EQU 0x7 ;14clk
B4_Tcoh EQU 0x0 ;0clk
B4_Tah EQU 0x0 ;0clk
B4_Tacp EQU 0x0
B4_PMC EQU 0x0 ;normal
;Bank5parameter
B5_Tacs EQU 0x0 ;0clk
B5_Tcos EQU 0x0 ;0clk
B5_Tacc EQU 0x7 ;14clk
B5_Tcoh EQU 0x0 ;0clk
B5_Tah EQU 0x0 ;0clk
B5_Tacp EQU 0x0
B5_PMC EQU 0x0 ;normal
;bank6.7以及REFRESH可以在手册的MEMORYCONTROLLER章节查到具体的含义
;这里主要还涉及到连个参数CAS和RAS,具体可以参考手册上的这个图“S3C2410XSDRAMTimingDiagram”
;CAS意为列地址选通脉冲(ColumnAddressStrobe或者ColumnAddressSelect),
;CAS控制着从收到命令到执行命令的间隔时间,通常