ARM开发步步深入之定时加速

发布者:chenxiaohong68最新更新时间:2016-11-27 来源: eefocus关键字:ARM开发  定时加速 手机看文章 扫描二维码
随时随地手机看文章

实验目的:通过使用MPLL提高系统时钟,启动定时器产生中断来点亮LED灯,启动Watchdog定时器,如果程序跑飞,借助Watchdog重新运行程序,借此掌握S3C2410的时钟管理、PWM及看门狗定时器。

实验环境及说明:恒颐S3C2410开发板H2410。

实 验思路:开发板上电启动后,自动将NandFlash开始的4K数据复制到SRAM中,然后跳转到0地址开始执行。然后来设置MPLL来改变FCLK、 HCLK、PCLK的值,初始化存储控制器来使用SDRAM。初始化LED灯管脚、定时中断控制器和看门狗,使能定时中断控制器和看门狗。之后进入 main函数死循环等待中断的发生,每隔设定的时间触发定时中断,调用定时中断处理函数点亮/熄灭LED灯。若程序跑飞,触发看门狗重启。

知识掌握:系统时钟、PWM定时器和Watchdog定时器
一、系统时钟:S3C2410的时钟控制逻辑为整个芯片提供了三种时钟。
★FCLK 用于CPU核;HCLK用于AHB总线上设备---CPU核、存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块;PCLK用于APB总线 上设备---Watchdog、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI。
★AHB(Advanced High performance Bus)---主要用于高性能模块间的连接;APB(Advanced Peripheral Bus)---主要用于低带宽的周边外设之间的连接。
★ 开发板时钟频率为12MHz,主要是为了降低电磁干扰和板间布线要求,需要通过PLL提高系统时钟。S3C2410包括MPLL(用于FCLK、 HCLK、PLCK)和UPLL(用于USB设备),他们的设置方法类似。开发板上电→FCLK=Fin(外部输入时钟)→设置MPLL相关寄存器→等待 (Lock Time:长短由寄存器LOCKTIME设定)→MPLL输出稳定,CPU工作在新的时钟FCLK下。

★设置MPLL需要设置下面几个重要寄存器:
●LOCKTIME寄存器(LOCK TIME COUNT)用于设置lock time的长度,初始值0x00FFFFFF。
●MPLLCON(Main PLL Control)寄存器用于设置FCLK与Fin的倍数,初始值0x0005C080。
●CLKDIVN(CLOCK DIVIDER CONTROL)寄存器用于设置FCLK、HCLK、PCLK三者的比例。
二、PWM(pulse width modulation)定时器
★S3C2410共有5个16位的定时器,其中定时器0、1、2、3有PWM功能,因为它们都有一个输出引脚,可以通过定时器来控制引脚周期性的高、低电平变化;定时器4木有输出引脚就不有PWM功能了。
★PLCK 是定时部件的时钟源,先通过2个8位预分频器(定时器0、1共用第一个定时器,2、3、4共用第二个),输出进入第二级分频(输出2/4/8/16分频或 者外部时钟TCLK0/TCLK1)。这两次预分频都是通过设置TCFG0寄存器完成的。每个定时器工作在哪种频率下可以通过TCFG1寄存器来选择的。
★定时器的使用主要涉及以下寄存器:
●TCFG0寄存器:位[7:0],位[15:8]分别用于控制预分频器0,1;它们的值为0~255。经过分频器出来的时钟频率:PLCK/(TCFG0[7:0]+1或TCFG0[15:8]+1)。

'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://www.arm79.com/attachment/Mon_1005/94_67_154d167be4af4a1.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/94_67_154d167be4af4a1.jpg');" border="0" width="700"> 
●TCFG1寄存器:设定相应定时器为经过分频器出来的时钟频率的几分频。定时器工作频率= PLCK/(TCFG0[7:0]或TCFG0[15:8]+1)/几分频。

●TCNTBn/TCMPBn寄存器:这两个寄存器都只用到位[15:0]。TCNTBn中保存定时器的初始计数值,TCMPBn中保存比较值。它们的在启动定时器时,被传到定时器内部寄存器TCNTn,TCMPn中。
●TCNTOn寄存器:n为0~4,内部寄存器TCNTn在其工作时钟下不断减1计数,可以通过读取TCNTOn寄存器得知其值。
●TCON寄存器:它的功能如下:第一次启动定时器时,手动将TCNTBn/TCMPBn寄存器的值装入内部寄存器TCNTn,TCMPn中;启动,停止定时器;决定在定时器计数到达0时是否自动装入初值;决定定时器的管脚TOUTn的输出电平是否反转。

三、Watchdog定时器:其使用和PWM定时器很类此。
★PLCK 先经过8位预分频器后再被分成4种频率(16/32/64/128分频)。使用看门狗定时器的一个最主要目的当然是让它给你看门了。程序正常执行时,必须 不断重新设置WTCNT寄存器使其不为0,这样可以保证系统不被重启,称为“喂狗”;程序崩溃时不能按时“喂狗”,则计数值到达0后系统重启,使得程序可 以重新正常运行。
★Watchdog存在的意义:开启Watchdog之后程序必须定时向其反馈信息,这看似麻烦又耗资源,其实是很重要的行为, 是程序向硬件传递自身运行状态的一种方法。如果程序运行良好则它应该可以在规定的时间间隔内向Watchdog反馈信息,借此来说明程序运行正常;若程序 由于某个不当的操作而进入死循环等,则无法向Watchdog反馈信息,Watchdog将发生记时超时,从而引起硬件重起。如果没有Watchdog, 程序死掉就死掉了,只能等待用户自己发现去吧。
★相关寄存器:
●WTCON寄存器:用于设置预分频系数,选择工作频率,决定是否使能中断,是否启用WATDOG功能等。

●WTDAT寄存器:用以决定Watchdog定时器的超时周期,值自动写入WTCNT。
●WTCNT寄存器:在启动WATDOG定时器前,必须往这个寄存器写入初始计数值,启动定时器后,它做减1操作,当计数器值达到0时,如果中断被使能的话,就发出中断,如果Watchdog功能被使能的话就发出复位信号,装载WTDAT寄存器的值并重新计数。

关键代码解析:
★head.S头文件来初始化,设置中断模式、系统模式的栈,设置好中断处理函数
.text
.global _start
_start:
@中断向量表处理函数,只给出复位和普通中断模式的处理函数,其它异常未使用
    b   Reset
......
@0x18: 中断模式的向量地址
    b   HandleIRQ
@0x1c: 快中断模式的向量地址
HandleFIQ:
    b   HandleFIQ

Reset:                                                             @复位处理
    bl disable_watch_dog                             @关门喂狗
    ldr sp,=0x4096                                          @clock初始化栈地址
    bl clock_init                                                 @设置MPLL,改变FCLK、HCLK、PCLK
    bl mem_control_setup                             @设置存储控制器以使用SDRAM
    bl copy_steppingstone_to_sdram         @复制代码到SDRAM中
    ldr pc, =on_sdram                                     @跳到SDRAM中继续执行
on_sdram:
    msr cpsr_c, #0xd2             @进入中断模式
    ldr sp, =0x32000000         @设置中断模式栈指针
    msr cpsr_c, #0xdf              @进入系统模式
    ldr sp, =0x34000000         @设置系统模式栈指针
    bl init_led                             @初始化LED
    bl init_timer0                       @初始化定时器0
    bl enable_timer0                @使能定时器0
    bl init_watchdog                 @初始化Watchdog
    bl enable_watchdog          @使能Watchdog
    msr cpsr_c, #0x5f               @设置I-bit=0,开IRQ中断
    ldr lr, =halt_loop                  @设置返回地址
    ldr pc, =main                       @调用main函数
halt_loop:
    b   halt_loop
★init.c文件实现时钟、GPIO、中断及定时的初始化,主要代码:
/*
* 时钟初始化
*/
#define S3C2410_MPLL_200MHZ     ((0x5c<<12)|(0x04<<4)|(0x00))

