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