DSP_TMS32F2812的串口操作


void scia_fifo_init(int ibaud)
{
   SciaRegs.SCICCR.all =0x0007;    // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
   SciaRegs.SCICTL1.all =0x0003;   // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
   SciaRegs.SCICTL2.bit.TXINTENA =1;
   SciaRegs.SCICTL2.bit.RXBKINTENA =1;
	

   if(ibaud==9600) 
   {
     SciaRegs.SCIHBAUD    =0x0001;//9600
     SciaRegs.SCILBAUD    =0x00e7;
   }
   
   if(ibaud==19200)
   {
      SciaRegs.SCIHBAUD    =0x0000;
      SciaRegs.SCILBAUD    =0x00f3;
   }
   
   if(ibaud==38400)
   {
      SciaRegs.SCIHBAUD    =0x0000;
      SciaRegs.SCILBAUD    =0x0079;
   }

   SciaRegs.SCICCR.bit.LOOPBKENA =0; // Enable loop back
   SciaRegs.SCIFFTX.all=0xC028;
   SciaRegs.SCIFFRX.all=0x0021;//
   SciaRegs.SCIFFCT.all=0x00;

   SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset
   SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
   SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}

unsigned char r232data[3]={0,0,0};
int int232cnt=0;

void scia_xmit(int a)
{   
    while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
    SciaRegs.SCITXBUF=a;

}

interrupt void sciaRxFifoIsr(void)
{

	   unsigned short ReceivedChar=SciaRegs.SCIRXBUF.all;	 // Read data
	   //
	r232data[int232cnt%3]=ReceivedChar;

	int232cnt++;

    if((r232data[0]==0X42)&&(r232data[1]==0X42)&&(int232cnt%3==0))
	{
	        //lslData = *(unsigned short*)(0x80000+0xb);//bit0 输出1的值,bit1 输出2的值
		    EALLOW;
			GpioMuxRegs.GPEMUX.bit.XNMI_XINT13_GPIOE2 = 0;  //   IO 输入 拉低
			GpioMuxRegs.GPEDIR.bit.GPIOE2 = 1;    	//B6输出
			GpioDataRegs.GPEDAT.bit.GPIOE2 = (r232data[2]&0x2)>>1;  
		//	GpioMuxRegs.GPBQUAL.all=0x0000;	// Input qualifier disabled
			EDIS;
			
			//
			EALLOW;
			GpioMuxRegs.GPBMUX.bit.T3PWM_GPIOB6=0;  //   IO 输入 拉低
			GpioMuxRegs.GPBDIR.bit.GPIOB6=1;    	//E2输出
			GpioDataRegs.GPBDAT.bit.GPIOB6 = r232data[2]&0x1;  
		//	GpioMuxRegs.GPBQUAL.all=0x0000;	// Input qualifier disabled
			EDIS;
			scia_xmit(0x41);
			scia_xmit(0x41);
	}

    
	SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;  // Clear Overflow flag
	SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; 	// Clear Interrupt flag
	PieCtrlRegs.PIEACK.all|=0x100;  	// Issue PIE ack
		
}
void main(void)
{		

	int ch=0;
	
	InitSysCtrl();//设置外部时钟和系统时钟
    /////////for sci-b////////////////////
       EALLOW;
	   GpioMuxRegs.GPFMUX.all=0x0030;	// Select GPIOs to be Scia pins
	                                    // Port F MUX - x000 0000 0011 0000
	 //  GpioMuxRegs.GPGMUX.all=0x0030;	// Select GPIOs to be Scib pins
	                                    // Port G MUX - x000 0000 0011 0000
	   EDIS;
    ///////////////////////////////////
	DINT;

	InitGpio();  // 2812原配,未改动

	InitPieCtrl();

	// Disable CPU interrupts and clear all CPU interrupt flags:
	IER = 0x0000;
	IFR = 0x0000;


	InitPieVectTable();
    EALLOW;  // This is needed to write to EALLOW protected registers
  //  PieVectTable.TINT0 = &cpu_timer0_isr;
    PieVectTable.RXAINT = &sciaRxFifoIsr;
    EDIS; 

	scia_fifo_init(9600); 
///*
	PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   // Enable the PIE block
	PieCtrlRegs.PIEIER9.bit.INTx1=1;     // PIE Group 9, INT1
	 //  PieCtrlRegs.PIEIER9.bit.INTx2=1;     // PIE Group 9, INT2
	 //  PieCtrlRegs.PIEIER9.bit.INTx3=1;     // PIE Group 9, INT3
	  // PieCtrlRegs.PIEIER9.bit.INTx4=1;     // PIE Group 9, INT4
	   IER |= 0x100;	// Enable CPU INT
	   EINT;
	   ERTM;	
	   //*/
	// 将中断处理函数和InitFlash函数拷贝到RAM中运行,FLASH中运行时MemCopy和InitFlash必须有效
	MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
	InitFlash();
   
	// 对外部器件初始化必需放在InitFlash后

	// 初始化timer0
//	InitCpuTimers();   	
 //  	ConfigCpuTimer(&CpuTimer0, 150, 0xffffffff);
   		
	// 初始化

	while (1)
	{
         ;
	}
	

	
} 	


posted @ 2016-09-30 09:10  毛毛虫的薄刻  阅读(380)  评论(0编辑  收藏  举报