RTC 滴答计时器

1. RTC 滴答计时器

1.1 寄存器配置

RTCCON RTC控制寄存器

7:4\] = 0000 设置频率 \[8\] = 1 使能滴答计时器 ![](https://file.jishuzhan.net/article/1752921564875067394/cfb8e30938ec247a052150f1285cdd2d.webp) #### **TICNT** 32位滴答时间计数值。 滴答计时器是一个上行计数器。如果当前的滴答数达到这个值,滴答时间中断发生。 备注:该值必须大于3 ![](https://file.jishuzhan.net/article/1752921564875067394/6e57e0eab4a6a5cafd8fe69b523e8b3e.webp) 周期= (n + 1)/滴答时钟源频率 (n =滴答计数器值) ![](https://file.jishuzhan.net/article/1752921564875067394/f749e37539a9395610fff33694cc62d7.webp) rtc_tic----main.c ```cpp #include"exynos_4412.h" #include"uart.h" //rtc作为滴答定时器使用 /* * 滴答计时器初始化 * 参数:tic :滴答时钟计数 32768HZ 输入 * 初始化完成后自动开始 */ void rtc_tic_init(unsigned int tic) { //设置寄存器RTCCON[7:4]位,设置滴答计时器子时钟源选择, //这里设置为0000,及时钟源为32.768KHz RTCCON = RTCCON & (~(0xF << 4)); //设置寄存器RTCCON[8]位置1,滴答计时器使能 RTCCON = RTCCON | (0x1 << 8); //配置TICCNT寄存器,这里设置为32.768KHz,1s发生一次中断 //周期= (n + 1)/滴答时钟源频率 //(n =滴答计数器值) TICCNT = tic; //GIC 面向中断源 //开启总中断 ICDDCR = ICDDCR | 0x1; //配置端口中断使能 ICDISER.ICDISER2 = ICDISER.ICDISER2 | (0x1 << 13); //配置端口优先级 优先级设置为5 rtc_alarm 中断id 77 ICDIPR.ICDIPR19 = ICDIPR.ICDIPR19 & (~(0xFF << 8)) | (5 << 8); //配置中断源送去哪个cpu处理 0x1表示直送cpu0 ICDIPTR.ICDIPTR19 = ICDIPTR.ICDIPTR19 & (~(0xFF << 8)) | (0x1 << 8); //GIC 面向cpu //cpu响应中断使能 =1 使能 =0 不使能 CPU0.ICCICR = CPU0.ICCICR | 0x1; //配置cpu过滤优先级 CPU0.ICCPMR = CPU0.ICCPMR | 255; } void rtc_tic_interrupt_clear(void) { RTCINTP = RTCINTP | (0x1 << 0); //清RTC中断标志位 ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 13); //清除GIC中断标志位 } void do_irq(void) { unsigned int irq_num; irq_num = CPU0.ICCIAR & 0x3FF; //获取中断号 switch(irq_num) { case 77: rtc_tic_interrupt_clear(); printf("rtc_tic time interrupt!\r\n"); break; } //最后清除cpu中断挂起 //写入中断id清除对应中断挂起 CPU0.ICCEOIR = irq_num; } int main() { int a = 100; uart_init(); printf("hello!a=%d\r\n",a); //周期= (n + 1)/滴答时钟源频率 //(n =滴答计数器值) rtc_tic_init(32767); while(1); return 0; } ``` ![](https://file.jishuzhan.net/article/1752921564875067394/4ebc10eb296e4ba83fd27aebf5352f02.webp)

相关推荐
tt5555555555552 小时前
C/C++嵌入式笔试核心考点精解
c语言·开发语言·c++
科大饭桶2 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
anghost1505 小时前
基于 STM32 的多传感器健康监测系统设计
stm32·单片机·嵌入式硬件
STC_USB_CAN_80517 小时前
所有普通I/O口都支持中断的51单片机@Ai8051U, AiCube 图形化配置
单片机·嵌入式硬件·51单片机
码小文8 小时前
Altium Designer 22使用笔记(8)---PCB电气约束设置
笔记·嵌入式硬件·硬件工程·ad22
dumpling01209 小时前
新手向:使用STM32通过RS485通信接口控制步进电机
stm32·单片机·嵌入式硬件
hazy1k9 小时前
STM32-FreeRTOS快速入门指南(中)
stm32·单片机·嵌入式硬件
肉夹馍不加青椒9 小时前
第三十三天(信号量)
java·c语言·算法
清风6666669 小时前
基于51单片机自动浇花1602液晶显示设计
单片机·嵌入式硬件·mongodb·毕业设计·51单片机·课程设计
古译汉书10 小时前
嵌入式-SPI番外之按钮驱动程序的编写-Day15
c语言·stm32·单片机·嵌入式硬件·mcu·算法