
S3C2440定時器源程序如下:
- ;************口地址及數據符號化定義區**********************
- pWTCON EQU 0x53000000
- pLOCKTIME EQU 0x4c000000
- pCLKDIVN EQU 0x4c000014
- pUPLLCON EQU 0x4c000008
- pMPLLCON EQU 0x4c000004
- pBWSCON EQU 0x48000000
- pSRCPND EQU 0x4a000000 ;中斷源懸掛寄存器地址
- pINTPND EQU 0x4a000010 ;中斷懸掛寄存器地址
- pINTMOD EQU 0x4a000004 ;中斷模式寄存器地址
- pINTMSK EQU 0x4a000008
- pINTSUBMSK EQU 0x4a00001c ;子中斷源屏蔽寄存器地址
- pINTOFFSET EQU 0x4a000014 ;中斷源偏移地址寄存器地址
- pTCFG0 EQU 0x51000000 ;定時器配置寄存器0
- pTCFG1 EQU 0x51000004 ;定時器配置寄存器1
- pTCNTB4 EQU 0x5100003c ;定時器4計數緩沖寄存器
- pTCON EQU 0x51000008 ;定時器控制寄存器
- DATA_EREA EQU 0x33FFFF00
- vCLKDIVN EQU 0x4
- vUPLLCON EQU 0x00038022
- vMPLLCON EQU 0x0005c011
- ;*************以下為各寄存器BANK數據寬度設置數據***********
- DW16 EQU (0x1)
- DW32 EQU (0x2)
- B1_BWSCON EQU (DW16)
- B2_BWSCON EQU (DW16)
- B3_BWSCON EQU (DW16)
- B4_BWSCON EQU (DW32)
- B5_BWSCON EQU (DW16)
- B6_BWSCON EQU (DW32)
- B7_BWSCON EQU (DW32)
- ;*************Bank 0 存儲器參數區**************************
- B0_Tacs EQU 0x3
- B0_Tcos EQU 0x3
- B0_Tacc EQU 0x7
- B0_Tcoh EQU 0x3
- B0_Tah EQU 0x3
- B0_Tacp EQU 0x1
- B0_PMC EQU 0x0
- ;*************Bank 4 存儲器參數區**************************
- B4_Tacs EQU 0x1
- B4_Tcos EQU 0x1
- B4_Tacc EQU 0x6
- B4_Tcoh EQU 0x1
- B4_Tah EQU 0x1
- B4_Tacp EQU 0x0
- B4_PMC EQU 0x0
- ;*************Bank 6 SDRAM存儲器參數區*********************
- B6_MT EQU 0x3
- B6_Trcd EQU 0x1
- B6_SCAN EQU 0x1
- ;************* SDRAM 動態存儲器所需的刷新參數區************
- REFEN EQU 0x1
- TREFMD EQU 0x0
- Trp EQU 0x1
- Tsrc EQU 0x1
- Tchr EQU 0x2
- REFCNT EQU 1268
- ;*************以下數據為CPSR中各工作模式的設置位信息*******
- USERMODE EQU 0x10
- IRQMODE EQU 0x12
- SVCMODE EQU 0x13
- MODEMASK EQU 0x1f
- NOINT EQU 0xc0
- ;*************以下為管理模式、IRQ、及用戶模式堆棧指針數據***
- UserStack EQU 0x33ff4800
- SVCStack EQU 0x33ff5800
- IRQStack EQU 0x33ff7000
- ;************以下為代碼區***************
- AREA Init,CODE,READONLY
- ENTRY
- EXPORT _ENTRY
- _ENTRY
- ResetEntry
- b _reset
- b .
- b .
- b .
- b .
- b .
- b IsrIRQ
- b .
- ;*****************預存開機后需要提取并設置到特殊功能寄存器內存儲器參數區的數據,含數據寬度、刷新模式和頻率等
- SMRDATA
- DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
- DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
- DCD 0
- DCD 0
- DCD 0
- DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
- DCD 0
- DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
- DCD 0
- DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Tsrc<<18)+(Tchr<<16)+REFCNT)
- DCD 0x32
- DCD 0x30
- DCD 0x30
- ;*****以下IsrIRQ為中斷源判別程序***********
- IsrIRQ
- sub sp,sp,#4
- stmfd sp!,{r8-r9}
- ldr r9,=pINTOFFSET
- ldr r9,[r9]
- ldr r8,=HandleEINT0
- add r8,r8,r9,lsl #2
- ldr r8,[r8]
- str r8,[sp,#8]
- ldmfd sp!,{r8-r9,pc}
- LTORG
- ;****************以下為復位異常處理程序,主要完成時鐘及存儲器的初始化***************
- _reset
- ldr r0,=pWTCON
- ldr r1,=0x0
- str r1,[r0]
- ldr r0,=pINTMSK
- ldr r1,=0xffffffff
- str r1,[r0]
- ldr r0,=pINTSUBMSK
- ldr r1,=0x7fff
- str r1,[r0]
- ldr r0,=pLOCKTIME
- ldr r1,=0x00ffffff
- str r1,[r0]
- ldr r0,=pCLKDIVN
- ldr r1,=vCLKDIVN
- str r1,[r0]
- ldr r0,=pUPLLCON
- ldr r1,=vUPLLCON
- str r1,[r0]
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- ldr r0,=pMPLLCON
- ldr r1,=vMPLLCON
- str r1,[r0]
- ;****設置SDRAM存儲器參數,最多13個,占52字節。***
- adrl r0,SMRDATA
- ldr r1,=pBWSCON
- add r2,r0,#52
- 0
- ldr r3,[r0],#4
- str r3,[r1],#4
- cmp r2,r0
- bne %B0
- ;*********初始化可能用到的不同工作模式下的堆棧區,即設置他們的堆棧指針*****
- InitStacks
- mrs r0,cpsr
- bic r0,r0,#MODEMASK|NOINT
- orr r1,r0,#IRQMODE
- msr cpsr_cxsf,r1
- ldr sp,=IRQStack
- orr r1,r0,#USERMODE
- msr cpsr_cxsf,r1
- ldr sp,=UserStack
- ldr pc,=Main
- LTORG
- ;以下為主程序區
- Main
- ldr r0,=pINTMOD
- ldr r1,=0x0
- str r1,[r0]
- ldr r0,=HandleEINT0+0x38 ;定時器4在二級向量表中的地址
- adrl r1,HandleTime4 ;提取定時器4中斷處理程序地址
- str r1,[r0]
- ldr r0,=0x20005000
- ldr r1,=0x00
- str r1,[r0]
- ldr r0,=0x20007000
- ldr r1,=0x00
- str r1,[r0]
- ldr r0,=0x20006000
- ldr r1,=0xff
- str r1,[r0]
-
- ldr r0,=pTCFG0
- ldr r1,=0x0000f900
- str r1,[r0]
- ldr r0,=pTCFG1
- ldr r1,=0x00002000
- str r1,[r0]
- ldr r0,=pTCNTB4
- ldr r1,=0x0000ADC0
- str r1,[r0]
- ldr r0,=pTCON
- ldr r1,=0x00600000
- str r1,[r0]
- ldr r0,=pTCON
- ldr r1,=0x00500000
- str r1,[r0]
- ldr r0,=pINTMSK
- ldr r1,=0xFFFFBFFF
- str r1,[r0]
- wait_server
- b .
- mov r0,r5
- bic r0,r0,#MODEMASK|NOINT
- orr r1,r0,#USERMODE
- msr cpsr_cxsf,r1
- b wait_server
- LTORG
- HandleTime4
- stmfd sp!,{r0,r1,lr}
- ldr r1,=int_count
- ldr r1,[r1]
- ldr r0,=0x20005000
- str r1,[r0]
- cmp r1,#16
- beq step1
- add r1,r1,#1
- ldr r0,=int_count
- ;mov r1,#0
- str r1,[r0]
- b step2
- step1 ldr r0,=int_count
- mov r1,#1
- str r1,[r0]
- step2 ldr r0,=pINTSUBMSK
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
實驗十定時器qrs10_2.rar
(1.96 KB, 下載次數: 11)
2017-7-11 15:59 上傳
點擊文件名下載附件
S3C2440 下載積分: 黑幣 -5
|