打印

捕获测频技术

[复制链接]
1700|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wang112411|  楼主 | 2013-8-9 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是最近写的关于电网捕获测频的一段程序,分享一下,互相学习!
/****************************************************
**           捕获单元测频                                     **
**                                                                                     **
****************************************************/
#include"DSP28_Device.h"
#include"DSP28_GlobalPrototypes.h"
unsigned int temp;
float f;      
unsigned  int capnum1;
unsigned  int capnum2;
interrupt void CAPINT_ISR(void);
void IintEv(void);
void main(void)
{

   InitSysCtrl();                   //初始化函数
   DINT;                          // 关总中断
   IER=0x0000;                     //清除所有中断
   IFR=0x0000;                   //清除所有中断标志位
   InitPieCtrl();                    //初始化Pie控制寄存器
   InitPieVectTable();          //初始化PIE中断向量表
   InitGpio();                                                                           
     InitEv();
      EALLOW;
      PieVectTable.CAPINT1=&CAPINT_ISR;  //将捕获单元的中断服务程序入口地址填写到PIE向量表中
    EDIS;
      PieCtrl.PIEIER3.bit.INTx5=1;       //使能PIE中断,T1定时器中断CAPPINT1位于INT3.5
      IER|=M_INT3;                       //开CPU中断INT3,中断使能寄存器的的第二位
    EINT;    //开总中断
   ERTM;  //开实时中断
   EvaRegs.T1CON.bit.TENABLE=1;       //使能定时器T1的计数操作
   EvaRegs.T2CON.bit.TENABLE=1;       //使能定时器T2的计数操作
   for(;;)
     { }  
}

interrupt void CAPINT_ISR(void)       //捕获单元1中断
{  
         
         EvaRegs.EVAIFRC.bit.CAP1INT=1;   //清除中断标志位
            capnum1=EvaRegs.CAP1FIFO;
         capnum2=EvaRegs.CAP1FIFO;
            if(capnum2>capnum1)          
                 temp=capnum2-capnum1;          
                 else
                 temp=capnum2+(0xFFFF-capnum1);//做定时器上溢处理
             f=2343750.0/(float)temp;
                                   
         PieCtrl.PIEACK.all=PIEACK_GROUP3;//响应同组其他中断            
         EINT; //开全局中断
           // 中断返回
}

void InitEv(void)
{
        EvaRegs.T2CON.bit.TMODE=2;        //连续增计数模式
        EvaRegs.T2CON.bit.TPS=5;             //进行64分频
        EvaRegs.T2CON.bit.TENABLE=0;      //暂时禁止T2的计数操作
        EvaRegs.T2CON.bit.TCLKS10=0;      //使用内部时钟
        EvaRegs.T2PR=0xFFFF;                   //给T2定时器设终值
        EvaRegs.T2CNT=0;                        //设置计数初值为0
        EvaRegs.CAPCON.all=0;                  //初始化捕获控制寄存器
        EvaRegs.CAPFIFO.bit.CAP1FIFO=0;   //CAP1FIFO为空
        EvaRegs.CAPCON.bit.CAPQEPN=1;     //使能捕获功能
        EvaRegs.CAPCON.bit.CAP12TSEL=0;   //设置捕获单元1的定时器
        EvaRegs.CAPCON.bit.CAP1EDGE=1;    //检测上升沿           
       
        EvaRegs.EVAIFRC.bit.CAP1INT=1;      //清除捕获单元1的捕获中断标志位
        EvaRegs.EVAIMRC.bit.CAP1INT=1;     //使能捕获单元1的捕获中断
           
}

void InitGpio(void)
{

     EALLOW;
     GpioMuxRegs.GPAMUX.bit.CAP1Q1_GPIOA8=1; //设置捕获引脚CAP1_QEP1             
     EDIS;
}               

评分
参与人数 1威望 +4 收起 理由
zhangmangui + 4 很给力!

相关帖子

沙发
zhangmangui| | 2013-8-9 18:12 | 只看该作者
感谢分享   注释很全面  

使用特权

评论回复
板凳
comeon201208| | 2013-8-9 21:11 | 只看该作者
分享的资料非常不错,谢谢所做的工作

使用特权

评论回复
地板
wang112411|  楼主 | 2013-8-9 21:45 | 只看该作者
comeon201208 发表于 2013-8-9 21:11
分享的资料非常不错,谢谢所做的工作

呵呵,你也帮了不少,相互学习!

使用特权

评论回复
5
wang112411|  楼主 | 2013-8-9 21:46 | 只看该作者
zhangmangui 发表于 2013-8-9 18:12
感谢分享   注释很全面

呵呵,相互学习,你也帮我解决了不少问题!

使用特权

评论回复
6
zhangmangui| | 2013-8-10 10:53 | 只看该作者
wang112411 发表于 2013-8-9 21:46
呵呵,相互学习,你也帮我解决了不少问题!

呵呵  应该的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

77

帖子

0

粉丝