📄 test_evcap.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 + -