共2条
1/1 1 跳转至页
lpc2132,RTC lpc2132的RTC报警设置问题。
问
LPC2132的RTC报警设置可否时、分、秒、周多项设置?我试过,仿佛只能单独设置一项,才能产生中断,但我需要多项匹配才产生中断报警呀,象8563时钟芯片都可以的,是否有特别的设置呀?请速告之,急!!!!!!!!!!
答 1:
可以,通过设置报警屏蔽寄存器即可实现您的要求
答 2:
lpc2132的RTC报警设置问题我就是在报警屏蔽寄存器里设置的呀,如下:
void RTCAlARMSet(void)
{
AMR = 0xf9; //周、时、分、秒报警允许。
ALDOW = RtcAlARM.Weekday;
ALHOUR = RtcAlARM.Hour;
ALMIN = RtcAlARM.Minute;
ALSEC = RtcAlARM.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;
RtcAlARM.Weekday = 0;
RtcAlARM.Hour =24 ;
RtcAlARM.Minute = 00;
RtcAlARM.Second = 00;
RTCInit ();
RTCAlARMSet();
//===================
}
答 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: zlgARM没有理解楼主的意思他的意思是报警复用,比如我要某个时间产生报警中断,然后每个增量中断也要复用,这需要软件编程进行判断的
void RTCAlARMSet(void)
{
AMR = 0xf9; //周、时、分、秒报警允许。
ALDOW = RtcAlARM.Weekday;
ALHOUR = RtcAlARM.Hour;
ALMIN = RtcAlARM.Minute;
ALSEC = RtcAlARM.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;
RtcAlARM.Weekday = 0;
RtcAlARM.Hour =24 ;
RtcAlARM.Minute = 00;
RtcAlARM.Second = 00;
RTCInit ();
RTCAlARMSet();
//===================
}
答 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: zlgARM没有理解楼主的意思他的意思是报警复用,比如我要某个时间产生报警中断,然后每个增量中断也要复用,这需要软件编程进行判断的
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |