就在前一段时间,有人突然问我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,对照前面寄存器相关位的定义可以知道,时钟设置为等于主频,打开系统定时器中断,允许定时器运行。

SysTick_Handler cortex-m0 LPC1114相关推荐

  1. 基于安路FPGA的Cortex M0移植【FPGA】

    基于安路FPGA的Cortex M0移植 这其实是今年上半年参加集创赛安路科技杯时候做的内容,当时忙着考研复习大概做了个框架参赛,没想到还混到一个分赛区二等奖加一次公费旅游,现在保研后闲着写点博客记录 ...

  2. hardfault常见原因_XMC实验分享之四十八: Cortex M0的Hard Fault发生原因

    凡是在Cortex M系列内核上写过程序的程序员, 没有不知道Hard Fault的. 大多数程序出现问题的表现就是进入Hard Fault. 但是进入Hard Fault的原因是甚么, 为了查明这个 ...

  3. 基于Cortex M0+的STM32L0系列简介

    L0系列是意法半导体于2014年新推出的超低功耗的MCU,基于ARM Cortex M0+内核.目前有STM32L0x1,STM32L0x2,STM32L0x3三个子系列,默认主频为32M,RAM都是 ...

  4. 32 位 ARM® Cortex®-M0+内核 单片机

    PY32F003 系列微控制器采用高性能的 32 位 ARM® Cortex®-M0+内核,宽电压工作范围的 MCU.嵌入高达 32Kbytes flash 和 4Kbytes SRAM 存储器,最高 ...

  5. 32位ARM®Cortex®-M0+内核单片机 XL32F003系列MCU

    XL32F003系列微控制器采用高性能的32位ARM®Cortex®-M0+内核,宽电压工作范围的MCU.嵌入高达64 Kbytes flash和8 Kbytes SRAM存储器,最高工作频率32 M ...

  6. 新唐ARM®Cortex™-M0特点总结

    ARM®CortexTM-M0特点: 主频50mhz主频,0.9DMIPS/MHz(相当于8位和16位产品的2-4倍) 小的处理内核,系统和存储器,可以降低器件成本 完善的电源管理(睡眠,深度睡眠和深 ...

  7. ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带

    ARM  Cortex  M0权威指南_PDF电子书下载 带书签目录 高清完整版   http://pan.baidu.com/s/1jGKQSwY   MariaDB入门很简单_PDF电子书下载 带 ...

  8. 英飞凌tle985x芯片简介--集成了Arm®Cortex®M0的H桥驱动芯片

    TLE985X解决方案的简介 Infineon`s integrated motor driver optimizes the target applications by offering cost ...

  9. Cortex‐M3和Cortex‐M0是否都能位带操作

    最近在进行stm32l011f4的编程,想到stm32有位带操作,便想试一试,但是事与愿违,先贴下位带操作代码 Cortex‐M0的位带操作代码 //IO输出方向设置 #define SDA_IN() ...

  10. 基于ARM Cortex M0 核心的低功耗蓝牙BLE芯片

    MS1793S 是一款基于ARM Cortex M0 核心的低功耗蓝牙芯片,射频采用2.4GHz ISM 频段的频率,2MHz 信道间隔,符合蓝牙规范.MS1793S使用高性能的ARM®Cortex® ...

最新文章

  1. oracle 常用故障,Oracle常见问题解决方案汇总
  2. 简述HTML DOM及其节点分类
  3. irrlicht v1.6 例程18 Splitscreen
  4. 批量提交 kafka_Kafka精华问答|kafka的使用场景是什么?
  5. 开源大数据:MLSQL
  6. .Net 面试题 汇总(二)
  7. 获得Azure订阅LoadBalancer的脚本
  8. 反编译object文件c语言,能不能通过反编译程序看.sys文件的源代码!
  9. 计算机组成原理知识点总结白中英,计算机组成原理知识点总结.pdf
  10. 基于HTTP协议的Java文件传输
  11. 联想笔记本电脑B490、B480拆机教程(清灰、换硅脂、换散热器)详细步骤
  12. Java音乐播放:获取音频信息
  13. java.lang.null_java.lang.nullpointerexception 怎么解决
  14. OpenCV中文文档4.0.0学习笔记(更新中……)
  15. LeetCode/LintCode 题解丨一周爆刷字符串:独特的摩尔斯编码
  16. 铣床是什么?怎么分类
  17. WordPress网站速度优化教程
  18. 串口通信之————IIC(软件驱动)
  19. 载药脂质体并表面修饰各种分子定制
  20. 计算机办公软件应用实训,计算机专业职业教育实训系列教材:Office 2007办公软件实训教程...

热门文章

  1. spring @value
  2. iOS多线程编程的知识梳理
  3. JVM知识(三):内存模型和可见性
  4. zookeeper的集群配置
  5. CSS里各种垂直水平居中方式的基础用法
  6. 整合ssh model $$_javassist_13 cannot be cast to javassist.util.proxy.Proxy
  7. CVS的几个学习小站及配置说明
  8. 如何解决EXCEL中的科学计数法
  9. 支持FreeMarker需要哪些JAR包?
  10. Airflow 中文文档:用upstart运行Airflow