久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

ARM LPC2103定時器中斷方式寄存器設置

作者:huqin   來源:本站原創   點擊數:  更新時間:2014年09月02日   【字體:

定時器查詢方式定時器初始化:

 

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 <intrinsics.h>
#include <stdio.h>
#include <iolpc2103.h>
// 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)
  {};
}
關閉窗口
主站蜘蛛池模板: a久久| 久久久久欧美 | 中国91av | 久久久www成人免费无遮挡大片 | 亚洲欧美中文日韩在线v日本 | 毛片站 | 亚洲精品一区二区冲田杏梨 | 一区二区精品 | 国产精品黄色 | www.久久 | 欧美一区二不卡视频 | av不卡一区 | 欧美在线a | 91视频网 | 在线2区| 久久国产综合 | 午夜视频一区 | www久久 | 中文字幕免费视频 | 福利社午夜影院 | 毛片网络 | 妖精视频一区二区三区 | 美女黄18岁以下禁止观看 | 久久精品—区二区三区 | 欧美日韩一区二区三区不卡视频 | 91热在线| 一区免费看 | 中文精品视频 | 天天看天天操 | 国产成人免费视频网站视频社区 | 在线综合视频 | 国产91在线视频 | 国产精品久久av | 欧美精品在线免费观看 | 99精品一区二区 | 91精品国产乱码久久久久久久 | 久草青青草 | 亚洲国产高清在线观看 | 亚洲日韩中文字幕一区 | 日韩免费视频一区二区 | 国产精品免费福利 |