历史上的今天
返回首页

历史上的今天

今天是:2025年07月20日(星期日)

2018年07月20日 | Systick中断函数SysTick_Handler的实现引发的思考

2018-07-20 来源:eefocus

就在前一段时间,有人突然问我SysTick_Handler(void)这个定时器中断处理函数是怎么定义的?根据以往的经验,我感觉在底层应该会有一个类似于函数声明的东西的存在,但是往下跟程序的话,一直都没有找到相应的定义或者声明,那么究竟SysTick_Handler这个函数怎么来的呢?是不是可以人为的做修改呢?给我的第一感觉是,肯定是可以做修改的,毕竟只是一个 函数 的名字而已,于是就翻看LPC1114的数据手册,结合网上的一些参考文件,去理清楚到底是怎么回事。


那么还是非常容易找到SysTick_Handler()这个函数的位置的,如下图所示:





    我们会发现,几乎所有的中断函数的名字都已经在这里写好了,所以我们有的时候在程序中使用的一些中断,都可以在这个地方进行查找。

    那么,我们如果想要改变一个中断的名字,那么只需要在这里做下修改就可以了,在程序中再使用我们自己定义的中断的名字,但是结合实际的情况来考虑问题,如果我们修改了这些中断函数的名字的话,那么就会降低我们代码的可移植性,所以基本上我们在这里不建议大家做修改。



      说到了定时器中断处理函数,那么定时器Systick是怎样来进行设置的呢?



 上图是LPC1114系统滴答定时器SysTick的结构图。系统滴答定时器位于Cortex-M0内核中,也就是说对于LPC1114或者其他的以CortexM0为内核的板子中,都会有这个系统的定时器。它存在的主要目的是为嵌入式操作系统提供100HZ(即10ms)的定时功能。

    

    系统定时器一共有四个寄存器:这个可以从数据手册上面清楚的了解到:




SYST_CSR    :  系统定时器控制和状态寄存器

SYST_RVR    :  系统定时器重载值寄存器

SYST_CVR    :系统定时器当前值寄存器

SYST_CALIB  : 系统定时器校准寄存器


    在系统定时器的四个寄存器中,SYST_CALIB为校准寄存器,这个是在出厂之前就已经配置好了的,我们不必考虑这个寄存器。那么我们一共需要配置3个寄存器就可以完成我们工作的模块。



  那么接下来我们对我们所要操作的三个寄存器做进一步的剖析

(1)SYST_CSR   寄存器




    CSR寄存器用到的位有4个,bit0用于是否开启定时器,置1的话就是允许,bit1用于控制是否产生中断,该位置为1为允许产生中断,bit2用于设置定时器的时钟源,设为1,定时器的时钟源为主时钟,反之设为0的话定时器的时钟源为主时钟的一半。


(2)SYST_RVR   寄存器   




    RVR寄存器用到0~23位,这个值是定时器倒计时的初始值,打开定时器以后,就会从这里设置的值倒计时到0,倒计时到0以后,又会从此值开始倒计时。


(3)SYST_CVR  寄存器   




    CURRENT  :  读此寄存器返回系统定时器的当前值,给这个寄存器赋值,将使定时器归0,且清CTRL中的COUNTFLAG位。

    CVR寄存器也是用到0~23位,这是一个状态寄存器,当定时器开始运作的时候,这个值在不断的变化,从RVR寄存器获取初值以后,倒计时到0.



系统定时器函数——SysTick_Config()函数



 系统自带的Systick函数,由CMSIS提供,位于core_cm0.h文件中,在使用的时候,可以直接调用的,函数有一个参数ticks,由函数内部的语句

  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; 

知道ticks就是重载值,表示两次中断的计数。

    

SysTick_Config()函数中的LOAD就是我们之前说的RSR,VAL就是CVR,CTRL就是之前的CSR,上面的操作就是对寄存器相应位进行设置的过程。

    函数中,对控制寄存器的bit0,bit1,bit2都置1,对照前面寄存器相关位的定义可以知道,时钟设置为等于主频,打开系统定时器中断,允许定时器运行。


推荐阅读

史海拾趣

Elpakco Inc公司的发展小趣事

Elpakco Inc公司的创立,源于创始人对电子行业未来趋势的敏锐洞察。在电子科技日新月异的时代,创始人凭借在半导体封装领域的丰富经验和深厚技术积累,决定创立一家专注于高精度电子元件封装的公司。初创时期,资金紧张、技术难度大、市场竞争激烈,但创始人带领团队夜以继日地研发,不断突破技术瓶颈,终于成功研制出第一款高精度、高可靠性的电子封装产品,为公司的发展奠定了坚实的基础。

ELMOS公司的发展小趣事

