首页 > 其他分享 >ARM体系结构和接口技术(十一)定时器中断实验

ARM体系结构和接口技术(十一)定时器中断实验

时间:2024-08-27 19:22:36浏览次数:12  
标签:TIM3 GICC 定时器 GICD 接口技术 中断 使能 寄存器 ARM

文章目录

一、实验分析

在这里插入图片描述
通过定时器TIM3的计数功能,产生一个定时器中断,将中断信号转发给GIC;
GIC控制器接收到中断信号后,将其转发给指定的CPU进行处理。
其中,RCC为TIM3提供时钟源。

  • 注:此时定时器只用于计数功能,并不需要再产生PWM方波,因此无需再配置捕获比较寄存器,仅配置自动重装载寄存器即可。
    在这里插入图片描述

二、RCC章节:找到外设基地址并使能外设控制器时钟源

1. RCC

在这里插入图片描述
RCC挂在AHB4总线,基地址0x50000000

2. GICC和GICD

在这里插入图片描述
GICC和GICD挂在Cortex-A7核内部总线,无需开发人员手动使能时钟源
GICC基地址0xA0022000
GICD基地址0xA0021000

3. TIM3

在这里插入图片描述
TIM3挂在APB1总线上,需要手动使能时钟源
TIM3基地址0x40001000

三、TIM3章节

在这里插入图片描述
当发生更新事件时会置位更新中断标志位,
因此需要设置相关的寄存器使能该标志位,在处理完中断后需要清除该标志位

(一)CR1寄存器

在这里插入图片描述
ARPE:使能自动重载寄存器的缓冲区
CMS:设置对齐模式,选择边沿对齐
DIR:计数方向,此处选择向下计数
CRN:计数器使能位

(二)DIER寄存器

在这里插入图片描述
在这里插入图片描述
此处将UIE位置1,使能更新中断

(三)SR寄存器

在这里插入图片描述
在这里插入图片描述
UIF
读1,说明中断挂起,即中断发生了。
写0,清除中断标志位。

(四)PSC寄存器

在这里插入图片描述
分频寄存器,
注意,该寄存器是16位寄存器,因此分频值可设置为0~65535,即可以设置为1~65536分频

(五)ARR寄存器

在这里插入图片描述
自动重载寄存器
此处使用TIM3为一个16位的寄存器,因此其可装载的数值范围为0~65535

四、GIC章节

(一)查看TIM3中断的中断号

在这里插入图片描述

(二)GICD

1. GICD_CTLR

在这里插入图片描述
使能GROUP0

2. GICD_ISENABLERx

在这里插入图片描述
使能中断号。
TIM3中断号是61,ISENABLER每个寄存器设置32个中断,
61/32=1…29
因此设置GICD_ISENABLER[1]的第29位为1,使能

3. GICD_ICPENDRx

在这里插入图片描述
写1,清除终端挂起标志位

4. GICD_IPRIORITYRx

在这里插入图片描述

设置中断权限
每个寄存器管理4个中断号,
61/4=15…1
因此需要设置GICD_IPRIOROTYR[15]的第8*1+3位

5. GICD_ITARGETSRx

在这里插入图片描述
设置中断分配给哪个CPU,每个寄存器管理4个中断号
61/4=15…1
因此需要设置GICD_ITAGETS[15]的第8*1位

(三)GICC

1. GICC_CTRL

在这里插入图片描述
使能GROUP0

2. GICC_PMR

在这里插入图片描述
设置权限掩码

3. GICC_IAR

在这里插入图片描述

4. GICC_EOIR

在这里插入图片描述

五、代码实现

实现一个5s中断

tim.c

void tim3_IT_init(void){
    //时钟源使能
    RCC_APB1->tim3_en=1;
    //PSC寄存器设置分频值为10000 未分频是209MHz,分频209000就是1000Hz
    TIM3->PSC=20900-1; //分频后时钟为1MHz
    TIM3->ARR=10000; //计数值为1000,此时就是1S
    TIM3->CR1.ARPE=1;//预加载寄存器使用缓冲区
    TIM3->CR1.DIR=1;//向下计数
    TIM3->CR1.CMS=0;//边沿
    TIM3->DIER |= 0x1<<0; //使能更新中断
    
    TIM3->CR1.CEN=1;//使能定时器
}

gic.c

void gic_tim3_init(void){
    //使能GICD中断号
    GICD->ISENABLER[1] |= (0x1<<29);      //使能GICD中断号9   61/32=1...29
    //设置优先级
    GICD->IPRIORITYR[15] &= ~(0xf<<11);
    GICD->IPRIORITYR[15] |= (0x5<<11);    //设置优先级        61/4=15...1

    //分配CPU
    GICD->ITARGETSR[15] &= ~(0x3<<8);
    GICD->ITARGETSR[15] |= (0x1<<8);  //设置中断给CPU0  61/4=15...1

    GICD->CTRL |= (0x1<<0);      //使能GICD组0
    //配置GICC
    GICC->PMR |= 0x1f<<3;         //31
    GICC->CTLR|= 0x1<<0;         //使能GICC
}

