查看: 10067|回复: 21

[求助] lptmr中断问题

[复制链接]

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
发表于 2013-9-11 17:09:31 | 显示全部楼层 |阅读模式
请教:
我的程序中开了UART和LPTMR两个模块,希望实现当UART进入接收中断后关闭UART,初始化并开启LPTMR定时中断, 
调试中遇到很奇怪的问题:进入uart接收中断后,发现在一步跳过LPTMR初始化函数后程序就跑飞进入HardFault_Handler
但是如果单步调试LPTMR的初始化函数,程序就能正常运行,且以后都能正常在UART和LPTMR中断间实现我想要的切换。但只要全速运行或者跳跃式执行程序就跑飞,不懂,不懂。求赐教!
哦,补充:LPTMR使用的是外部时钟
void hw_lptmr_external_clk_init()
{
        unsigned int compare_value=390;
       
        hw_lptmr_clear_registers();          //复位LPTMR模块
        SIM_SCGC5|=SIM_SCGC5_LPTIMER_MASK;//使能LPT模块时钟
       
        //打开外部参考时钟
        MCG_C2&=~MCG_C2_EREFS_MASK;     //允许 extal to drive
        OSC_CR |= OSC_CR_ERCLKEN_MASK;  //选择 EXTAL to drive  XOSCxERCLK
       
        // 配置 LPTMR
        LPTMR0_CMR=LPTMR_CMR_COMPARE(compare_value);          //设置比较值
        LPTMR0_PSR=LPTMR_PSR_PCS(0x3)|LPTMR_PSR_PRESCALE(0x09);//使用外部时钟,预分频为 65536
       
        LPTMR0_CSR|=LPTMR_CSR_TEN_MASK; //开启LPT模块设置
}
我知道答案 目前已有21人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-9-12 11:17:21 | 显示全部楼层

    回复:lptmr中断问题

    LPTMR的一些寄存器只有在该模块未开启状态下(也就是LPTMRx_CSR寄存器中TEN为0时)才可以设置。
    如果你的工程是PE生成的,那么如果有对PE设置,那么就会进入相应模块导致的错误中断而非总是进入
    PE_ISR(Cpu_Interrupt)
    {
      /* This code can be changed using the CPU component property "Build Options / Unhandled int code" */
      PE_DEBUGHALT();
    }

    如果还是不行,就上传你的工程吧
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-9-12 17:01:58 | 显示全部楼层

    回复:lptmr中断问题

    谢谢版主,我反复尝试后都是这个结果(我没有用PE),只好上传工程了,main.c里面有相关说明。开发环境是KEIL uvision4,在K60板子上跑的程序,不过我用的头文件是K10的,没有问题。非常感谢! 

    uarttest-bak1.rar

    1.97 MB, 下载次数: 13

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37

    主题

    132

    帖子

    0

    新手上路

    Rank: 1

    积分
    40
    最后登录
    1970-1-1
    发表于 2013-9-12 23:02:29 | 显示全部楼层

    回复:lptmr中断问题

    回复第 3 楼 于2013-09-12 17:01:58发表:
    谢谢版主,我反复尝试后都是这个结果(我没有用PE),只好上传工程了,main.c里面有相关说明。开发环境是KEIL uvision4,在K60板子上跑的程序,不过我用的头文件是K10的,没有问题。非常感谢!你用的是什么芯片?

     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-9-13 08:43:34 | 显示全部楼层

    回复:lptmr中断问题

    MK60DN512ZVLL10  4N30D
    你用的是什么芯片?

     

     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-9-13 12:50:49 | 显示全部楼层

    回复:lptmr中断问题

    你的工程我打开了,但是好多warning啥的Target not created导致没法仿真,估计环境不同。
    你没必要每次都lptmr_clear_registers清除相关LPTMR配置,LPTMR只要改LPTMR_CSR_TEN_MASK模块开关和enable_lptmr_int还有清零LPTMRx_CNR就可以了。
    还有每次进LPTMR中断记得对LPTMRx_CSR寄存器中TCF写1清除中断标志。

     
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    459

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    303
    最后登录
    2024-10-24
    发表于 2013-9-13 13:45:24 | 显示全部楼层

    回复:lptmr中断问题

    你这个应该是中断服务函数没有重定向的原因,把你LPTMR.h中 #define LPTMRLPTMR_irq (101-16) //85修改为#define LPTMRLPTMR_irq VECTOR_085(这个需要查看中断向量表中关于LPTMR的名称)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-9-13 17:23:17 | 显示全部楼层

    回复:lptmr中断问题

    谢谢版主!不过我想应该不是这个问题,我的UART中断也是这样使能的。而且我把程序调整后,LPTMR的初始化放在程序开始,则只要一到LPTMR的初始化这一段程序就跑飞了,但是单步调试这段初始化代码之后,程序就能正常运行了。我觉得确实很奇怪,不行只能尝试用其他定时器了。
    回复第 7 楼 于2013-09-13 13:45:24发表:
    你这个应该是中断服务函数没有重定向的原因,把你LPTMR.h中 #define LPTMRLPTMR_irq (101-16) //85修改为#define LPTMRLPTMR_irq VECTOR_085(这个需要查看中断向量表中关于LPTMR的名称)
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-9-13 17:29:32 | 显示全部楼层

    回复:lptmr中断问题

    谢谢Robin,确实有一些warning,不过没有什么影响,所以我就没有更改,我忘了说明,当时其实也是把初始化代码放在main函数的最开始的,只不过在进入UART接收中断后再开启LPTMR及其中断,但是程序只要全速或者一步执行该初始化代码,程序就会跑飞。但是单步执行这段代码之后程序就能正常运行了。
    进入LPTMR中断后确实应清除中断标志,我没有注意,改过后,还是一样。
    我想问题应该还是出在LPTMR上,为什么确实很奇怪,暂时只能用别的定时器了。
    回复第 6 楼 于2013-09-13 12:50:49发表:
    你的工程我打开了,但是好多warning啥的Target not created导致没法仿真,估计环境不同。
    你没必要每次都lptmr_clear_registers清除相关LPTMR配置,LPTMR只要改LPTMR_CSR_TEN_MASK模块开关和enable_lptmr_int还有清零LPTMRx_CNR就可以了。
    还有每次进LPTMR中断记得对LPTMRx_CSR寄存器中TCF写1清除中断标志。

     
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-9-16 10:37:43 | 显示全部楼层

    回复:lptmr中断问题

    不知道后来你的问题怎么样了,我早上看了下发现K10和K60的OSC_CR寄存器中External Reference Enable位置不同,要么你按照K60的寄存器操作下,因为你硬件用的是K60的芯片嘛
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 06:34 , Processed in 0.113788 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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