ARM LPC2103定时器中断方式寄存器

发布者:温暖的微风最新更新时间:2014-12-11 来源: 51hei关键字:ARM  LPC2103  定时器  中断方式  寄存器 手机看文章 扫描二维码
随时随地手机看文章

定时器查询方式定时器初始化:

1、设置定时器分频数,为(x+1)分频

2、匹配通道X中断并复位TxTC

3、比较值(1S定时值)

4、启动并复位TxTC

如:

       T1PR = 99;                             // 设置定时器0分频为100分频,得110592Hz

       T1MCR = 0x03;                        // 匹配通道0匹配中断并复位T0TC

       T1MR0 = 110592/2;                 // 比较值(1S定时值)

       T1TCR = 0x03;                        // 启动并复位T0TC

       T1TCR = 0x01;

研究了好长一段时间,LPC210X的定时器,查询方式定时很简单如上面,但中断方式要操作好多寄存器,太麻烦,一直是一头雾水。好不容易理出了思路,现将一段例程粘贴备忘。

 
#include
#include
#include
// OSC [Hz]
#define FOSC            11059200UL
// Core clk [Hz]
#define FCCLK           FOSC
// Per clk [Hz]
#define PCCLK           (FOSC/4)
// Timer tick per second
#define TICK_PER_SEC    (4UL)
#define TIM_PER_S(Val)  (PCCLK/Val)
#define MAX_TICK_PER    TIM_PER_S(20)
#define MIN_TICK_PER    TIM_PER_S(5)
// Timer Delta period [ms]
#define DELTA_PER       (50UL)
#define TIM_DPER        ((PCCLK*DELTA_PER)/1000UL)
#define LED_MASK        1<<18
/*************************************************************************
 * 函数名称:irq_handler
 * 入口参数:无
 * 返回参数:无
 * 描    述:IRQ handler
 *************************************************************************/
#pragma vector=IRQV
__irq __arm void irq_handler (void)
{
void (*interrupt_function)();
unsigned int vector;
  vector = VICVectAddr;     //获得中断向量
  interrupt_function = (void(*)())vector;
  if(interrupt_function != NULL)
  {
    interrupt_function();  //调用中断指向的函数
  }
  else
  {
    VICVectAddr = 0;      //清除在VIC中的中断
  }
}
/*************************************************************************
* 函数名称: Timer0Handler
 * 入口参数: 无
 * 返回参数: 无
 * 说    明: Timer 0 handler  
*************************************************************************/
void Timer0Handler (void)
{
  // clear interrupt flag
  T0IR_bit.MR0INT = 1;
  // Change patern
  if ((IOSET & LED_MASK) == 0)
    IOSET = LED_MASK;      //关闭LED
  else
    IOCLR = LED_MASK;
  //pNextPattern = pNextPattern->pNextPattern;        //调整当前的链表
  VICVectAddr = 0;
}
/*************************************************************************
 * 函数名称: VicInit
 * 入口参数: 无
 * 返回参数: 无
 * 说    明: Init VIC module
 *************************************************************************/
void VicInit (void)
{
  // Assign all interrupt chanels to IRQ
  VICIntSelect  =  0;
  // Diasable all interrupts
  VICIntEnClear = 0xFFFFFFFF;
  // Clear all software interrutps
  VICSoftIntClear = 0xFFFFFFFF;
  // VIC registers can be accessed in User or privileged mode
  VICProtection = 0;
  // Clear interrupt
  VICVectAddr = 0;
  // Clear address of the Interrupt Service routine (ISR) for non-vectored IRQs.
  VICDefVectAddr = 0;
  // Clear address of the Interrupt Service routine (ISR) for vectored IRQs.
  VICVectAddr0  = VICVectAddr1  = VICVectAddr2  = VICVectAddr3  =\
  VICVectAddr4  = VICVectAddr5  = VICVectAddr6  = VICVectAddr7  =\
  VICVectAddr8  = VICVectAddr9  = VICVectAddr10 = VICVectAddr11 =\
  VICVectAddr12 = VICVectAddr13 = VICVectAddr14 = VICVectAddr15 = 0;
  // Disable all vectored IRQ slots
  VICVectCntl0  = VICVectCntl1  = VICVectCntl2  = VICVectCntl3  =\
  VICVectCntl4  = VICVectCntl5  = VICVectCntl6  = VICVectCntl7  =\
  VICVectCntl8  = VICVectCntl9  = VICVectCntl10 = VICVectCntl11 =\
  VICVectCntl12 = VICVectCntl13 = VICVectCntl14 = VICVectCntl15 = 0;
}
/*************************************************************************
 * 函数名称: Init_timer0
 * 入口参数: 无
 * 返回参数: 无
 * 说    明: Init tiner0
 *************************************************************************/