do_irq.c

static unsigned int count = 0;
void do_irq(void) 
{
    int irqnum=0;
    irqnum = GICC->IAR & 0x1ff;
    switch(irqnum){
        case 61:    //tim3中断
            count++;
            if(count==5){
                printf("interrupt 5s\n");
                count=0;
            }
            TIM3->SR &= ~(0x1<<0);//清除中断标志位
            GICD->ICPENDR[1] |=(1<<29); //61/32=1 61%32=29
        break;
    }
    GICC->EOIR = irqnum;
}

标签:TIM3,GICC,定时器,GICD,接口技术,中断,使能,寄存器,ARM
From: https://blog.csdn.net/weixin_44254079/article/details/141388537

相关文章

  • 深入理解 UCOSIII 软件定时器
    一、引言在嵌入式系统开发中,定时器是一种非常重要的工具。UCOSIII作为一款广泛应用的实时操作系统,其软件定时器功能为开发者提供了强大的定时解决方案。本文将深入探讨UCOSIII软件定时器的工作原理、使用方法以及实际应用中的注意事项。二、UCOSIII软件定时器概述UCOS......
  • STC89C52 定时器浅谈
    文章目录1、定时器1.1定时器简介1.2定时器构成1.2.1系统时钟1.2.2计数单元1.2.3中断系统1.2定时器0/1的相关寄存器1.2.1TMOD1.2.2TCON1.3初始化定时器01、定时器1.1定时器简介定时器,又称为计数器,是51单片机的内部资源,即电路的连接和运转都在单片机内部......
  • 国内ubuntu安装docker,支持amd64/arm64
    当前有一台鲲鹏920处理器的服务器,需要在服务器上安装docker,但是由于国内服务器无法访问docker官网,故在收集各资料后,实践后整理出一个简易文档。1.卸载默认安装的dockersudoapt-getremovedockerdocker-enginedocker.iocontainerdrunc2.安装使用https使用存储库的......
  • 【Pycharm2024.1.2安装使用教程】24年教程,小白轻松上手!(附安装包永久机火码+工具)
      今天给大家免费分享一个Pycharm2024.1.2版的安装使用教程,全文通过文字+图片的方式讲解,手把手教你如何安装使用Pycharm,只需要几分钟即可搞定!看之前先看这,所有机火码的机火是谐音(你们知道的谐音!)一、下载安装pycharm(支持mac、window、linux)1、建议直接在官网下载......
  • MacOS安装 Python 和 PyCharm
    MacOS安装Python3.12.5和PyCharm小阿呜有话说一、MacOS安装PythonPython官网下载二、MacOS安装PyCharmPyCharm官网下载叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!小阿呜有话说前不久换了新电脑,需要重新......
  • 2024年智能革命:HarmonyOS NEXT与盘古大模型5.0的颠覆性融合
    引言2024年,这一年注定在全球智能设备市场的历史上写下浓墨重彩的一笔。作为全球科技巨头,华为再次以其前瞻性的布局,推动了技术与应用的深度融合。在这个充满变革的时代,华为通过不断扩展的鸿蒙生态系统,重新定义了操作系统与AI技术的结合方式。你是否已经感受到这场变革的力量?在全......
  • 【HarmonyOS NEXT应用开发】案例99:基于HiAppEvent能力的应用崩溃监控上报
    HiAppEvent介绍:HiAppEvent的接口设计,由系统决定回调的时机。使用这种机制,可以获取的应用崩溃事件结构化日志。HiAppEvent运营&运维事件软件模块,用于连接APP开发者、APM上传模块、HiView故障维测服务。支撑应用开发者完成运营和运维的数据分析工作。主要通过如下措施支持开发......
  • 【HarmonyOS NEXT应用开发】案例98:HiLog日志能力介绍
    ⦁   日志打印及显示。日志打印格式:日期时间进程号线程号日志级别domainID/日志标签:日志内容如下所示,这是一条domainID为0x003200和标签是"testTag"的info级别的日志:04-1917:02:14.735 5394 5394IA03200/testTag:thisisainfolevelhilog说明:日志级......
  • STC89C52单片机外部中断与定时器中断寄存器配置分析
    参考:STC89C52手册摘自手册:中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。当中央处理器CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种......
  • 芯片、GPU、CPU、显卡、显存、x86、ARM、AMD等基础知识
    1.芯片芯片指的是半导体材料制成的集成电路,可以包含一个或多个电子元件、电路或系统。芯片可以是任何电子设备的组成部分,不仅限于CPU,还包括GPU、内存芯片、存储控制器、网络接口等。GPU和CPU是两种最常见的特定的芯片。它们分别针对图形处理和通用计算任务进行了优化。2.CPU......