LPC32xx定时器中断

一个项目用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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值