void Init_timer0(void)
{
/*
  // Init timer
  // Reset and stop timer0
  T0TCR = 2;
  // Set timer counters mode - clock by PCLK
  T0CTCR = 0;
  // Set timer prescaler
  T0PR  = 0;
  // Set timer period
  T0MR0 = PCCLK/TICK_PER_SEC;
  // Set mack action - interrupt by MACH0 enable, reset counter
  T0MCR = 3;
  // No external action
  T0EMR = 0;
 */
  T0TCR = 2;
  T0CTCR = 0;
  T0PR = 0;
  T0MR0 = PCCLK/TICK_PER_SEC;
  T0MCR = 3;
  T0EMR = 0;
 
  // Assign to IRQ
  VICIntSelect_bit.TIMER0 = 0;
  // Set interrupt slots
  VICVectAddr0 = (unsigned int) Timer0Handler;
  VICVectCntl0_bit.NUMBER = VIC_TIMER0;
  VICVectCntl0_bit.ENABLED = 1;
  // Timer 0 interrupt enable
  VICIntEnable_bit.TIMER0 = 1;
  // Enable timer0
  T0TCR = 1;
}
/*************************************************************************
 * 函数名称: Init_Gpio
 * 入口参数: 无
 * 返回参数: 无
 * 说    明: Init GPIO
 *************************************************************************/
void Init_Gpio(void)
{
    // Init GPIO
  PINSEL0 = PINSEL1 = 0;
  // Disable fast IO
  SCS_bit.GPIO0M = 0;
 
  // Set pins connect to LEDs as outputs
  IODIR = LED_MASK;
  // All LEDs off
  IOCLR = LED_MASK;
}
/*************************************************************************
 * 函数名称: Init_pll
 * 入口参数: 无
 * 返回参数: 无
 * 说    明: Init PLL
 *************************************************************************/
void Init_pll(void)
{
  // Disable PLL
  PLLCON = 0;
  // Write Feed
  PLLFEED = 0xAA;
  PLLFEED = 0x55;
  // Set periphery divider /4
  APBDIV_bit.APBDIV  = 0;
  // Set MAM fully enable
  MAMCR_bit.MODECTRL = 0;
  MAMTIM_bit.CYCLES  = 3;
  MAMCR_bit.MODECTRL = 2;
}
/*************************************************************************
 * 函数名称: main
 * 入口参数: 无
 * 返回参数: 无
 * 描    述: main
 *************************************************************************/
void main(void)
{
  Init_pll();
  // Memory map init flash memory is maped on 0 address
#ifdef FLASH
  MEMMAP_bit.MAP = 1;
#else
  MEMMAP_bit.MAP = 2;
#endif
  __disable_interrupt();
  VicInit();
  Init_Gpio();
  Init_timer0();
  __enable_interrupt();
  while(1)
  {};
}
关键字:ARM  LPC2103  定时器  中断方式  寄存器 引用地址:ARM LPC2103定时器中断方式寄存器

上一篇:奔跑吧飞思卡尔!微控制器瞄准全球第一
下一篇:LPC210X之外部中断寄存器详解

推荐阅读最新更新时间:2024-03-16 13:48

俄罗斯研发ARM处理器以替代Intel
有时候,DIY比采购更好,甚至是在微处理器产品上。俄罗斯本周证实,政府将资助一个项目,即俄罗斯自行研发代号为贝加尔湖的处理器。这个项目最后交易价值数千万美元。俄罗斯超级计算机厂商T-Platforms将成为该项目的牵头厂商。 和地球上其他国家类似,俄罗斯希望对内部机密进行保密。因此,它认为它不能信任美国制造的处理器,例如那些由英特尔和AMD制造的处理器。鉴于外界传闻表示,美国国家安全局已经与这两个公司在过去进行合作,有可能在计算机硬件中内建几乎无法察觉后门程序,因此我们很容易理解为什么俄罗斯希望走自行研发的道路。 俄罗斯的贝加尔处理器将采用ARM Cortex A57处理器架构。之前,普京在2010年定下目标,将所
[单片机]
ARM
ARM 公司中文名 安谋 网站 http://www.arm.com 总部地址 Cambridge, UK ARM Ltd. 110 Fulbourn Road Cambridge GB-CB1 9NJ Great Britain 中国地址 ARM Consulting (Shanghai) Co. Ltd. 上海市长宁区娄山关路 555 号长房国际广场 1601 室 电话 86 021 6229 0729 传真 86 021 6229 0725 E-Mail in
[厂商大全]
ARM9单片机LPC3180的软硬件平台设计
  嵌入式应用系统设计包括硬件平台和软件平台两部分。前者是以嵌入式微控制器/微处理器为核心的硬件系统;后者则是围绕嵌入式操作系统构建的软件系统。两者在设计上是密不可分的,并且需要在设计之间进行权衡优化,根据实际应用进行外扩和裁剪。   基于ARM926EJS内核的LPC3180内部集成了丰富的外设资源,为嵌入式系统构建提供了很大的设计空间。本文结合笔者开发LPC3180嵌入式平台的实际经验,将具体介绍该系统的实现、结构组成和实验结果。 1 LPC3180芯片特性介绍   LPC3180是Philips公司新推出的一款ARM9微控制器。它采用90 nm工艺技术,片内集成ARM9EJS处理器内核,具有高计算性能、低功耗的特性,这
[单片机]
<font color='red'>ARM</font>9单片机LPC3180的软硬件平台设计
PIC877a总结1
1.定时器:(3个TMR0,TMR1,TMR2) TMR0,8位位累加定时、计数寄存器,并带有预分频器。若考虑预分频器的效果,其固有定时为65ms。如果用作通用计数器,可采用外部T0CK1作为计数触发信号。 与TMR0相关的寄存器:TMR0(初始值),OPTION_REG(选择项寄存器T0CS,T0SE,PSA,PS2~PS0),INTCON(中断控制寄存器:GIE,T0IE,T0IF),TRISA(要求外部信号T0CK1担任TMR0的触发计数功能,此时该引脚必须设定为输入方式,0,RA4作为一般的输出引脚;1,作为输入引脚,为T0CK1提供一个通道)。 定时,计数从其内部工作方式分析一般表现为
[单片机]
STM32HAL库定时器中断关闭的方法
本文可以用于解决这个问题:定时器中断上电后莫名其妙开启,或者首先触发一次。 STM32HAL库在定时器初始化并开启以后,也是会默认开启中断。如不需要默认就开启中断可以用一下代码关闭: __HAL_TIM_CLEAR_FLAG(&htim6,TIM_FLAG_UPDATE); 其中htim6是定时器的句柄,按照实际使用的定时器填写; TIM_FLAG_UPDATE是中断的类型,也可以根据实际情况修改
[单片机]
stm32的任务调度方式和步骤
STM32的任务调度可以有两种方式 1)通过systick_handler定时器调度 2)执行一个系统调用 任务调度的步骤总结为如下: 保存程序的上下文即当前任务的寄存器,保存存储寄存器的任务堆栈的地址。 根据下一个任务的任务堆栈地址依次弹出下一个任务的16个寄存器。 堆栈中的寄存器保存顺序如下, XPSR SP(代表MSP或PSP,在任务调度完成后,根据PSP的值定位了是哪个任务) LR(存储函数的返回) R12 R3 R2 R1 R0 R11 R10 R9 R8 R7 R6 R5 R4
[单片机]
Nvidia收购Arm能否成功关键在于政府而不是企业
本文编译自:DesignNews 市场开始普遍担心Nvidia无法收购Arm,例如,英国就对于软银违背收购Arm时所作出的承诺,从而对该交易提出了质疑。此外,中国也需要批准这笔交易,目前中美关系让外界对这笔交易能否实现产生了怀疑。 Nvidia收购Arm的交易具有挑战性,因为它需要获得监管机构的批准,目前全球贸易敌意日益加剧,且主要参与者(即中国、美国和英国)之间的地缘政治局势紧张。 这种担忧是有先例的。在2017年至2018年期间,高通试图收购NXP。最终,高通将对NXP的报价提高到440亿美元,高于目前Nvidia对Arm的报价。当时,高通希望将在移动通信领域的优势扩大到汽车和工业领域。 高通未能获得中国监管部
[半导体设计/制造]
MSP430单片机各种寄存器总结(7)——USCI_A in UART mode
第七章 USCI 7.1 UCA1CTL1 【注意】配置USCI先将UCSWRST置位 7.2 UCA1BR0 & UCA1BR1 BRCLK预分频器 预分频系数=UCA1BR0 + UCA1BR1*256 7.3 UCA1MCTL 注意复习波特率的计算!! 7.4 UCA1RXBUF 接收数据的寄存器 7.5 UCA1TXBUF 发送数据的寄存器,写入后自动发送 7.6 UCA1IE & UCA1IFG 中断使能和中断标志位,其中TX是发送,RX是接受 UCTXIFG置位表明UCAxTXBUF为空,可向其写入待发送字符,若UCTXIE 和GIE也置位,将产生发送中断请求。写UCAxTXB
[单片机]
MSP430单片机各种<font color='red'>寄存器</font>总结(7)——USCI_A in UART mode
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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