注册 登录
查看: 336|回复: 1

LPT 脉冲计数中断无法运行?

[复制链接]
发表于 2014-2-27 14:12:07 | 显示全部楼层 |阅读模式
在设置计数脉冲时数字过小(100)进入中断程序就运行不下去了,只能尽量往打的设问题可能出在哪?
是旧的程序版本,我把一下两段移植到新版本上就出现以上问题,在旧版本上正常。
void  LPT_Handler(void)
{
    LPTMR0_CSR |= LPTMR_CSR_TCF_MASK;   //清除LPTMR比较标志
    LPT_INT_count++;                    //中断溢出加1
}

void lptmr_counter_init(LPT0_ALTn altn, uint16 count, uint8 PrescaleValue, LPT_CFG cfg)
{

    if(PrescaleValue > 0x0f)PrescaleValue = 0x0f;

    //设置输入管脚
    if(altn == LPT0_ALT1)
    {
        SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;  //打开 PORTA 时钟
        PORTA_PCR19 = PORT_PCR_MUX(0x6);    //在PTA19上使用 ALT6
    }
    else if(altn == LPT0_ALT2)
    {
        SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK;  //使能 PORTC 时钟
        PORTC_PCR5 = PORT_PCR_MUX(0x4);     //在PTC5上使用 ALT4
    }
    else                                    //不可能发生事件
    {
        assert_failed(__FILE__, __LINE__);  //设置管脚有误?
    }

    /* 开启模块时钟 */
    SIM_SCGC5 |= SIM_SCGC5_LPTIMER_MASK;    //使能LPT模块时钟

    /* 清状态寄存器 */
    LPTMR0_CSR = 0x00;                      //先关了LPT,这样才能设置时钟分频等

    /* 设置累加计数值  */
    LPTMR_CMR_REG(LPTMR0_BASE_PTR)  =   LPTMR_CMR_COMPARE(count);                       //设置比较值

    /* 时钟选择 */
    LPTMR_PSR_REG(LPTMR0_BASE_PTR)  =   LPTMR_PSR_PCS(0x1) | LPTMR_PSR_PBYP_MASK  |  LPTMR_PSR_PRESCALE(PrescaleValue);        //使用 LPO clock 且 bypass glitch filter
    //                                                        开启和配置脉冲滤波器:2^n个时钟上升沿才识别

    /* 管脚设置、使能中断  */
    LPTMR_CSR_REG(LPTMR0_BASE_PTR)  =   LPTMR_CSR_TPS(altn) | LPTMR_CSR_TMS_MASK  | ( cfg == LPT_Falling ?  LPTMR_CSR_TPP_MASK :   0  )  | LPTMR_CSR_TEN_MASK  | LPTMR_CSR_TIE_MASK  ;
    //                                       选择输入管脚        选择脉冲计数                                   下降沿       上升沿           使能LPT
    // TFC = 0,即计数值等于比较值时,计数值复位

    enable_irq(LPTMR_irq);                        //开引脚的IRQ中断
}





回复

使用道具 举报

发表于 2014-2-27 14:13:54 | 显示全部楼层
进入中断程序就运行不下去了??看看代码卡死在哪里
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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