一个项目用LPC3250做的,需要一个定时器中断,自己写了一个,附上全部代码,希望那些想用LPC3250的人儿少走弯路
/*********************************************************************
*与定时器0中断有关的结构
************************************************************************/
#define MIC_BASE_ADDRESS 0x40008000
#define SIC1_BASE_ADDRESS 0x4000c000
#define SIC2_BASE_ADDRESS 0x40010000
#define T0_BASE_ADDRESS 0x40044000
void init_timer(void);
void start_timer(void);
void end_timer(void);
/************************************************************************
*中断寄存器
**************************************************************************/
typedef struct
{
UNS_32 _MIC_ER;
UNS_32 _MIC_RSR;
UNS_32 _MIC_SR;
UNS_32 _MIC_APR;
UNS_32 _MIC_ATR;
UNS_32 _MIC_ITR;
}MIC_REGISTER;
typedef struct
{
UNS_32 _SIC1_ER;
UNS_32 _SIC1_RSR;
UNS_32 _SIC1_SR;
UNS_32 _SIC1_APR;
UNS_32 _SIC1_ATP;
UNS_32 _SIC1_ITR;
}SIC1_REGISTER;
typedef struct
{
UNS_32 _SIC2_ER;
UNS_32 _SIC2_RSR;
UNS_32 _SIC2_SR;
UNS_32 _SIC2_APR;
UNS_32 _SIC2_ATP;
UNS_32 _SIC2_ITR;
}SIC2_REGISTER;
/*************************************
*定时器0寄存器
**************************************/
typedef struct
{
UNS_32 _T0IR;
UNS_32 _T0TCR;
UNS_32 _T0TC;
UNS_32 _T0PR;
UNS_32 _T0PC;
UNS_32 _T0MCR;
UNS_32 _T0MR0;
UNS_32 _T0MR1;
UNS_32 _T0MR2;
UNS_32 _T0MR3;
}T0_REGISTER;
#define T0_CTRL ((T0_REGISTER *)(T0_BASE_ADDRESS))
#define MIC_CTRL ((MIC_REGISTER *)(MIC_BASE_ADDRESS))
#define SIC1_CTRL ((SIC1_REGISTER *)(SIC1_BASE_ADDRESS))
#define SIC2_CTRL ((SIC2_REGISTER *)(SIC2_BASE_ADDRESS))
void init_timer(void)
{
T0_CTRL->_T0TCR=0x00;//停止计数
T0_CTRL->_T0MCR=0x3;//设置中断方式
T0_CTRL->_T0PR=12; //预分频值pclk/(12+1)
T0_CTRL->_T0MR0=1000;//TC的值加到MR0时便产生中断,当主频为13MHZ时候1000个数为1ms
T0_CTRL->_T0TC=0x00; //计数器初始值
//T0_CTRL->
}
void start_timer(void)
{
//MIC_CTRL->_MIC_ATR=0x00;//_BIT(16);//设置中断类型为电平触发
//MIC_CTRL->_MIC_APR=0x00;_BIT(16);//设置边沿触发方式为上升沿
MIC_CTRL->_MIC_ITR=0x00; //IRQ中断
MIC_CTRL->_MIC_ER=_BIT(16);//总中断使能
T0_CTRL->_T0TCR=0x1;//计数器使能
}
void end_timer(void)
{
T0_CTRL->_T0TCR=0x00;//停止计数
T0_CTRL->_T0TC=0x00;
MIC_CTRL->_MIC_ER=_BIT(16)&&(0<<16);//关闭中断
}
main()
{
int_install_irq_handler(IRQ_TIMER0, (PFV)_irq_timer0);//第一个参数是中断号,第二个参数是中断处理函数
init_timer();//初始化相应的寄存器
start_timer();//启动定时器
while();
}