⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_evcap.c

📁 TI TMS320F2812 ecap 例程
💻 C
字号:
// TI File $Revision: /main/3 $
// Checkin $Date: July 2, 2007   11:33:22 $
//###########################################################################
//
// FILE:    Example_281xCpuTimer.c
//
// TITLE:   DSP281x Device Getting Started Program.
//
// ASSUMPTIONS:
//
//          This program requires the DSP281x V1.00 header files.  
//          As supplied, this project is configured for "boot to H0" operation.
//
//          Other then boot mode configuration, no other hardware configuration
//          is required.   
//
// DESCRIPTION:
//
//          This example configures CPU Timer0 and increments
//          a counter each time the timer asserts an interrupt.
//      
//          Watch Variables:
//                 CpuTimer0.InterruptCount
//
//###########################################################################
// $TI Release: DSP281x Header Files V1.11 $
// $Release Date: September 26, 2007 $
//###########################################################################


#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File

void InitVariable(void);

// Prototype statements for functions found within this file.
//interrupt void cpu_timer0_isr(void);
interrupt void cap1_isr(void);
interrupt void cap3_isr(void);
interrupt void EvTimer2_OverFlow_isr(void);


Uint16 FlowCount;

Uint16 OldFlowCount1;
Uint16 OldFlowCount3;

Uint16 DifFlowCount1;
Uint16 DifFlowCount3;

Uint16 Cap1Count;
Uint16 Cap3Count;

Uint16 FifoData1;
Uint16 FifoData3;

Uint16 OldFifoData1;
Uint16 OldFifoData3;

Uint16 Freq1;
Uint16 Freq3;

void main(void)
{

   InitSysCtrl();

   InitGpio();  // Skipped for this example  

   DINT;

   InitPieCtrl();
   
   IER = 0x0000;
   IFR = 0x0000;

   InitPieVectTable();

   EALLOW;  // This is needed to write to EALLOW protected registers
   PieVectTable.CAPINT1 = &cap1_isr;
   PieVectTable.CAPINT3 = &cap3_isr;
   PieVectTable.T2OFINT = &EvTimer2_OverFlow_isr;   
   EDIS;    // This is needed to disable write to EALLOW protected registers

   IER |= M_INT3;//(M_INT1|M_INT3);

   PieCtrlRegs.PIEIER3.bit.INTx4 = 1;
   PieCtrlRegs.PIEIER3.bit.INTx5 = 1;
   PieCtrlRegs.PIEIER3.bit.INTx7 = 1;
   
// Enable global Interrupts and higher priority real-time debug events:
   EINT;   // Enable Global interrupt INTM
   ERTM;   // Enable Global realtime interrupt DBGM
   
   InitEv();
   
   InitVariable();

   for(;;)
   ;

} 

void InitVariable(void)
{
   FlowCount = 0;

   OldFlowCount1 = 0;
   OldFlowCount3 = 0;

   DifFlowCount1 = 0;
   DifFlowCount3 = 0;

   Cap1Count = 0;
   Cap3Count = 0;

   FifoData1 = 0;
   FifoData3 = 0;

   OldFifoData1 = 0;
   OldFifoData3 = 0;
   
   Freq1 = 0;
   Freq3 = 0;
}

interrupt void EvTimer2_OverFlow_isr(void)
{

   EvaRegs.EVAIFRB.bit.T2OFINT = 1;
   
   FlowCount++;

   PieCtrlRegs.PIEACK.all |= PIEACK_GROUP3;  // 响应中断
   
   return;
}

//如果是第一次响应中断,FIFO中已经有两个数了,
//为保证能连续的获取中断发生当前的计数值,
//只能读取FIFO的底层数,让上层的数一直保留在FIFO中。

interrupt void cap1_isr(void)
{
   if(FlowCount<OldFlowCount1)
      DifFlowCount1=FlowCount+(65536-OldFlowCount1);
   else 
      DifFlowCount1=FlowCount-OldFlowCount1;
   
   OldFlowCount1=FlowCount;

   if(Cap1Count==0)
   {
      OldFifoData1=EvaRegs.CAP1FBOT;
      Cap1Count=1;
   }
   else
   {
      FifoData1=EvaRegs.CAP1FBOT;
      Freq1=3125000000/(65536*DifFlowCount1+FifoData1-OldFifoData1);
      OldFifoData1=FifoData1;
   }

   EvaRegs.EVAIFRC.bit.CAP1INT = 1; 
   PieCtrlRegs.PIEACK.all |= PIEACK_GROUP3;  // 响应中断
   EINT;
   
   return;

}

interrupt void cap3_isr(void)
{
   if(FlowCount<OldFlowCount3)
      DifFlowCount3=FlowCount+(65536-OldFlowCount3);
   else 
      DifFlowCount3=FlowCount-OldFlowCount3;
   
   OldFlowCount3=FlowCount;

   if(Cap3Count==0)
   {
      OldFifoData3=EvaRegs.CAP3FBOT;
      Cap3Count=1;
   }
   else
   {
      FifoData3=EvaRegs.CAP3FBOT;
      Freq3=3125000000/(65536*DifFlowCount3+FifoData3-OldFifoData3);
      OldFifoData3=FifoData3;
   }

   EvaRegs.EVAIFRC.bit.CAP3INT = 1; 
   PieCtrlRegs.PIEACK.all |= PIEACK_GROUP3;  // 响应中断
   EINT;
   
   return;

}


//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -