当前位置: 首页 > news >正文

RTC闹钟的中断处理方法以及程序设计

rtc时钟系统里还有闹钟发生器,通过程序员自己设置,每隔一段时间就产生中断程序一次。
本章使用的寄存器地址在上一章已经说明过(基地址加偏移量)
RTC时钟的闹钟需要借助中断的方法来完成,中断的使用方面以及相应的函数设置我们在以前的文章中已经详细地说过,这里不再赘述。


//alarm使能函数,使能alarm
void rtc_set_alarm(void)
{
(*((volatile unsigned long *)(RTC_BASE + 0x54))) = num_to_bcd(14);


   //RTCALM有很多使能位,可以使能年月日时分秒等情况
   //bit6是全局使能位 bit1是“分”使能位
   //设置RTCALM的各个位。   
(*((volatile unsigned long *)(RTC_BASE + 0x50))) |= 1<<0;
(*((volatile unsigned long *)(RTC_BASE + 0x50))) |= 1<<6;
}


void isr_rtc_alarm(void)
{
static int a = 0; 
printf("rtc alarm, a = %d...", a++);

(*((volatile unsigned long *)(RTC_BASE + 0x30))) |= (1<<1);


//清除中断处理函数的地址
    VIC0ADDR = 0;
    VIC1ADDR = 0;
    VIC2ADDR = 0;
    VIC3ADDR = 0;
}


int main(void)
{
uart_init();
system_init_exception();
rtc_set_alarm();

intc_setvectaddr(NUM_RTC_ALARM, isr_rtc_alarm);
intc_enable(NUM_RTC_ALARM);

struct rtc_time aa;

while (1)
{
rtc_get_time(&aa);
printf("The time is: %d.",aa.second);

volatile int i, j;
for (i=0; i<10000; i++)
for (j=0; j<1000; j++);
printf("-------");
}
}


这个时间设定的意义是,在每分钟的第14秒产生一次闹钟中断,只借助硬件的话,只能设置一个闹钟,如果想设置多个闹钟,也可以通过软件的方式来设置。
 

相关文章:

  • altium designer 制作元器件封装库
  • VTK的Mapper
  • VTK交互系统 1 交互模式入门
  • VTK显示像素图
  • VTK交互系统 2 交互器样式
  • VTK交互系统 3 自定义交互器样式
  • VTK交互系统 4 自定义交互器样式2 键盘鼠标交互器设置
  • Qt多线程1
  • Qt多线程2
  • 基于QT的文件管理软件编写 系列 引言
  • 基于QT的文件管理软件编写 系列 1
  • python安装tensorflow
  • 机器学习之 Keras默认数据集/模型存放位置
  • 从零开始写出分而治之查找最大子列表的算法
  • 学机器学习必备的一些python句法基础 1 列表 元组 字典 条件语句
  • android图片蒙层
  • Asm.js的简单介绍
  • emacs初体验
  • es6(二):字符串的扩展
  • Github访问慢解决办法
  • Java读取Properties文件的六种方法
  • java正则表式的使用
  • laravel5.5 视图共享数据
  • PHP CLI应用的调试原理
  • rabbitmq延迟消息示例
  • Redis 懒删除(lazy free)简史
  • uva 10370 Above Average
  • 基于web的全景—— Pannellum小试
  • 浅谈web中前端模板引擎的使用
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # C++之functional库用法整理
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #、%和$符号在OGNL表达式中经常出现
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $().each和$.each的区别
  • (10)ATF MMU转换表
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (编译到47%失败)to be deleted
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .java 9 找不到符号_java找不到符号
  • .net快速开发框架源码分享
  • @SentinelResource详解
  • @Transactional类内部访问失效原因详解
  • [.net] 如何在mail的加入正文显示图片