void init_clock(void)
{
    CLKDIVN  = 0x03;            // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1

/* 如果HDIVN非0,CPU的总线模式应该从"fast bus mode"变为"asynchronous bus mode"*/
__asm__(
    "mrc    p15, 0, r1, c1, c0, 0\n"        /* 读出控制寄存器 */ 
    "orr    r1, r1, #0xc0000000\n"          /* 设置为"asynchronous bus mode" */
    "mcr    p15, 0, r1, c1, c0, 0\n"        /* 写入控制寄存器 */
    );
    MPLLCON = S3C2410_MPLL_200MHZ;  /* FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */
}
/*
* 定时器0初始化
*/
void init_timer0(void)
{
    TCFG0  = 99;        // 预分频器0 = 99
    TCFG1  = 0x03;      // 选择16分频
    TCNTB0 = 31250;     // 0.5秒钟触发一次中断
    TCON   |= (1<<1);   // 手动更新
    TCON   = 0x09;      // 自动加载,清“手动更新”位,启动定时器0
}
/*
* 定时器0中断使能
*/ 
void enable_timer0(void)
{
    INTMSK   &= (~(1<<10));  // 定时器0中断使能
}
/*
* Watchdog初始化
*/ 
void init_watchdog(void)
{
    //Prescaler Value = 99;Division_factor = 16(Clock Select=16);Interrupt Generation = 0(不产生中断);Reset = 1(开启Reset Signal)
    WTCON = 0x6381;
    //设置寄存器WTDAT的值为0x8000,时间一定要大于Timer0的时间
    WTDAT = 0x8000;
}
/*
* Watchdog使能
*/ 
void enable_watchdog(void)
{
    WTCON|=1<<5;
}
★interrupt.c文件实现中断的处理,主要代码:
/*
* 定时器0中断处理函数
*/ 
void Timer0_Handle(void)
{
    //喂狗
    WTCNT=0x8000;
    //每次中断令4个LED改变状态
    if(INTOFFSET == 10)
        GPFDAT = ~(GPFDAT & (0xf << 4));
    //清中断
    SRCPND = 1 << INTOFFSET;
    INTPND = INTPND;
}

关键字:ARM开发  定时加速 引用地址:ARM开发步步深入之定时加速

上一篇:ARM开发步步深入之NandFlash 4KB突围
下一篇:ARM开发步步深入之掌握ADC和触摸屏

推荐阅读最新更新时间:2024-03-16 15:22

ARM初学者如何选择开发系统
  很多ARM初学者都希望有一套自己能用的系统,但他们住住会产生一种错误认识就是认为处理器版本越高、性能越高越好,就象很多人认为ARM9与arm7好,我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的那个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计与板级测试。如果想从操作系统层面或应用层面上走,不管是驱动还是应用,那当然处理器性能越高越好了,但这个东西自学,有十分大的困难,不是几个月或半年或是一年二年能搞定的事。   在某种意义上请,arm7与9的差别就是在某些功能指令集上丰富了些,主频提高一些而已,就比如286和386.对于用户来讲可能觉查不到什么,只能是感觉速度有些快而已。
