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

📄 systemcon.c

📁 包括使用ucos任务的一些操作实现了lpc2142上的一些基本功能:按键、流水灯
💻 C
字号:
/*************************************************************************************
** Copyright (c) 2007,XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
** http://XXXXXXXXXXXXXXXXX

**文件名称:SystemCon.C
**功能说明:LPC2142的系统控制模块:包括管脚分配、晶振及VPB设置、看门狗设置、存储器设置、掉电及功率控制
			中断控制。
**使用说明:

** 当前版本: 1.0
** 作    者:  XXXX
** 完成日期:  2007年xx月xx号

*************************************************************************************/

#include	"lpc214x.h"
#include	"common.h"

/*************************************************************************************
* 函数原型: void Wtd_Enable(INT32U WDTCNum)
* 功能描述: 设置并启动看门狗
* 输入参数: WDTCNum		看门狗计数器值
* 输出参数: 
* 返回值  : 
**************************************************************************************/
void Wtd_Enable(INT32U WDTCNum)
{
 WDTC=WDTCNum;		 					//设置看门狗溢出时间	
 WDMOD=0x03;							//设置看门狗工作模式:中断和复位都使能
 WDFEED=0xAA;							//喂狗启动看门狗
 WDFEED=0x55;
}


/*************************************************************************************
* 函数原型: void Wtd_Feed(void)
* 功能描述: 周期性喂狗操作函数
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/
void Wtd_Feed(void)
{
WDFEED=0xAA;							//喂狗
WDFEED=0x55;
}



/*************************************************************************************
* 函数原型: void PllVpb_Ini(void)
* 功能描述: 设置PLL和VPB工作频率
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/
void PllVpb_Ini(void)
{
PLL0CON=0x01; 							//使能PLL
PLL0CFG=0x41;							//处理器频率设为两倍频(注意修改common.h的参数)
PLL0FEED=0xAA;							//发送馈送序列
PLL0FEED=0x55;
while(PLL0STAT&(1<<10)==0);			  	//等待PLL锁定
PLL0CON=0x03; 							//使能并连接PLL
PLL0FEED=0xAA;							//发送馈送序列
PLL0FEED=0x55;
VPBDIV=0;								//设置VPB频率 (注意修改common.h的参数)
}





/*************************************************************************************
* 函数原型: void IO_Ini(void)
* 功能描述: IO口输入输出设置
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/
void IO_Ini(void)
{
 IO0DIR=0;
 IO1DIR=IO1DIR|0xFF<<16;								//P1.16~P1.31选择为led输出

}



/*************************************************************************************
* 函数原型: void Power_Con(void)
* 功能描述: 掉电模式及功率控制
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/
void Power_Con(void)
{
 PCONP=0x120E;										   	//关闭几个外设:uart1,pwm,i2c,spi,ssp

// PCON=0x01;												//设置空闲模式
 PCON=0x03;												//设置掉电模式
}




/*********************************************************************************************************
** Function name:			IRQ_Exception
**
** Descriptions:			interrupt exceptional handler , change it as needed
**
** input parameters:		None
** Returned value:			None
**         
** Used global variables:	None
** Calling modules:			None
**
** Created by:				Chenmingji
** Created Date:			2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void IRQ_Exception(void)
{
  while(1);                   // change it to your code  这一句替换为自己的代码
}

/*********************************************************************************************************
** Function name:			FIQ_Exception
**
** Descriptions:			Fast interrupt exceptional handler , change it as needed
**
** input parameters:		None
** Returned value:			None
**         
** Used global variables:	None
** Calling modules:			None
**
** Created by:				Chenmingji
** Created Date:			2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void FIQ_Exception(void)
{
    while(1);                   // change it to your code  这一句替换为自己的代码
}
/*************************************************************************************
* 函数原型: void Timer0_Exception(void)
* 功能描述: 定时器0中断服务程序(若使用UC/OS II 操作系统,则必须使用本函数,否则使用TIMER.C中
			的初始化函数
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/
 void Timer0_Exception(void)
{
    T0IR = 0x01;
    VICVectAddr = 0;            //interrupt close 通知中断控制器中断结束
    OSTimeTick();
}

/*************************************************************************************
* 函数原型: void Timer0Init(void)
* 功能描述: 定时器0初始化(若使用UC/OS II 操作系统,则必须使用本函数,否则使用TIMER.C中
			的初始化函数
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/

void Timer0Init(void)
{
    T0IR = 0xffffffff;
    T0TC = 0;
    T0TCR = 0x01;
    T0MCR = 0x03;
    T0MR0 = (Fpclk / OS_TICKS_PER_SEC);
 }

/*************************************************************************************
* 函数原型: void VICInit(void)
* 功能描述: 中断初始化、使能
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/
void VICInit(void)
{
    extern void IRQ_Handler(void);
    extern void Timer0_Handler(void);

	 PINSEL0=(PINSEL0&(~(0x03<<28)))|(0x02<<28);			//选择P0.14为EINT1;

    VICIntEnClr = 0xffffffff;
    VICDefVectAddr = (uint32)IRQ_Handler;

    VICVectAddr0 = (uint32)Timer0_Handler;
    VICVectCntl0 = (0x20 | 0x04);
	VICVectCntl2=0x20|15;									//分配EINT1到IRQ中断0
 	VICVectAddr2=(INT32U) IRQ_Eint1;						//取EINT1中断服务地址0
 	VICVectCntl1=0x20|13;									//分配rtc中断到IRQ中断1
 	VICVectAddr1=(INT32U) IRQ_RTC;							//取RTC中断服务地址1
													   	
	VICIntEnable   = (1 << 15)	|							//使能EINT1中断
 					  (1<<13)	|							//使能RTC中断
					  (1<<4)	;							//使能T0中断

	INTWAKE=1<<1;											//设置EINT1掉电唤醒

 }

/*************************************************************************************
* 函数原型: void IRQ_Eint1(void)	__irq
* 功能描述: 外部中断1中断服务程序
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/
void IRQ_Eint1(void)	__irq
{
 /**********此处写入中断处理代码********************/



 /*************************************************/
 EXTINT=1<<1;			 								//清除中断标志
 VICVectAddr=0;											//中断返回
}



/*************************************************************************************
* 函数原型: void IRQ_RTC(void)	__irq
* 功能描述: RTC中断服务程序
* 输入参数: 
* 输出参数: 
* 返回值  : 
**************************************************************************************/
void IRQ_RTC(void)	__irq
{
 /**********此处写入中断处理代码********************/



 /*************************************************/
 ILR=0x03;			 								//清除中断标志
 VICVectAddr=0;											//中断返回
}

⌨️ 快捷键说明

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