📄 systemcon.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 + -