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

📄 sci_test.c

📁 TMS320F2812 SCI串口实验程序
💻 C
字号:

#include "DSP28_Device.h"
#include "ext_inf.h"
unsigned int Sci_VarRx[256];
unsigned int i,j;
unsigned int Send_Flag;
void wait(int nWait);
unsigned int Led_Flag;
extern	Uint16	ScanKey(void);


#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;  //发光二极管控制寄存器	
unsigned int * Led8Lock= (unsigned int *) 0x25FF;  //数码管控制寄存器

//unsigned  int  *LedReg  = (unsigned int *)0x23FF;
//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};
Uint16	LedCount = 0;
Uint16	SpiCount = 0;

interrupt void ISRTimer0(void);
interrupt void ISRTimer2(void);
void	SendData(Uint16	 data);


//ad

float	a1[16];
unsigned int a2=0;
float	adclo=0.0;

interrupt void ad(void);


void main(void)
{
int mn;
	Uint16	Temp;
/*初始化系统*/
	InitSysCtrl();

	/*关中断*/
	DINT;
	IER = 0x0000;
	IFR = 0x0000;
	Led_Flag = 0;

	/*初始化PIE*/
	InitPieCtrl();
 

  	/*初始化PIE中断矢量表*/
	InitPieVectTable();	

 
	/*初始化外设*/
    InitPeripherals();
    
   
   InitGpio();

	EALLOW;	
	PieVectTable.TXAINT = &SCITXINTA_ISR;
	PieVectTable.RXAINT = &SCIRXINTA_ISR;
	PieVectTable.TINT0 = &ISRTimer0;
	PieVectTable.TINT2 = &ISRTimer2;
	EDIS;   
    
	/*设置CPU*/
	ConfigCpuTimer(&CpuTimer0, 10, 1000000);
	ConfigCpuTimer(&CpuTimer2, 50, 1000000);
	//ConfigCpuTimer(&CpuTimer2, 50, 2000000);	
	StartCpuTimer0();
 StartCpuTimer2();
	PieCtrl.PIEIER1.bit.INTx7=1;
    /*开中断*/
//	IER |= M_INT14|M_INT9;
  InitSci();
IER |= M_INT1;
IER |= M_INT14;
	IER |=M_INT9;
	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM

	*LedReg = 0xFF;
	*Led8Lock = 0xB7;
	SendData(0xFF);
//	lcd_init();
//	clearscr1();
//	clearscr2();
//	clearscr3();
//	Smenu();
	
//	for(;;);






	/*初始化系统*/
//	InitSysCtrl();

	/*关中断*/
//	DINT;
//	IER = 0x0000;
//	IFR = 0x0000;

	/*初始化PIE中断*/
//	InitPieCtrl();

	/*初始化PIE中断矢量表*/
//	InitPieVectTable();	
	
	/*初始化SCIA寄存器*/
  //  InitSci();
    
    
    for(i = 0; i < 100; i++)
    {
   	Sci_VarRx[i] = 0;
    }
    i = 0;
    j = 0;
    Send_Flag = 0;
    
 
	
//	InitAdc();

    // Enable INT14 which is connected to CPU-Timer 2:
//	IER |= M_INT1;
		
//	EALLOW;	
//	PieVectTable.TINT2 = &ISRTimer2;
//	PieVectTable.ADCINT=&ad;
//	EDIS;   
    
	/*设置CPU*/
//	ConfigCpuTimer(&CpuTimer2, 50, 1000000);	
	//StartCpuTimer2();

    

    /*开中断*/
//IER |= M_INT14;

//	EINT;   // Enable Global interrupt INTM
//	ERTM;	// Enable Global realtime interrupt DBGM

//	*LedReg = 0xFF;
//	*Led8Lock = 0xB7;
//	SendData(0xFF);
//	*LedReg = 0xAA;
//		for(;;);	
//		while(AdcRegs.ADC_ST_FLAG.bit.SEQ1_BSY==0)
//		{			
//
//			AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
//
//		}
		for(mn=0;mn<7;mn++){
		PieCtrl.PIEACK.bit.ACK7=1;
		*LedReg = LedCode[mn];	
		wait(1024);
		}
	
		for(;;)
	{
	
    //   	Temp = ScanKey();
	//		KeyFunction(Temp);
		if((SciaTx_Ready() == 1) && (Send_Flag == 1))
		{
			SciaRegs.SCITXBUF = Sci_VarRx[i];
			Send_Flag = 0;
			i++;
			if(i == j)
			{
				i = 0;
				j = 0;
			}
		}
		
		
/*		#if !SCIA_INT
	if(SciaRx_Ready() == 1)
		{
			Sci_VarRx[j] = SciaRegs.SCIRXBUF.all;
			Send_Flag = 1;
			j++;
			if(j == 100)
			{
				j = 0;
			}
		}
		
		
		#endif*/
      Temp = KeyReg;
      Temp =  Temp & 0xff;
		if(Temp!=0xff) KeyFunction(Temp);
	}
	
	   	
	
} 	


