搜索
bottom↓
回复: 5

M0定时器问题 执行不了中断,还请指点 LPC1114【已解决】

[复制链接]

出20入186汤圆

发表于 2011-8-11 17:25:05 | 显示全部楼层 |阅读模式
#include "LPC11XX.H"
#include "GPIO.H"
#include "timer32.h"
uint32_t a;
int main(void){
        SystemInit();//系统初始化
        GPIOInit();//GPIO初始化
        GPIOSetDir(PORT1,8,1);//设为输出
        //GPIOSetValue(PORT1,8,0);
//
        //init_timer32(0,10000);
        //enable_timer32(0);

        LPC_SYSCON->SYSAHBCLKCTRL |= (1<<9);                //开定时器32 0时钟
        LPC_TMR32B0->PR=0;//1000-1;                //预分频计数器
        LPC_TMR32B0->MR0=24000;                        //匹配寄存器
        LPC_TMR32B0->TCR=0x3;                        //开启并复位定时器计数器
        LPC_TMR32B0->MCR=3;//(1<<0)&(1<<1);         //匹配控制        引发中断并复位定时器
    NVIC_EnableIRQ(TIMER_32_0_IRQn);         //中断使能
        while(1);
}
void TIMER32_0_IRQHandler(void)
{
        a=!a;
        if (a)//((LPC_GPIO1->DATA&(1<<8))==0)
                GPIOSetValue(PORT1,8,1); //LED指示灯
        else
                GPIOSetValue(PORT1,8,0);//亮、、灭
        /* 清中断标志位 */  
  LPC_TMR32B0->IR = 1;                       
  return;
}


就这一点,引发不了中断,LED指示也没变化,不知道哪里设置问题

最近学习到了M0的定时器,GPIO,中断,系统滴达定时器都已陆续搞定。。。

出0入0汤圆

发表于 2011-8-11 18:20:16 | 显示全部楼层
NXP的不懂,呵呵。。用新唐的俺可以看看。

出20入186汤圆

 楼主| 发表于 2011-8-11 18:39:11 | 显示全部楼层
解决了,原来 开启/复位  同时启用会启动不了
LPC_TMR32B0->TCR=0x3; //开启并复位定时器计数器

改为
LPC_TMR32B0->TCR=0x1; //开启定时器计数器

即可

出0入0汤圆

发表于 2011-9-18 13:30:56 | 显示全部楼层
回复【2楼】yuyu87 雨
-----------------------------------------------------------------------

我也遇到这样的问题了,但是,即使我跟楼主的配置方式相同,也还是无法进入中断,郁闷中。。。。
#include "LPC11xx.h"                                                    /* LPC11xx 外设寄存器定义        */
#include "gpio.h"
#include "7289.h"
#include "timer16.h"

#define LED_DIR_OUT()           LPC_GPIO[2]->DIR |= 0X0007
#define LED_OFF()                  LPC_GPIO[2]->MASKED_ACCESS[(7<<0)] = 0X0007
#define LED_ON()                  LPC_GPIO[2]->MASKED_ACCESS[(7<<0)] = 0

//#define KEY_DIR_IN()      GPIOSetDir( 2, 3, 0 )
#define BEEP_DIR_OUT()    GPIOSetDir( 1, 8, 1 )
#define BEEP_ON()         GPIOSetValue( 1, 8, 0 )
#define BEEP_OFF()        GPIOSetValue( 1, 8, 1 )
#define PRESS_KEY         (LPC_GPIO[2]->RESERVED0[(1<<3)])       

uint16_t TIMER16B0_CTR;
/*********************************************************************************************************
** Function name:       DelayMS
** Descriptions:        毫秒级延时
** input parameters:    dly - 延时时间
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void DelayMS(uint32_t dly)
{
  uint32_t i;
  while (dly-- > 0) {
     for(i = 5000; i > 0; i--);                                         /* 延时                         */
  }
}

/*********************************************************************************************************
** Function name:       Io_Init
** Descriptions:        初始化IO口方向
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void Io_Init()
{
        LPC_IOCON->RESET_PIO0_0 |= 0x01;
        LPC_IOCON->PIO0_7 |= 0x08;
        LPC_IOCON->PIO0_6 |= 0x08;

        BEEP_DIR_OUT();
        KEY_DIR_IN();
        LED_DIR_OUT();
        DIO_DIR_OUT();
        CLK_DIR_OUT();
        CS_DIR_OUT();
        KEY_DIR_IN();

        LPC_TMR16B0->TCR = 0X01;               /*为1 时,定时器/计数器和分频计数器使能计数。为0 时,计数器禁能*/
        LPC_TMR16B0->TC  = 0X00;                                                                                 /* 设置定时器计数初值            */
        LPC_TMR16B0->MR0 = 10240;                                                                                 /* 设置定时器计数匹配值          */
        LPC_TMR16B0->PR  = 1023;                                                                                 /* 预分频                        */
        LPC_TMR16B0->MCR = 0X03;                                /* 当MR0与TC值匹配时产生中断,MR0与TC值匹配将使TC复位 */
        LPC_TMR16B0->CTCR= 0x00;                                                                                 /* 工作在定时器模式              */

        LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7);                                                         /* 使能16位计数器/定时器0的时钟  */
        //LPC_SYSCON->PDRUNCFG      |= (1 << 5);

        NVIC_EnableIRQ(TIMER_16_0_IRQn);
}


/*********************************************************************************************************
** Function name:       TIMER16_0_IRQHandler
** Descriptions:        16位定时器/计数器0
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void TIMER16_0_IRQHandler(void)
{
        if((LPC_TMR16B0->IR&0X01)==0X01)
        {
                 LPC_TMR16B0->IR = 0X01;                                                                          /* 清除中断标志                   */
                 BEEP_ON();
                 TIMER16B0_CTR++;
        }
}
/*********************************************************************************************************
** Function name:       main
** Descriptions:        SSP主机例程。K2 Cortex开发板1的SPI0作主机,另外一块K2 Cortex开发板2的SPI0作从机,
**                      分别对接两块开发板的P0.2, P0.6, P0.8, P0.9引脚,先启动从机程序后启动主机程序,
**                      则当数据收发正确时,可观察到蜂鸣器鸣叫两声(发送和接收各一次)
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
int main(void)
{
        SystemInit();
        GPIOInit();
    Io_Init();
        zlg7289Init();

       
        while(1)
        {       
                //zlg_7289_DisNum(TIMER16B0_CTR);
        }
}

出0入0汤圆

发表于 2013-5-12 17:29:42 | 显示全部楼层
我也遇到了同样的问题,我是用PIN1口的0、1、2来采样每个管脚的时间,发现2中断时总是会先进入1的中断,IC已经清除了,郁闷,不知道是什么问题

出0入0汤圆

发表于 2014-8-14 14:34:38 | 显示全部楼层
定时器复位要在MR0之前
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 00:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表