RTC 滴答计时器

1. RTC 滴答计时器

1.1 寄存器配置

RTCCON RTC控制寄存器

7:4 = 0000 设置频率

8 = 1 使能滴答计时器

TICNT

32位滴答时间计数值。

滴答计时器是一个上行计数器。如果当前的滴答数达到这个值,滴答时间中断发生。

备注:该值必须大于3

周期= (n + 1)/滴答时钟源频率

(n =滴答计数器值)

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;
}
相关推荐
传感器与混合集成电路4 分钟前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc14 分钟前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
Chery114020 分钟前
DPE5500 SPI以太网协议栈芯片详解:10/100M以太网、硬件TCP/IP与国产替代方案
arm开发·网络协议·tcp/ip
Felven28 分钟前
B. Collecting Game
c语言
Felven29 分钟前
C. Removing Smallest Multiples
c语言·开发语言
碧海银沙音频科技研究院1 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
恒锐丰科技林技术员2 小时前
EG1160 高压半桥驱动芯片:高压功率变换的实用驱动方案
经验分享·嵌入式硬件·硬件工程
水饺编程2 小时前
第2章:Linux 基础,重启命令
linux·c语言·汇编
智购科技自动售卖机厂家3 小时前
双摄像头方案F1-score只有0.85,排查发现是上下视角的融合逻辑写反了~YH
python·单片机·嵌入式硬件·算法·eclipse
llilian_163 小时前
脉冲时间间隔及计数如何精准测试?
功能测试·嵌入式硬件·51单片机·软件工程