interrupt void ISRTimer0(void)
{

	PieCtrl.PIEACK.bit.ACK7=1;
	*LedReg = LedCode[LedCount];
	LedCount++;
	if (LedCount>8)	LedCount=0;
}

interrupt void ISRTimer2(void)
{
	SendData(SpiCode[SpiCount]);
	SpiCount++; 
	if (SpiCount>16)	SpiCount=0;
}

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;		
}		





/*

interrupt void ISRTimer2(void)
{
	CpuTimer2.InterruptCount++;
	if(Led_Flag == 1)
	{
		*LedReg = 0xAA;
		Led_Flag = 0;
	}
	else
	{
		*LedReg = 0x55;
		Led_Flag = 1;
	}
}

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;
			SetClk;
		}
	*Led8Lock = 0xB7;
	*Led8Lock = 0xBF;
	SetData;		
}
*/
interrupt void ad(void)
{
	IFR=0x0000;
//	PieCtrl.PIEIFR1.all = 0;
	PieCtrl.PIEACK.all=0xffff;
	a2++;
	a1[0]=((float)AdcRegs.RESULT0)*3.0/65520.0+adclo;
	a1[1]=((float)AdcRegs.RESULT1)*3.0/65520.0+adclo;
	a1[2]=((float)AdcRegs.RESULT2)*3.0/65520.0+adclo;
	a1[3]=((float)AdcRegs.RESULT3)*3.0/65520.0+adclo;
	a1[4]=((float)AdcRegs.RESULT4)*3.0/65520.0+adclo;
	a1[5]=((float)AdcRegs.RESULT5)*3.0/65520.0+adclo;
	a1[6]=((float)AdcRegs.RESULT6)*3.0/65520.0+adclo;
	a1[7]=((float)AdcRegs.RESULT7)*3.0/65520.0+adclo;
	a1[8]=((float)AdcRegs.RESULT8)*3.0/65520.0+adclo;
	a1[9]=((float)AdcRegs.RESULT9)*3.0/65520.0+adclo;
	a1[10]=((float)AdcRegs.RESULT10)*3.0/65520.0+adclo;
	a1[11]=((float)AdcRegs.RESULT11)*3.0/65520.0+adclo;
	a1[12]=((float)AdcRegs.RESULT12)*3.0/65520.0+adclo;
	a1[13]=((float)AdcRegs.RESULT13)*3.0/65520.0+adclo;
	a1[14]=((float)AdcRegs.RESULT14)*3.0/65520.0+adclo;
	a1[15]=((float)AdcRegs.RESULT15)*3.0/65520.0+adclo;
	AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
	AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
	EINT;
	
}



void wait(int nWait)
{
	int di,dj,dk=0;
	for ( di=0;di<nWait;di++ )
		for ( dj=0;dj<64;dj++ )
			dk++;
}                							
 
//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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