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

📄 test.c

📁 DSP捕获历程
💻 C
字号:
#include "DSP28_Device.h"

short cap3_count=0;
int countget = 0;

void InitEv(void)
{
	EALLOW;
	GpioMuxRegs.GPAMUX.all=0x00ff;
	EDIS;
	
	EvaRegs.GPTCONA.all = 0x0859;		/* gp timer control register */
	EvaRegs.T1CNT = 0;					/* timer1 count is zero */
	EvaRegs.T1CON.all = 0x1f42;
	EvaRegs.T1PR = 0x7fff;
	EvaRegs.T1CMPR = 0x3fff;
	
}

void InitSysCtrl(void)
{
   Uint16 i;
   EALLOW;
   
// On TMX samples, to get the best performance of on chip RAM blocks M0/M1/L0/L1/H0 internal
// control registers bit have to be enabled. The bits are in Device emulation registers.
   DevEmuRegs.M0RAMDFT = 0x0300;
   DevEmuRegs.M1RAMDFT = 0x0300;
   DevEmuRegs.L0RAMDFT = 0x0300;
   DevEmuRegs.L1RAMDFT = 0x0300;
   DevEmuRegs.H0RAMDFT = 0x0300;
   
   DevEmuRegs.PROTSTART = 0xfe00; 
   DevEmuRegs.PROTRANGE = 0x007f; 
         
// Disable watchdog module
   SysCtrlRegs.WDCR= 0x0068;

// Initalize PLL
   SysCtrlRegs.PLLCR = 0xA;
   // Wait for PLL to lock
   for(i= 0; i< 5000; i++){}
       
// HISPCP/LOSPCP prescale register settings, normally it will be set to default values
   SysCtrlRegs.HISPCP.all = 0x0001;
   SysCtrlRegs.LOSPCP.all = 0x0002;	
// Peripheral clock enables set for the selected peripherals.   
   SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
   SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
   SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;
// SysCtrlRegs.PCLKCR.bit.SCIENCLKB=1;
   SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;				
   EDIS;
	
}

void EnableCAP3() //使能捕获
{ 		EvaRegs.CAPFIFOA.all=0x0000;
	    EvaRegs.CAPCONA.all=0xf4f4;
	    cap3_count=0;
}
void EnableCap3Int()
{   	EvaRegs.EVAIFRC.bit.CAP3INT=1;		// Clear CAP3 interrupt flag 
	EvaRegs.EVAIMRC.bit.CAP3INT=1;		// Enable CAP3 interrupts 
	PieCtrl.PIEIER3.bit.INTx7=1;
	IER |=M_INT3;		// Unmask (enable) Int3 interrupt 
}
void DisableCap3Int() 
{	IER &=BIT3;		// Disable Int3 interrupt 
   	PieCtrl.PIEIER3.bit.INTx7=0;
   	EvaRegs.EVAIMRC.bit.CAP3INT=0;		// Disable CAP1,2,3 interrupts 
}
interrupt void SISR_CAP3() //电机3编码器值计算中断程序
{ 	short i,cap3_state;  //motor_dir   
	PieCtrl.PIEACK.bit.ACK3=1;
	IFR &= BIT3;
	cap3_state=0;
	for (i=1;i<=5;i++) 	cap3_state+=(GpioDataRegs.GPADAT.bit.GPIOA10==1);
	if (cap3_state>=4) 
	{  	cap3_count++;		//motor_dir=1;
	}
	
	EvaRegs.EVAIFRC.bit.CAP3INT=1; 	//Clear CAP3 Interrupt flag 
	EINT;
}
void InitPieCtrl(void)
{	// Disable PIE:
	PieCtrl.PIECRTL.bit.ENPIE = 0;

	// Clear all PIEIER registers:
	PieCtrl.PIEIER1.all = 0;
	PieCtrl.PIEIER2.all = 0;
	PieCtrl.PIEIER3.all = 0;	
	PieCtrl.PIEIER4.all = 0;
	PieCtrl.PIEIER5.all = 0;
	PieCtrl.PIEIER6.all = 0;
	PieCtrl.PIEIER7.all = 0;
	PieCtrl.PIEIER8.all = 0;
	PieCtrl.PIEIER9.all = 0;
	PieCtrl.PIEIER10.all = 0;
	PieCtrl.PIEIER11.all = 0;
	PieCtrl.PIEIER12.all = 0;

	// Clear all PIEIFR registers:
	PieCtrl.PIEIFR1.all = 0;
	PieCtrl.PIEIFR2.all = 0;
	PieCtrl.PIEIFR3.all = 0;	
	PieCtrl.PIEIFR4.all = 0;
	PieCtrl.PIEIFR5.all = 0;
	PieCtrl.PIEIFR6.all = 0;
	PieCtrl.PIEIFR7.all = 0;
	PieCtrl.PIEIFR8.all = 0;
	PieCtrl.PIEIFR9.all = 0;
	PieCtrl.PIEIFR10.all = 0;
	PieCtrl.PIEIFR11.all = 0;
	PieCtrl.PIEIFR12.all = 0;

	// Enable PIE:
	PieCtrl.PIECRTL.bit.ENPIE = 1;
	PieCtrl.PIEACK.all = 0xFFFF;
}	


void main(void)
{
	//初始化系统
	InitSysCtrl();

	//关中断
	DINT;
	IER = 0x0000;
	IFR = 0x0000;
	
	//初始化PIE控制寄存器
	InitPieCtrl();
	
	//初始化PIE矢量表
	InitPieVectTable();	
	
	//初始化PWM
	//InitEv();

	EALLOW;
	PieVectTable.CAPINT3=&SISR_CAP3;

    //外围设备初始化
	 GpioMuxRegs.GPAMUX.all=0x073f;
     GpioMuxRegs.GPADIR.all=0xe0ff;     
     GpioMuxRegs.GPAQUAL.all=0x000a;	// Input qualifier disabled
	EDIS;

	EINT;
	ERTM;	

	EnableCap3Int();
	EnableCAP3();
	while (1) 
	{
		if (GetNewByte()=='c') countget++;//My_printf("Cap3_count = %d\n",cap3_count);
		}
}	

⌨️ 快捷键说明

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