⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time_interrupt.c

📁 Lpc2103的小程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**
**                                   北天星国际有限公司
**                                 http://www.po-star.com



**文件名称:TIME_Interrupt.C
**功能:定时器中断.
**说明:JP2连接上。
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

/****************************************************************************/
#include  "..\inc\config.h"
#include  <intrinsic.h>

/****************************************************************************
* 名称:Time0Init()
* 功能:初始化定时器0,定时时间为1S。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void InitEINT0Interrupt(void);
void  Time0Init(void)
{        /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
	   Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz*/

	T0PR = 99;			    	// 设置定时器0分频为100分频,得110592Hz
	T0MCR = 0x03;		   		// 匹配通道0匹配中断并复位T0TC
	T0MR0 = 100000;	    		        // 比较值(1S定时值)
	T0TCR = 0x03;		   		// 启动并复位T0TC
	T0TCR = 0x01;
}

void  Time1Init(void)
{        /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
	   Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz*/

	T1PR = 99;			    	// 设置定时器0分频为100分频,得110592Hz
	T1MCR = 0x03;		   		// 匹配通道0匹配中断并复位T0TC
	T1MR0 = 5000;	    		        // 比较值(1S定时值)
	T1TCR = 0x03;		   		// 启动并复位T0TC
	T1TCR = 0x01;
}

void PLL_Init()
{
  PLLCON = 1;
	#if ((Fcclk / 4) / Fpclk) == 1
		VPBDIV = 0;
	#endif
	#if ((Fcclk / 4) / Fpclk) == 2
		VPBDIV = 2;
	#endif
	#if ((Fcclk / 4) / Fpclk) == 4
		VPBDIV = 1;
	#endif
	#if (Fcco / Fcclk) == 2
		PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
	#endif
	#if (Fcco / Fcclk) == 4
		PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
	#endif
	#if (Fcco / Fcclk) == 8
		PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
	#endif
	#if (Fcco / Fcclk) == 16
		PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
	#endif
		PLLFEED = 0xaa;
		PLLFEED = 0x55;
		while((PLLSTAT & (1 << 10)) == 0);
		PLLCON = 3;
		PLLFEED = 0xaa;
		PLLFEED = 0x55;
	
}
/****************************************************************************
* 名称:main()
* 功能:定时器0定时控制LED1闪烁
****************************************************************************/
void  main(void)
{  PINSEL0 = 0x00000000;		       // 设置所有管脚连接GPIO
   PINSEL1 = 0x00000000;

   IO0DIR = LED1CON;				// 设置LED1控制口为输出
   PLL_Init();
   Time1Init();
   Time0Init();	// 定时器0初始化
   InitEINT0Interrupt() ;

   IO0SET = LED1CON;
   while(1);

}

/*******************************************中断设置******************************/
// IRQ 中断句柄
#pragma vector=0x18
__irq __arm void IRQ_ISR_Handler (void)
{
  void (*interrupt_function)();
  unsigned int vector;
  vector = VICVectAddr;                         // 获取中断向量
  interrupt_function = (void(*)())vector;
  (*interrupt_function)();                      // 调用向量中断函数

}

void EINT0Interrupt(void)
{
  EXTINT=0X01;                                   //清除标志。
  VICVectAddr=0;
  if( (IO0SET&LED1CON) == 0 ) IO0SET = LED1CON;	// 控制LED1点亮
  else  IO0CLR = LED1CON;	
}


void TIME0Interrupt(void)
{
  T0IR=0X01;                                    //清除标志。
  VICVectAddr=0;
  if( (IO0SET&LED1CON) == 0 ) IO0SET = LED1CON;	// 控制LED1点亮
  else  IO0CLR = LED1CON;	
}

void TIME1Interrupt(void)
{
  T1IR=0X01;                                    //清除标志。
  VICVectAddr=0;
  if( (IO0SET&LED1CON) == 0 ) IO0SET = LED2CON;	// 控制LED1点亮
  else  IO0CLR = LED2CON;	
}


//外部中断0初始化
void InitEINT0Interrupt(void)
{
  EXTMODE=0X0F;
  EXTPOLAR=0X00;                               //下降沿触发.
  VICIntSelect = 0x00000000;                   // IRQ on EINT0 line.
  VICVectAddr0 = (unsigned int)&EINT0Interrupt;
  VICVectAddr1 = (unsigned int)&TIME0Interrupt;
  VICVectAddr2 = (unsigned int)&TIME1Interrupt;
  VICVectCntl0 = 0x20|14 ;                     // 允许EINT0向量中断
  VICVectCntl1 = 0x20|4 ;
  VICVectCntl2 = 0x20|5;
  VICIntEnable = (1<<14|1<<4|1<<5);            // EINT0开中断
  EXTINT=0X01;                                 //清除标志。
  __enable_interrupt();                        // 开中断
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -