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

📄 timeciir.s

📁 这是一个关于ARM7的实时时钟的C源代码
💻 S
字号:
#;****************************************************************************** 
#; 文件名:TIMECIIR.S
#; 功能:利用RTC的增量功能进行1S的定时,当定时时间到时,取反蜂鸣器控制I/O。
#; 说明:将跳线器JP7短接。
#;****************************************************************************** 
			.INCLUDE		"LPC2294.INC"
			
    		.EQU	RTC_BASE,		0xE0024000
			.EQU	BEEPCON,		0x00000080				/* P0.7引脚控制B1,低电平蜂鸣 */ 
			.EQU	FPCLK,			11059200

			.text  						 			/* 声明程序代码块 */ 
			.arm									/* 使用ARM指令 */
			.global  	main
            .func   	main
		
main: 		LDR		R0,=PINSEL0				
			MOV		R1,#0x00000000			
			STR		R1,[R0]					/* 设置管脚连接 */
			LDR		R0,=IO0DIR				
			LDR		R1,=BEEPCON
			STR		R1,[R0]	
			BL		SYSCLK_INI				/* 设置系统时钟 */
			
			BL		RTC_INI
			
MAIN_LOOP:	LDR		R0,=IO0SET
			MOV		R1,#BEEPCON
			STR		R1,[R0]					/* IO0SET=BEEPCON */
			
			LDR		R0,=ILR
WAIT1:		LDR		R1,[R0]
			ANDS	R1,R1,#0x01
			BEQ		WAIT1					/* 等待RTC增量中断标志 */
			MOV		R1,#0x01
			STR		R1,[R0]					/* ILR=0x01,清除中断标志 */
			
			LDR		R0,=IO0CLR
			MOV		R1,#BEEPCON
			STR		R1,[R0]					/* IO0SET=BEEPCON */
			
			LDR		R0,=ILR
WAIT2:		LDR		R1,[R0]
			ANDS	R1,R1,#0x01
			BEQ		WAIT2					/* 等待RTC增量中断标志 */
			MOV		R1,#0x01
			STR		R1,[R0]					/* ILR=0x01,清除中断标志 */
			
			B		MAIN_LOOP
			

#;******************************************************************************		
#; 名称:RTC_INI
#; 功能:初始化实时时钟,并启动。
#; 入口参数:无
#; 出口参数:无
#; 占用资源:R0、R1		
#;******************************************************************************
RTC_INI:
			LDR		R0,=RTC_BASE
			
			/* 设置基准时钟分频器(PREINT、PREFRAC) */
			LDR		R1,=FPCLK/32768-1
			STR		R1,[R0,#0x80]			
			LDR		R1,=FPCLK-(FPCLK/32768)*32768

			/* 初始化时钟值 */
			LDR		R1,=2004
			STR		R1,[R0,#0x3C] 			/* YEAR=2004 */
			MOV		R1,#2
			STR		R1,[R0,#0x38]			/* MONTH=2 */
			MOV		R1,#20
			STR		R1,[R0,#0x2C]			/* DOM=20 */
  			MOV		R1,#0x01
  			STR		R1,[R0,#0x0C]			/* CIIR=0x01,设置秒值的增量产生一次中断 */
  			MOV		R1,#0x01
  			STR		R1,[R0,#0x08]			/* CCR=0x01,启动RTC */

			MOV		PC,LR 	


#;******************************************************************************		
#; 名称:SYSCLK_INI
#; 功能:设置系统时钟。(M值为4,P值为2)
#; 入口参数:无
#; 出口参数:无
#; 占用资源:R0、R1		
#;******************************************************************************
SYSCLK_INI:	
			LDR		R0,=VPBDIV
			MOV		R1,#0x00
			STR		R1,[R0]					/* VPBDIV=0x00 */
			
			LDR		R0,=PLLCFG
			MOV		R1,#0x23
			STR		R1,[R0]					/* CFG=0x23,设置M值为4,P值为2 */
			LDR		R0,=PLLCON
			MOV		R1,#0x01
			STR		R1,[R0]					/* PLLCON=0x01 */
			LDR		R0,=PLLFEED
			MOV		R1,#0xAA
			STR		R1,[R0]					/* PLLFEED=0xAA */
			MOV		R1,#0x55
			STR		R1,[R0]					/* PLLFEED=0x55 */
WAIT_OK:		LDR		R0,=PLLSTAT				
			LDR		R1,[R0]
			ANDS	R1,R1,#0x0400
			BEQ		WAIT_OK					/* 等待PLL锁定 */
			
			LDR		R0,=PLLCON
			MOV		R1,#0x03
			STR		R1,[R0]
			LDR		R0,=PLLFEED
			MOV		R1,#0xAA
			STR		R1,[R0]
			MOV		R1,#0x55
			STR		R1,[R0]	
			
			MOV		PC,LR
			
			.ALIGN						/* 数据字对齐 */
			.LTORG						/* 声明文字池 */		
			.END

⌨️ 快捷键说明

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