📄 evtimer1.c
字号:
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
unsigned int Led_Flag;
#define SetData GpioDataRegs.GPFDAT.bit.GPIOF0 = 1
#define ClrData GpioDataRegs.GPFDAT.bit.GPIOF0 = 0
#define SetClk GpioDataRegs.GPFDAT.bit.GPIOF2 = 1
#define ClrClk GpioDataRegs.GPFDAT.bit.GPIOF2 = 0
unsigned int *LedReg = (unsigned int *)0x23FF; //LED 控制寄存器
unsigned int *Led8Lock = (unsigned int *)0x25FF;
const Uint16 LedCode[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};
const Uint16 SpiCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
unsigned short rise = 0;
unsigned long sprd =0;
double prd_dat =0.0;
unsigned int capnum1;
unsigned int capnum2;
unsigned int capnum41=0;
unsigned int capnum42=0;
unsigned int capnum51=0;
unsigned int capnum52=0;
unsigned int capnum;
unsigned long pwth = 0;
unsigned long time2count = 0;
float pinlvf[5];
double fnum=0;
unsigned int temp1;
//unsigned int ffnum=0;
extern unsigned long frequence=0;
void display(long fre);
void display_p(long fre);
void SendData(Uint16 data);
unsigned long fre_num=0;
unsigned int fre_ys=0;
double lowprd = 0;
unsigned long tempfre =0;
unsigned int noonehz =0,frenoone = 0;
unsigned short flagnoone =0;
double temppw = 0;
// Prototype statements for functions found within this file.
interrupt void eva_timer1_isr(void);
interrupt void eva_timer2_isr(void);
interrupt void evb_timer3_isr(void);
interrupt void evb_timer4_isr(void);
unsigned int disflag=0;
interrupt void ISRTimer0(void);
interrupt void ISRTimer1(void);
interrupt void ISRTimer2(void);
interrupt void CAP6(void);
interrupt void CAP5(void);
interrupt void CAP4(void);
// Global counts used in this example
Uint32 EvaTimer1InterruptCount;
Uint32 EvaTimer2InterruptCount;
Uint32 EvbTimer3InterruptCount;
Uint32 EvbTimer4InterruptCount;
Uint16 LedCount = 0;
Uint16 SpiCount = 0;
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*初始化外设*/
InitPeripherals();
InitGpio();
InitXIntrupt();
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.T1PINT = &eva_timer1_isr;
PieVectTable.T2PINT = &eva_timer2_isr;
PieVectTable.T3PINT = &evb_timer3_isr;
PieVectTable.T4PINT = &evb_timer4_isr;
PieVectTable.TINT0 = &ISRTimer0;
PieVectTable.XINT13 = &ISRTimer1;
PieVectTable.CAPINT6=&CAP6;
PieVectTable.CAPINT5=&CAP5;
PieVectTable.CAPINT4=&CAP4;
EDIS; // This is needed to disable write to EALLOW protected registers
/*设置CPU*/
ConfigCpuTimer(&CpuTimer0, 120, 1001320);
StartCpuTimer0();
ConfigCpuTimer(&CpuTimer2, 120, 20000000);
ConfigCpuTimer(&CpuTimer1, 120, 30000000);
// StartCpuTimer1();
PieCtrl.PIEIER1.bit.INTx7=1;
// Enable PIE group 2 interrupt 4 for T1PINT
PieCtrl.PIEIER2.all = M_INT4;
// Enable PIE group 3 interrupt 1 for T2PINT
// PieCtrl.PIEIER3.all = M_INT1;
// Enable PIE group 4 interrupt 4 for T3PINT
//PieCtrl.PIEIER4.all = M_INT4;
// Enable PIE group 5 interrupt 1 for T4PINT
// PieCtrl.PIEIER5.all = M_INT1;
//Enable PIE group 5 interrupt 7 for CAP6
// PieCtrl.PIEIER5.bit.INTx7=1; //使能CAP6中断
PieCtrl.PIEIER5.bit.INTx6=1; //使能CAP5中断
PieCtrl.PIEIER5.bit.INTx5=1; //使能CAP4中断
/*开中断*/
// Enable CPU INT2 for T1PINT, INT3 for T2PINT, INT4 for T3PINT
// and INT5 for T4PINT:
// IER |= (M_INT2 | M_INT3 | M_INT4 | M_INT5);
IER |= (M_INT1);
IER |= (M_INT2);
// IER |= (M_INT4);
IER |= M_INT5;
IER |= M_INT13; //开中断13
// Enable global Interrupts and higher priority real-time debug events:
lcd_init();
clrram();
Smenu();
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// Step 6. IDLE loop. Just sit and loop forever:
for(;;)
if(disflag == 1)
{
// DINT;
tempfre = fre_num*50+fre_ys;
if(lowprd<10)
{
lowprd = ((double)(1200000000.0/(3600000000-sprd)));
tempfre = (long)(lowprd*1000000);
}
temppw = (long)((double)((240000000-time2count)*tempfre*360.0/(double)(120000000.0)));//(360*(240000000-time2count)*1.0/(double)(120000000.0))/(double)(1.0/tempfre);
/* if(flagnoone == 0)
tempfre = fre_num*50+fre_ys;
else
{
// if(flagnoone == 1)
tempfre = (long)((100.0/(float)(fre_ys)));
flagnoone =0;
// else
// tempfre = 0;
// flagnoone =0;
} */
// DINT;
display(tempfre);
display_p((long)(((1.0/(double)(tempfre))*100000000.0)+0.5));
display_pw((long)((temppw*1000000)+0.5));
// EINT;
// disflag = 0;
delay(100);
}
}
// Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:
// If local ISRs are used, reassign vector addresses in vector table as
// shown in Step 5
interrupt void eva_timer1_isr(void)
{
EvaTimer1InterruptCount++;
// Enable more interrupts from this timer
EvaRegs.EVAIMRA.bit.T1PINT = 1;
frequence++;
// frenoone = noonehz;
// noonehz =0 ;
// flagnoone =1;
// Note: To be safe, use a mask value to write to the entire
// EVAIFRA register. Writing to one bit will cause a read-modify-write
// operation that may have the result of writing 1's to clear
// bits other then those intended.
EvaRegs.EVAIFRA.all = BIT7;
// Acknowledge interrupt to recieve more interrupts from PIE group 2
PieCtrl.PIEACK.all = PIEACK_GROUP2;
// *LedReg = LedCode[LedCount];
// LedCount++;
// if (LedCount>=8) LedCount = 0;
}
interrupt void eva_timer2_isr(void)
{
EvaTimer2InterruptCount++;
// Enable more interrupts from this timer
EvaRegs.EVAIMRB.bit.T2PINT = 1;
// Note: To be safe, use a mask value to write to the entire
// EVAIFRB register. Writing to one bit will cause a read-modify-write
// operation that may have the result of writing 1's to clear
// bits other then those intended.
EvaRegs.EVAIFRB.all = BIT0;
// Acknowledge interrupt to recieve more interrupts from PIE group 3
PieCtrl.PIEACK.all = PIEACK_GROUP3;
// SendData(SpiCode[SpiCount]);
// SpiCount++;
// if (SpiCount>=16) SpiCount = 0;
}
interrupt void evb_timer3_isr(void)
{
EvbTimer3InterruptCount++;
// ffnum++;
// Note: To be safe, use a mask value to write to the entire
// EVBIFRA register. Writing to one bit will cause a read-modify-write
// operation that may have the result of writing 1's to clear
// bits other then those intended.
EvbRegs.EVBIFRA.all = BIT7;
// Acknowledge interrupt to recieve more interrupts from PIE group 4
PieCtrl.PIEACK.all = PIEACK_GROUP4;
}
interrupt void evb_timer4_isr(void)
{
EvbTimer4InterruptCount++;
// ffnum++;
// Note: To be safe, use a mask value to write to the entire
// EVBIFRB register. Writing to one bit will cause a read-modify-write
// operation that may have the result of writing 1's to clear
// bits other then those intended.
EvbRegs.EVBIFRB.all = BIT0;
// Acknowledge interrupt to recieve more interrupts from PIE group 5
PieCtrl.PIEACK.all = PIEACK_GROUP5;
}
interrupt void ISRTimer2(void)
{
CpuTimer2.InterruptCount++;
if(Led_Flag == 1)
{
// *LedReg = 0xAA;
Led_Flag = 0;
}
else
{
// *LedReg = 0x55;
Led_Flag = 1;
}
frequence =0;
}
interrupt void ISRTimer1(void)
{
CpuTimer2.InterruptCount++;
if(Led_Flag == 1)
{
// *LedReg = 0xAA;
Led_Flag = 0;
}
else
{
// *LedReg = 0x55;
Led_Flag = 1;
}
frequence =0;
}
interrupt void ISRTimer0(void)
{
PieCtrl.PIEACK.bit.ACK7=1;
fre_num = frequence;
fre_ys = EvaRegs.T1CNT;
//noonehz++;
if(fre_ys != 0)
EvaRegs.T1CNT = 0;
/*if((fre_ys ==1)&&(noonehz >1))
{
fre_ys = noonehz;
noonehz =0;
flagnoone =1;
EvaRegs.T1CNT =0;
}*/
disflag=1;
// *LedReg = LedCode[LedCount];
// LedCount++;
// if (LedCount>=8) LedCount=0;
frequence =0;
}
interrupt void CAP6(void)
{
unsigned int temp;
EvbRegs.EVBIFRC.bit.CAP6INT=1;// 清捕获中断1标志位
if( EvbRegs.CAPFIFOB.bit.CAP6FIFO==3)
{
capnum1=EvbRegs.CAP6FIFO;
capnum2=EvbRegs.CAP6FIFO;
/* if(capnum2 > capnum1)
temp = capnum2-capnum1;
else
temp = capnum2+(0xFFFF-capnum1);
pinlvf[fnum++] =temp;
if(fnum>4) fnum=0;//取5个数值后回零
f= 1875000.0/(float)temp;*/
}
PieCtrl.PIEACK.bit.ACK5 = 1;//开外设中断应答
}
interrupt void CAP5(void)
{
unsigned int temp,tempcapedge =0;
EvbRegs.EVBIFRC.bit.CAP6INT=1;// 清捕获中断1标志位
StartCpuTimer2();
ReloadCpuTimer2();
// capnum51=EvbRegs.CAP5FIFO;
// capnum52=EvbRegs.CAP5FIFO;
if(rise==0)
{
ReloadCpuTimer1();
StartCpuTimer1();
rise =1;
}
else
{
// ReloadCpuTimer1();
StopCpuTimer1();
sprd = ReadCpuTimer1Counter();
rise =0;
// prd_dat = (double)(240000000-sprd);
}
/* if(capnum52 > capnum51)
temp = capnum52-capnum51;
else
temp = capnum52+(0xFFFF-capnum51);
pinlvf[fnum++] =temp;
if(fnum>4) fnum=0;//取5个数值后回零
f= 1875000.0/(float)temp;*/
// ffnum =0;
PieCtrl.PIEACK.bit.ACK5 = 1;//开外设中断应答
}
//extern struct CPUTIMER_VARS CpuTimer2;
interrupt void CAP4(void)
{
unsigned int temp,tempcapedge =0;
EvbRegs.EVBIFRC.bit.CAP6INT=1;// 清捕获中断1标志位
CpuTimer2.RegsAddr = &CpuTimer2Regs;
// capnum41=EvbRegs.CAP4FIFO;
// capnum42=EvbRegs.CAP4FIFO;
// capnum1=capnum2;
StopCpuTimer2();
// time2count=240000000-ReadCpuTimer2Counter();
time2count=ReadCpuTimer2Counter();
// pwth = capnum41-capnum51+ffnum*65535;
// f= 1875000.0/(float)temp;
// ffnum=0;
PieCtrl.PIEACK.bit.ACK5 = 1;//开外设中断应答
}
void Delay(Uint16 data)
{
Uint16 i;
for (i=0;i<data;i++) { ; }
}
void SendData(Uint16 data)
{
Uint16 i,Temp;
Temp = 0x80;
for (i=0;i<8;i++)
{
if ((data & Temp)==0) ClrData;
else SetData;
Temp >>= 1;
ClrClk;
Delay(10);
SetClk;
}
*Led8Lock = 0xB7;
Delay(10);
*Led8Lock = 0xBF;
SetData;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -