注册 登录
查看: 353|回复: 0

PIT定时读取LPT脉冲计数实验(未解之谜)

[复制链接]
发表于 2014-8-6 21:51:12 | 显示全部楼层 |阅读模式
#include "common.h"
#include "include.h"


extern volatile u32 LPT_INT_count;
extern volatile u8  pit_flag;

/*************************************************************************
*                             山外嵌入式开发工作室
*                   PIT定时读取LPT脉冲计数实验(利用FTM产生PWM脉冲波)
*
*  实验说明:利用 FTM 产生PWM脉冲,LPT脉冲计数,PIT定时中断读取计数
*
*  实验操作:短接 PTC5 和 PTA8
*
*  实验效果:串口输出计数值,效果现象:
*                山外kinetis核心板测试程序
*        内核频率:200MHz        总线频率 :100MHz
*        flex频率:100MHz         flash频率:28MHz
*
*        Core Lockup Event Reset
*
*        山外Kinetis开发板启动方式:flash启动
*
*        K60-144pin      Silicon rev 1.2
*        Flash parameter version 0.0.7.0
*        Flash version ID 3.2.7.0
*        512 kBytes of P-flash        P-flash only
*        128 kBytes of RAM
*
*        1秒钟LPT读取脉冲:81个                 第一个不稳定
*        1秒钟LPT读取脉冲:199个
*        1秒钟LPT读取脉冲:199个
*        1秒钟LPT读取脉冲:199个
*        ……
*
*  实验目的:明白如何定时统计脉冲计数
*
*  修改时间:2012-3-16     已测试
*
*  备    注:可以修改FTM频率,1秒时间的脉冲计数与频率非常相近(有误差)
*************************************************************************/
#define INT_COUNT  100
void main()
{
    u16 count;

    DisableInterrupts;                                                              //禁止总中断

    FTM_PWM_init(FTM1, CH0, 100, 50);                                               //FTM模块产生PWM,用 FTM1_CH0 ,即 PTA8 ,频率为 200

    lptmr_counter_init(LPT0_ALT2, INT_COUNT, 2, LPT_Rising);                        //初始化脉冲计数器,用LPT0_ALT2,即PTC5输入,每隔INT_COUNT产生中断,延时2个时钟滤波,上升沿触发

    pit_init_ms(PIT0, 1000);                                                        //定时 1秒 中断

    EnableInterrupts;                                                               //开总中断

    while(1)
    {
        if( pit_flag > 0 )                                                          /*   1 秒中断了  */
        {
            count = LPTMR0_CNR;                                                     //保存脉冲计数器计算值
            lptmr_counter_clean();                                                  //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)
            printf("1秒钟LPT读取脉冲:%d个\n", LPT_INT_count * INT_COUNT +  count);  //读取间隔1秒的脉冲次数
            LPT_INT_count = 0;                                                      //清空LPT中断次数
            pit_flag = 0;                                                           //清空pit中断标志位
        }
    }
}



/-----------------------------------我是分界线------------------------------------------------/

今天遇到一个特别奇怪的事,用最小系统做这个实验结果完全正确
但是换到自己做的板子串口返回来的值总是比实际的值小100
请问一下,有可能是什么情况?
回复

使用道具 举报

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

本版积分规则

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