这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 综合技术» 基础知识» lpc2132,RTC lpc2132的RTC报警设置问题。

共2条 1/1 1 跳转至

lpc2132,RTC lpc2132的RTC报警设置问题。

院士
2006-09-17 18:14:16 打赏
lpc2132,RTC lpc2132的RTC报警设置问题。



关键词: lpc2132 报警 设置 问题

院士
2006-12-22 22:43:00 打赏
2楼
问 LPC2132的 RTC报警设置可否时、分、秒、周多项设置?我试过,仿佛只能单独设置一项,才能产生中断,但我需要多项匹配才产生中断报警呀,象8563时钟芯片都可以的,是否有特别的设置呀?请速告之,急!!!!!!!!!! 1: 可以,通过设置报警屏蔽寄存器即可实现您的要求 2: lpc2132RTC报警设置问题我就是在报警屏蔽寄存器里设置的呀,如下:
void RTCAl ARMSet(void)
{
AMR = 0xf9; //周、时、分、秒报警允许。

ALDOW = RtcAl ARM.Weekday;
ALHOUR = RtcAl ARM.Hour;
ALMIN = RtcAl ARM.Minute;
ALSEC = RtcAl ARM.Second;
}

当AMR = 0XF8或AMR = 0XF9;允许时、分、秒等两个及以上报警时,到了设定的时间,不会产生中断;而当AMR = 0XF7,只有一个周报警时,到了设定的周数,会产生报警呀?

void __irq RTC_int (void)
{
counter++;
if(counter>16) counter=0;

if ((IO0SET & BEEP) == 0) IO0SET = BEEP;
else IO0CLR = BEEP;

// MSPI_SendData(DISP_TAB[counter]); // 数码管显示
IO1CLR = LEDS8 & (1 << (18+2)); // 点亮LED4
ILR = 0x03; // 清除中断标志
VICVectAddr = 0x00; // VIC结束
}

RTC相关的初始化设置:
VICVectCntl3 = 0x20 | 13; // 分配 RTC中断到向量中断3
VICVectAddr3 = (uint32) RTC_int; // 设置中断服务程序地址
ILR = 0x03; // 清除 RTC中断标志
VICIntEnable = 1 << 13; // 使能 RTC中断


//========================测试 RTC==============================================
if ((IO0PIN & KEY6) == 0) // 如果KEY6按下
{
key = 6;
IO1CLR = LEDS8 & (1 << (18+4)); // 点亮LED5
DelayNS(30);
IO1SET = LEDS8 & (0xFF << (18));// 熄灭所有LED
//===================

RtcTime.Year = 05;
RtcTime.Month = 9;
RtcTime.Day = 16;
RtcTime.Weekday = 6;
RtcTime.Hour = 23;
RtcTime.Minute = 59;
RtcTime.Second = 00;

RtcAl ARM.Weekday = 0;
RtcAl ARM.Hour =24 ;
RtcAl ARM.Minute = 00;
RtcAl ARM.Second = 00;

RTCInit ();
RTCAl ARMSet();
//===================
}


3: 搂住你想的实在太简单了组合报警同时不冲突还需要进行软件编程进行筛选,不过实现不难的,我现在就是可同时进行时、分、秒、周多项设置但不冲突 4: 楼上兄弟,确定不可组合报警吗?!楼上兄弟,确定 lpc2132不可组合报警吗?!
很多 RTC时钟芯片是可以的。软件编程是可以,但麻烦呀,是先设置周,到了周报警,再设置日报警,日报警到了,再设置时报警吗?
请指点呀! 5: re:设置多个匹配条件中断没有问题:

#include "config.h"

#define BEEP 1 << 7 // P0.7控制蜂鸣器

/*
********************************************************************************************************
** 函数名称 : RTC_Int()
** 功能描述 : RTC中断服务函数。
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************
*/
void __irq RTC_Int(void)
{
/* 取反BEEP控制口 */
if((IO0SET & BEEP) == 0) IO0SET = BEEP;
else IO0CLR = BEEP;

ILR = 0x03; // 清除 RTC报警中断标志
VICVectAddr = 0; // 向量中断结束
}


/*
********************************************************************************************************
** 函数名称: main()
** 功能描述: RTC秒定时中断实验。
*******************************************************************************************************
*/
int main (void)
{
IO0DIR = BEEP;
IO0SET = BEEP;

IRQEnable(); // IRQ中断使能

/* RTC初始化 */
PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;

YEAR = 2003; // 初化年
MONTH = 6; // 初化月
DOM = 20; // 初化日

/* 初始化时间 */
HOUR = 8;
MIN = 30;
SEC = 00;

/* 设置报警时间 */
ALHOUR = 8;
ALMIN = 31;
ALSEC = 10;

CCR = 0x03;
AMR = 0xF8; // 允许时分秒报警
ILR = 0x03; // 清除 RTC增量和报警中断标志
CCR = 0x01; // 启动 RTC

/* VIC初始化 */
VICIntSelect = 0x00; // 设置所有中断连接IRQ中断
VICVectCntl0 = 0x20 | 13; // 分配通道0
VICVectAddr0 = (int) RTC_Int; // 设置中断服务程序地址
VICIntEnable = (1 << 13); // 使能 RTC中断

while(1); // 等待中断

return 0;
} 6: zlg ARM没有理解楼主的意思他的意思是报警复用,比如我要某个时间产生报警中断,然后每个增量中断也要复用,这需要软件编程进行判断的

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]