[单片机]
jz2440裸机开发与分析:ARM芯片时钟体系1
ARM芯片时钟体系分析 OM开关
[单片机]
jz2440裸机<font color='red'>开发</font>与分析:<font color='red'>ARM</font>芯片时钟体系1
意法STM32系列获ARM RealView微控制器开发工具包支持
ARM公司日前宣布RealView微控制器开发工具包将支持意法半导体基于ARM Cortex-M3处理器的全新STM32F1xx系列器件。 STM32F101(接入行)和STM32F103(性能行)将是意法半导体首个基于ARM Cortex-M3处理器的器件系列,兼具卓越的高性能和低功耗。该系列器件拥有高达72MHz的CPU时钟速度、128Kbyte片上闪存ROM及20Kbyte片上RAM,还包括A/D、CAN、USB、SPI、I2C等众多外设及多达80个GPIO。 RealView微控制器开发工具包3.1可为新器件提供支持。这一最新版本保留了Keil Vision 3集成开发环境(IDE)易于使用的特性,并增加了针对STM3
[单片机]
ARM系列微控制器:GD32 Colibri-F150R8开发板评测
  ARM生态圈的扩张速度用恐怖来形容一点也不为过,而早早就搭上了ARM这条船的意法半导体可谓尝尽了甜头,其STM32系列微控制器产品无论是在学生亦或是工程师群体中都有着“明星”般的效应,用户群体多而广。面对这种巨大的市场空间“诱惑”,2013年,国内专注于Flash的兆易创新也投身到ARM微控制器的浪潮中,结合自身在存储器方面的技术优势,推出了一系列基于Cortex-M3、兼容STM32的微控制器产品,而且在STM32产品的基础上,在性能和功能上都做了小幅度的提升。总体来说,兆易创新的GD32系列产品具有功能丰富、性价比高等特点,对于那些低成本的STM32系列代替方案的厂商的来说是非常合适的。   不过,仅仅如此似乎还不够,
[单片机]
<font color='red'>ARM</font>系列微控制器:GD32 Colibri-F150R8<font color='red'>开发</font>板评测
ARM开发步骤
1.做个最小系统板:如果你从没有做过ARM的开发,建议你一开始不要贪大求全,把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,所以建议先布一个仅有Flash,SRAM或SDRAM、CPU、JTAG、和复位信号的小系统板,留出扩展接口。使最小系统能够正常运行,你的任务就完成了一半,好在ARM的外围接口基本都是标准接口,如果你已有这些硬件的布线经验,这对你来讲是一件很容易的事情。 2.写启动代码,根据硬件地址先写一个能够启动的小代码,包括以下部分:初始化端口,屏蔽中断,把程序拷贝到SRAM中;完成代码的重映射;配置中断句柄,连接到C语言入口。也许你看到给你的一些示例程序当中, bootloader
[单片机]
ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器
一 矩阵键盘控制蜂鸣器原理: 1.1 本实验实现8*7矩阵键盘上按键控制蜂鸣器响。 1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应的引脚,赋予对应的按键值,然后控制蜂鸣器响。 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 key.h代码: #ifndef __KEY_H #define __KEY_H #include”sys.h” #define ROWPINS GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2 |GPIO_Pin_1|GPIO_Pin_0//矩阵键盘行引脚 #defi
[单片机]
ARM开发出2GHz 双核Cortex A9芯片
   ARM 当地时间17早上宣称开发出2GHz的双核版 Cortex-A9 架构处理器,它基于 40纳米 制程构建,在没有提升功耗的前提下提高了速度,每个处理单元功耗最低可达0.25W.   这款芯片主要用于高速家庭设备以及空间应用等需要低功耗、小空间的计算环境.    ARM 将制造 40纳米 芯片的任务交给了台积电,实际交货要等到今年秋天.   2GHz芯片不大可能这么早装载在手机上,但有可能会在MID上出现,目前苹果iPhone正在使用其上一代产品Cortex A8,这款芯片由三星设计,频率达到600MHz.
[嵌入式]
展讯获ARM实体IP技术授权 开发28nm芯片
    ARM(ARMH-US)近日与晶片厂展讯(SPRD-US)共同宣布,展讯取得ARM POP处理器优化套件IP在内的完整ARM Artisan实体IP技术授权,此后展讯将能就ARM所支援的广泛IC代工选择以及多样化的28奈米制程,开发出最富有弹性的制造方案。 ARM指出,在这项授权协议之下,展讯可使用ARM Artisan标准单元、新一代记忆体编译器及针对ARM Cortex处理器与Mali图形处理器的POP处理器优化套件IP,ARM Artisan实体IP及POP IP将为展讯低功耗手机系统单晶片(SoC)的加速开发奠定基础。 ARM表示,透过提供针对28奈米制程的完整实体IP平台,ARM能协助客户发展更多元化的应用如手机
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved