📄 timeciir.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 + -