时钟

两种能够提供时钟的方式:

1) 晶振

2) PLL(也就是锁相环):通用PLL需啊一个晶振,和对晶体特定频率分频或倍频的锁相环电路。

学习ARM9时钟的四步:

1) 晶振:12MHZ

2) 有多少个PLL:两个,MPLL和UPLL

3) PLL产生了哪些时钟:

MPLL:FCLK HCLK PCLK

UPLL:UCLK

4) 时钟都用来做什么了:

FCLK:用于CPU核。

HCLK:用于AHB总线设备,如cpu核,存储控制器,中断控制器,DMA等。

PCLK:用于APB总线设备,如watchdog,i2c,iis等。

UCLK:用于USB设备。

下面是开机流程图:

注:刚开机的时候,cpu核的频率为外部输入时钟的频率。

初始化流程如下:

1) 设置LOCKTIME。

2) 设置MPLLCON寄存器,用于设置FCLK与fin(外部输入的时钟)的倍数。

3) 设置CLKDIVN寄存器,用于设置FCLK,HCLK,PCLK三者的比例。

4) 设置CAMDIVN寄存器,用于将CPU的总线模式变为异步模式(因为FCLK和HCLK不相等,按照芯片手册,应该做这个变化)。

定时器

从上图可以看出,arm9共有5个16位定时器,时钟源是PCLK。

0号和1号使用一个预分频器,2,3,4号使用一个预分频器。第二级分频器功能输出5种频率的时钟:2分频,4分频,8分频,16分频或者外部时钟TCLK0/TCLK1。

0-3号定时器有一个输出pin,故他们可以输出PWM,而4号定时器不能。

定时器的工作流程如下:

1) 程序初始的时候,设定TCMPBn(定时器的比较值),TCNTBn(初始计数值)这两个寄存器。

2) 设置TCON启动寄存器来启动定时器。这时TCMPBn,TCNTBn的值被装入其内部寄存器TCMPn,TCNTn中。在定时器n的工作频率下,TCNTn开始减一计数,其值可以通过读取TCNTOn得出。

3) 当TCNTn的值等于TCMPn的值时,定时器n的输出管脚TOUTn反转。

4) 当TCNTn的值等于0时,输出管脚再次反转。

5) 当TCNTn的值等于0时,如果TCON寄存器设置定时器n为自动加载,则TCMPBn,TCNTBn的值被从新装入其内部寄存器TCMPn,TCNTn中。

寄存器介绍:

1) TCFG0寄存器:设置预分频。

2) TCFG1寄存器,设置分频。

3) TCNTBn寄存器:初始计数值。

4) TCMPBn寄存器:保存比较值。

5) TCNTOn寄存器:读此寄存器可知道计数器目前值。

6) TCON寄存器:控制寄存器

arm9的时钟和定时器的更多相关文章

  1. LibOpenCM3(五) 基础功能: 系统时钟, GPIO, 定时器

    目录 LibOpenCM3(一) Linux下命令行开发环境配置 LibOpenCM3(二) 项目模板 Makefile分析 LibOpenCM3(三) .ld文件(连接器脚本)和startup代码说 ...

  2. STM32学习笔记(一)时钟和定时器

    由于近期在准备海洋航行器比赛,正好趁此机会学习一下ARM,看到周围很多同学都在使用32,所以我也买了一块STM32F103ZET6,准备好好地学习一下. STM32的时钟系统相当的复杂,包含了5个时钟 ...

  3. Arduino入门笔记(7):利用1602、1302实现时钟和定时器

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 常常听到老妈在做饭时说“开锅15分钟后叫我一下”,为何不做个定时器,来提醒老妈呢 ...

  4. JZ2440 裸机驱动 第10章 系统时钟和定时器

    本章目标      了解S3C2410/S3C2440的时钟体系结构     掌握通过设置MPLL改变系统时钟的方法     掌握在不同的频率下设置存储控制器的方法     掌握PWM定时器的用法   ...

  5. STM32时钟和定时器

    时钟源 STM32包含了5个时钟源,分别为HSI.HSE.LSI.LSE.PLL. HSI是高速内部时钟.RC振荡器,频率为8MHz: HSE是高速外部时钟,即晶振,可接石英/陶瓷谐振器或接外部时钟源 ...

  6. stm32定时器实现60秒定时秒表

    #include "led.h" #include "delay.h" #include "key.h" #include "sy ...

  7. linux动态时钟探索

    在早期的linux内核版本的时间概念都是由周期时钟提供的.虽然比较有效,但是,对于关注能耗电量的系统上,就不能满足长时间休眠的需求,因为周期系统要求必须在一定的频率下,周期性的处于活动状态.因此,li ...

  8. [ZigBee] 5、ZigBee基础实验——图文与代码详解定时器1(16位定时器)(长文)

    1.定时器1概述 定时器1 是一个支持典型的定时/计数功能的独立16 位定时器,支持输入捕获,输出比较和PWM等功能.定时器有五个独立的捕获/比较通道.每个通道定时器要使用一个I/O 引脚.定时器用于 ...

  9. (笔记)Linux内核学习(八)之定时器和时间管理

    一 内核中的时间观念 内核在硬件的帮助下计算和管理时间.硬件为内核提供一个系统定时器用以计算流逝的时间.系 统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理. 墙上时间和系 ...

随机推荐

  1. MYSQL事务的开启与提交

    MYSQL 事务处理主要有两种方法: 1.用 BEGIN, ROLLBACK, COMMIT来实现 BEGIN 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认 2.直接用 SET 来 ...

  2. 接口测试中模拟post四种请求数据

    https://www.jianshu.com/p/3b6d7aa2043a 一.背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟. Fidd ...

  3. spring boot集成mybatis分页插件

    mybatis的分页插件能省事,本章记录的是 spring boot整合mybatis分页插件. 1.引入依赖 <!-- 分页插件pagehelper --> <dependency ...

  4. Laya自定义组件

    laya2.1.1.1 参考: 预设使用 一 没有自定义组件 教程翻了几遍,没有自定义组件,论坛搜了下,说是不能使用. 二 预置件做自定义组件 预置件无法右键创建. 又去翻教程.终于知道预置件怎么创建 ...

  5. git用法汇总

    使用了一年多的git命令了,昨晚竟然又出现了问题.虽然解决了,不过还是被罚了... 总结下自己常用的git命令和遇到的一些坑. 1)常用的命令 1. 从git远程分支clone代码: git clon ...

  6. Redis哨兵(Sentinel)模式

    Redis哨兵(Sentinel)模式   主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用.这不是一种推荐的方式 ...

  7. 解决GitHub访问速度慢的问题

    https://github.com,但是页面很久才能打开 命令窗口,输入 ping github.com,超时 优化方法: 通过绕过DNS解析,直接在本地绑定host 1.查看ip DNS查看 地址 ...

  8. sql 查找所有已经分配部门的员工

    查找所有已经分配部门的员工的last_name和first_nameCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char( ...

  9. Influx Sql系列教程三:measurement 表

    在influxdb中measurement相当于mysql中的表,可以理解为一条一条记录都是存与measurent中的,一个数据库中可以有多个measurement,一个measurement中可以存 ...

  10. 查看LINUX进程内存占用情况及启动时间

    可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1) top top命令是Linux下常用的性能分 ...