ELMOS的Fab-Lite方法为晶圆加工和测试业务提供了灵活和高效的制造策略。这种制造策略使得ELMOS能够根据市场需求快速调整生产计划,确保产品的及时供应。同时,通过与亚洲领先的晶圆代工厂合作伙伴的成功合作,ELMOS确保了供应链的安全和稳定,为客户提供了无与伦比的性能。

對餘科技(DIOFIT)公司的发展小趣事

DIOFIT公司一直秉持着品质至上的生产理念,注重产品质量和用户体验。他们严格控制原材料采购和生产流程,确保每一款产品都符合高标准的质量要求。同时,DIOFIT公司还建立了完善的售后服务体系,及时解决用户在使用过程中遇到的问题,赢得了用户的信赖和好评。

Alpha-Micro Electronics公司的发展小趣事

随着科技的不断发展,DIOFIT公司始终将技术创新作为发展的核心驱动力。他们不断投入研发资金,引进先进技术和人才,致力于研发具有自主知识产权的电子产品。在物联网、人工智能等前沿领域,DIOFIT公司取得了一系列突破性的成果,推出了一系列具有竞争力的产品,成为行业内的技术创新引领者。

DFI公司的发展小趣事

DFI深知产品质量对于企业的重要性。因此,公司从设计到生产,都实施了严格的质量管理。在产品设计阶段,DFI的专责团队会对电路、机构和零组件进行严格的测试与检验,确保每个专案的设计和质量都具备一致的高质量。在生产阶段,所有产品出货前都必须通过完整的产品内部检验,以确保产品的可靠性和耐久性。这些质量管理措施使DFI的产品在市场上享有良好的口碑,也为公司赢得了众多客户的信任。

General Semiconductor ( Vishay )公司的发展小趣事

Vishay一直致力于技术创新和产品升级。在2001年,公司收购了全球二极管和整流器领先制造商General Semiconductor,这一收购极大地增强了Vishay在二极管和整流器领域的实力。同时,Vishay还通过收购RFWaves公司,涉足无线领域,为公司带来了新的增长动力。此外,Vishay还在全球范围内布局制造基地和销售办事处,确保能够为客户提供优质的产品和服务。

问答坊 | AI 解惑

求知

那位好心人士有CMD55,8960及CM U200的不使用方法,能给我发一份吗???我的邮箱是xiaogang725@126.com       谢谢了!!!!!…

查看全部问答>

ARM开发流程.

个人觉得不错!…

查看全部问答>

异常求助

((CBitmapButton*)GetDlgItem(ctrId))->LoadBitmaps(resId,0,0,0); 复制代码 以上代码反复执行几次就会出现以下异常。 First-chance exception in Ad.exe:0x80000002:Datatype Misalignment 我试过网上的方法但是还是不行,有网友说是指针不能 ...…

查看全部问答>

问一个驱动动态加载卸载的问题??

1. 我知道使用ActivateDeviceEx()加载,用DeactivateDevice()卸载 但是我要做的是:给用户一个程序,选择打开后动态加载一个驱动,然后用户把程序关了,并在不想用的时候再打开这个程序选择关闭把驱动卸了,如何一直保留ActivateDeviceEx() ...…

查看全部问答>

U信通让手机兼备PTT功能

U信通让手机兼备PTT功能 2009年中国3G网络业务正式开始运行,集群通信业务也将从传统模拟信号时代向手机数字时代转变。日前,艾博广迅推出了安装在手机上的U信通产品。就像电脑上MSN、QQ、等即时通信工具能实现语音通话一样,安装在手机上的U信通 ...…

查看全部问答>

借宝地一用,招聘DSP/ARM设计人才

1.计算机、电子或相关专业本科毕业 2.熟悉TI DSP结构 3.熟悉C与C++ 4.1年以上TI DSP软件开发工作经验 5.具有高度的责任心,有团队合作精神 即将成立新的公司,公司需要以下人员:图象处理和模式识别,DSP+ARM软硬开发,音视频编解码,音 ...…

查看全部问答>

串口使用WINDOWS API的问题

代码很简单,如下:                 CString sPort = \"Com10\";                 //打开一个串口设备               &nb ...…

查看全部问答>

lm3s615 PWM模块

lm3s615 PWM模块,16位定时器做PWM…

查看全部问答>

易电源学习贴

全新SIMPLE SWITCHER 易电源纳米模块非常适合空间受限的应用,扩展了当今市场上最小的1A封装的产品组合和功能。 易电源纳米模块在一个微小解决方案尺寸中整合了易用性和高性能。纳米模块是目前市场上最小的1A封装。该器件是首款将IC安装在电感 ...…

查看全部问答>