?? example_281xevpwm.c
字號:
while(GpioDataRegs.GPADAT.all==0x8000);//busy
e =0;
/*do {
GpioDataRegs. GPBDAT.bit.GPIOB2=1;//E=1
Check=GpioDataRegs. GPADAT.all;
Delay1();//延時140ns以上
GpioDataRegs. GPBDAT.bit.GPIOB2=0;//E=0
check=0x80✓//當(dāng)?shù)?位,即BF為0時才可以操作
}while(!check= =0x00);
}*/
}
void delay (uint us) //delay time
{
while(us--);
//int i;
//for ( i=0;i<5;i++ );
}
void delay1 (uint ms)
{
int ii,jj,kk=0;
for ( ii=0;ii<ms;ii++ )
{
for ( jj=0;jj<215;jj++ )
{
kk++;
}
}
/*uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);*/
}
/*------------------主程序--------------------*/
void main ()
{
// SP=0x5f;//01011111
InitSysCtrl();
/* EALLOW;
SysCtrlRegs.HISPCP.all=0x0003;
EDIS;*/
DINT;//關(guān)總中斷
IER=0x0000;//關(guān)閉外設(shè)中斷
IFR=0x0000;//關(guān)閉外圍中斷
IOinit();
init_lcd ();
while (1)
{
lat_disp (0x00,0x00);
chn_disp (tab1);
con_disp (0xff,0xff,0x8c,0x80,2,16);
delay1 (500);
clrram();
lat_disp (0xcc,0xcc);
delay1 (500);
lat_disp (0x00,0x00);
chn_disp1 (tab31);
img_disp1 (tab32);
delay1 (500);
clrram();
lat_disp (0xff,0x00);
delay1 (500);
img_disp (tab5);
delay1 (500);
}
}
/*#include "DSP281x_Device.h"
void ADC(void)
{ AdcRegs.MAX_CONV.all = 0x0003; // Setup 2 conv's on SEQ1
AdcRegs.CHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA0 as 1st SEQ1 conv.
AdcRegs.CHSELSEQ1.bit.CONV01 = 0x1; // Setup ADCINA1 as 2nd SEQ1 conv.
AdcRegs.CHSELSEQ1.bit.CONV02 = 0x2; // Setup ADCINA1 as 3ird SEQ1 conv.
AdcRegs.CHSELSEQ1.bit.CONV03 = 0x3; // Setup ADCINA1 as 3ird SEQ1 conv.
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; // Enable EVASOC to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)
}
// DSP281x Examples Include File
//#include "DSP28_Globalprototypes.h"
//#pragma CODE_SECTION(T1PINT_isr,"RAMH0");
//#pragma CODE_SECTION(InitFlash,"ramfuncs");
//#pragma CODE_SECTION(T1PINT_isr,"ramfuncs");
//extern unsigned int Ramfuncs_LoadStart;
//extern unsigned int Ramfuncs_LoadEnd;
//extern unsigned int Ramfuncs_RunStart;
// Prototype statements for functions found within this file.
interrupt void T1PINT_isr(void);
//void SCIfunction(void);
//interrupt void T1UFINT_isr(void);
// Global variables used in this example:
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Current1[10];
Uint16 Current2[10];
Uint16 Voltage1[10];
Uint16 Voltage2[10];
Uint16 switch_flag;
Uint16 Vref=0;
Uint16 sum1=0,Sum1=0;
Uint16 sum2=0,Sum2=0;
Uint16 sum3=0,Sum3=0;
int speed1=0,speed2=0;
void KEYControl(void);
int Speedcontrol(int speed1, int speed2);
//float M=0.8;
main()
{
InitSysCtrl();//系統(tǒng)初始化
switch_flag=1;//置關(guān)機(jī)標(biāo)志
// while(GpioDataRegs.GPFDAT.bit.GPIOF13)//開關(guān)機(jī)攔截
//{ }
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP281x_SysCtrl.c file.
// For this example, set HSPCLK to SYSCLKOUT / 6 (25Mhz assuming 150Mhz SYSCLKOUT)
// EALLOW;
// SysCtrlRegs.HISPCP.all = 0x3; // HSPCLK = SYSCLKOUT/6 頻率保護(hù)設(shè)定
// EDIS;
// Step 2. Initialize GPIO:
// This example function is found in the DSP281x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
InitGpio(); // 輸入輸出端口初始化
EALLOW;
GpioMuxRegs.GPAMUX.all=0x00ff;//保護(hù)設(shè)定
EDIS;
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;//關(guān)中斷
IER = 0x0000;//后加
IFR = 0x0000;//后加
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP281x_PieCtrl.c file.
InitPieCtrl();//中斷初始化
// Disable CPU interrupts and clear all CPU interrupt flags:
//IER = 0x0000;//
//IFR = 0x0000;//關(guān)閉CPU的中斷使能和標(biāo)志
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example. This is useful for debug purposes.
// The shell ISR routines are found in DSP281x_DefaultIsr.c.
// This function is found in DSP281x_PieVect.c.
InitPieVectTable();//中斷向量表的初始化
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
//EALLOW; // This is needed to write to EALLOW protected register
//PieVectTable.T1PINT = &T1PINT_isr;//向中斷向量表寫入T1周期中斷地址
//PieVectTable.T1UFINT = &T1UFINT_isr;
//EDIS; // This is needed to disable write to EALLOW protected registers
// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP281x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
InitAdc(); //初始化ADC 上電
// Step 5. User specific code, enable interrupts:
// memcpy(&Ramfuncs_RunStart,&Ramfuncs_LoadStart,&Ramfuncs_LoadEnd-&Ramfuncs_LoadStart);
// InitFlash();
// Enable T1PINT T1UFINT in PIE
PieCtrl.PIEIER2.bit.INTx4 = 1;
PieCtrl.PIEIER2.bit.INTx6 = 1;
//IER |= M_INT2; // Enable CPU Interrupt 2
//EINT; // Enable Global interrupt INTM
//ERTM; // Enable Global realtime interrupt DBGM
//LoopCount = 0;
ConversionCount = 0;
// Configure ADC
InitADC();
// Configure EVA
// Assumes EVA Clock is already enabled in InitSysCtrl();
EvaRegs.EVAIMRA.all=0x0080;//中斷屏蔽寄存器,T1周期中斷使能,下溢中斷使能,電機(jī)驅(qū)動保護(hù)。
EvaRegs.EVAIFRA.all=0xFFFF;//EVA中斷標(biāo)志寄存器清零
EvaRegs.T1CNT=0x00;//計(jì)數(shù)寄存器附初值
EvaRegs.ACTRA.all=0x0666;//比較方式控制寄存器PWM6\4\2低有效,5\3\1高有效
EvaRegs.COMCONA.all=0xA600;//比較控制寄存器T1CNT=0或T1CNT=T1PR時(周期或下溢)裝載
EvaRegs.DBTCONA.all=0x0A10;//死區(qū)時間設(shè)為A*16*1/30000000=5.33us,使能死區(qū)定時器1\2\3(pwm123456)
EvaRegs.GPTCONA.all=0x441;//全局通用定時器控制寄存器,定時器1比較輸出低有效,周期中斷啟動模數(shù)轉(zhuǎn)換
EvaRegs.T1CMPR = 0x0A80; // Setup T1 compare value
EvaRegs.CMPR1 = 625;
EvaRegs.T1PR = 1250; // Setup period register
EvaRegs.GPTCONA.bit.T1TOADC = 1; // Enable EVASOC in EVA
//EvaRegs.T1CON.all = 0x1042; // Enable timer 1 compare (upcount mode)
EvaRegs.T1CON.all=0x0842;//定時器1控制寄存器,連續(xù)增減,內(nèi)部時鐘/128,定時器比較使?
while(1)
{
if(GpioDataRegs.GPFDAT.bit.GPIOF13==0&&switch_flag==1)
{
GpioDataRegs.GPEDAT.bit.GPIOE2=1;//
switch_flag=0;
for(Vref=0;Vref<=10;Vref++)
{
EvaRegs.CMPR1=Vref*4096/8;
EvaRegs.CMPR2=Vref*4096/8;
}
EvaRegs.CMPR1 = 625;
}
else if(GpioDataRegs.GPFDAT.bit.GPIOF13==1&&switch_flag==0)
{
GpioDataRegs.GPEDAT.bit.GPIOE2=0;//
switch_flag=1;
EvaRegs.CMPR1 = 0x0;
EvaRegs.CMPR2 = 0x0;
}
// LoopCount++;//
//SCIfunction();
//KEYControl();
}//while層
}//main層
interrupt void T1PINT_isr(void)//
{
Current1[ConversionCount] = AdcRegs.RESULT0 >>4;//
Current2[ConversionCount] = AdcRegs.RESULT1 >>4;//
Voltage1[ConversionCount] = AdcRegs.RESULT2 >>4;//
Voltage2[ConversionCount] = AdcRegs.RESULT3 >>4;//
// If 40 conversions have been logged, start over
if(ConversionCount == 9) //
{
ConversionCount = 0;//
for(ConversionCount=0;ConversionCount<=9;ConversionCount++)
{
sum1=sum1+Current1[ConversionCount];
if(ConversionCount==9)
{Sum1=sum1/10;}
}
for(ConversionCount=0;ConversionCount<=9;ConversionCount++)
{
sum2=sum2+Current2[ConversionCount];
if(ConversionCount==9)
{Sum2=sum2/10;}
}
for(ConversionCount=0;ConversionCount<=9;ConversionCount++)
{
sum3=sum3+Voltage1[ConversionCount];
if(ConversionCount==9)
{
Sum3= sum3/10;
}
}
//Speedcontrol(speed1,speed2);
}//
else //
ConversionCount++;//
// Reinitialize for next ADC sequence
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
EvaRegs.EVAIFRA.bit.T1PINT=1;//Clear interrupt flag bit 7
PieCtrl.PIEACK.all = PIEACK_GROUP2; // Acknowledge interrupt to PIE
EINT;//
return;//
}//
void KEYControl(void)
{
switch(GpioDataRegs.GPBDAT.all)
{
case 0xfeff: Speedcontrol(500,600);
break;
case 0xfdff: Speedcontrol(1000,1500);
break;
case 0xfcff: Speedcontrol(2000,2500);
break;
case 0xfbff: Speedcontrol(3000,3500);
break;
case 0xfaff: Speedcontrol(4000,4500);
break;
case 0xf9ff: Speedcontrol(speed1,speed2);
break;
case 0xf8ff: Speedcontrol(speed1,speed2);
break;
case 0xf7ff: Speedcontrol(speed1,speed2);
break;
default: break;
}//switch層
}//KEY層
Speedcontrol(speed1,speed2)
{
for(Vref=0;Vref<=4094;Vref++)
{
EvaRegs.CMPR1=Vref;
EvaRegs.CMPR2=Vref;
}
EvaRegs.CMPR1 = speed1;
EvaRegs.CMPR2 = speed2;
}
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -