共2条 1/1
1
跳转至
页
lpc2132,RTC lpc2132的RTC报警设置问题。
问 LPC2132的
RTC报警设置可否时、分、秒、周多项设置?我试过,仿佛只能单独设置一项,才能产生中断,但我需要多项匹配才产生中断报警呀,象8563时钟芯片都可以的,是否有特别的设置呀?请速告之,急!!!!!!!!!!
答
1: 可以,通过设置报警屏蔽寄存器即可实现您的要求
答
2:
lpc2132的
RTC报警设置问题我就是在报警屏蔽寄存器里设置的呀,如下:
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没有理解楼主的意思他的意思是报警复用,比如我要某个时间产生报警中断,然后每个增量中断也要复用,这需要软件编程进行判断的
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
跳转至
页
回复
有奖活动 | |
---|---|
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? | |
抽奖了,抽奖了,金升阳医疗电源 |
打赏帖 | |
---|---|
【换取手持数字示波器】HMI开发板首秀RTduino被打赏30分 | |
电解电容引发的问题被打赏50分 | |
【换取手持数字示波器】+AT-START-F405之串口通讯被打赏30分 | |
【换取手持数字示波器】BeetleESP32C6+OLED被打赏40分 | |
【换取手持数字示波器】+ESP32C6与PWM(脉冲宽度调制)被打赏30分 | |
【换取手持数字示波器】+BeetleESP32C6初步探入,点灯被打赏30分 | |
【换取手持数字示波器】+pico驱动点阵屏被打赏40分 | |
玩转“DFRobot盖革计数器模块”+【安信可BW16-Kit】MQTTBasic被打赏40分 | |
玩转“DFRobot盖革计数器模块”+remotecontrol分享被打赏30分 | |
【换取手持数字示波器】+pico驱动WS2812灯环被打赏40分 |