• 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)
    	{
             ;
    	}
    	
    
    	
    } 	


  • 相关阅读:
    操作系统实验报告-信号量的实现和应用
    操作系统实验报告-系统调用
    操作系统实验报告-熟悉实验环境
    Linux下JDK环境变量配置
    BATMAN.adv系列07 过度泛洪的遏制策略与网络重组
    BATMAN.adv系列06 协议栈结构
    BATMAN.adv系列05 数据结构分析
    BATMAN.adv系列04 TVLV包
    BATMAN.adv系列01:BATMAN.adv IV 概述
    Kudu、Hudi和Delta Lake的比较
  • 原文地址:https://www.cnblogs.com/mao0504/p/5937335.html
Copyright © 2020-2023  润新知