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

📄 sci1.c

📁 TMS28016的串口通讯SCI进行收发实验
💻 C
字号:
#include "DSP280x_Device.h" 
#include "DSP280x_Examples.h" 
//#define CPU_RATE 6.000L

#include<stdio.h>
//Uint16 ReceivedAChar;
unsigned int Sci_VarRx[8];

unsigned int Send_Flag;
int i,j;
static  char table[]={ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };


/**********微妙延时**********/
void delay_us(int time)
{    
         do   
        {
                 time--;
         }        
         while(time>1);
}

/**********毫秒延时**********/
void delay_ms(unsigned int time)
{
         while(time!=0)
        {
                 delay_us(750);
              time--;
        }
}
/**********系统初始化**********/
void sys_init(void)
{    
    asm(" setc        SXM");                               // 抑制符号位扩展
        asm(" clrc        OVM");                          // 累加器中结果正常溢出
        asm(" clrc        CNF");                        // B0被配置为数据存储空间
        asm(" clrc        INTM");        
        
        SysCtrlRegs.SCSR=0x83FE;             // 系统时钟CLKOUT=20*2=40M 
        SysCtrlRegs.WDCR=0x006F;            // 禁止看门狗,看门狗时钟64分频  
        SysCtrlRegs.WDKEY=0x5555;
        SysCtrlRegs.WDKEY=0xAAAA;               // 初始化看门狗 
        IER=0x0000;                                 // 禁止所有中断
        IFR=0x0000; 
        SciaRegs.SCICTL1.all=0X20| SciaRegs.SCICTL1.all; 
                                                 // 清除全部中断标志,"写1清0"
}

/**********SCI初始化**********/
void sci_init(void)
{     SciaRegs.SCIFFTX.all=0x8000;
      SciaRegs.SCICCR.all =0x0007;                    // 数据8位
      SciaRegs.SCIHBAUD =0x01;                      // BAUD 9600,CLKOUT=30M
      SciaRegs.SCILBAUD =0x86;
      SciaRegs.SCICTL1.all =0x0003;                    // 收发使能
	  SciaRegs.SCICTL2.all =0x0003; 
	  SciaRegs.SCICTL2.bit.TXINTENA =1;
	SciaRegs.SCICTL2.bit.RXBKINTENA =1;
 SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset
      SciaRegs.SCIFFTX.all=0xE040;
    SciaRegs.SCIFFRX.all=0x204f;
    SciaRegs.SCIFFCT.all=0x0;
    	PieCtrl.PIEIER9.bit.INTx1 = 1;
    	PieCtrl.PIEIER9.bit.INTx2 = 1; 
    
   for(i = 0; i < 8; i++)
    {
    	Sci_VarRx[i] = 0;
    }
       i = 0;
       j = 0;
    Send_Flag = 0;

     #if SCIA_INT
	/*设置中断服务程序入口地址*/
	EALLOW;	// This is needed to write to EALLOW protected registers
	PieVectTable.TXAINT = &SCITXINTA_ISR;
	PieVectTable.RXAINT = &SCIRXINTA_ISR;
	EDIS;   // This is needed to disable write to EALLOW protected registers

	/*开中断*/
	IER |= M_INT9;
	#endif
	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM    
       // SciaRegs.SCITXBUF=0;
     //   MCRA=0X03;                          // 使能SCI

}

void   UartSent()                  //发送服务程序

{  
       for(;;)
 { 
   if(SciaRegs.SCICTL2.bit.RXRDY==1)&&(Send_Flag==1)
    
     SciaRegs.SCITXBUF= table[i];

    	Send_Flag = 0;
             i++;
			if(i == j)
			{
				i = 0;
				j = 0;
   }
   }
}

void   UartRec()                          //接收服务程序

{  for(;;)

  {	#if !SCIA_INT
   if(SciaRegs.SCIRXST.bit.TXREDY==1);
	{
			Sci_VarRx[j] = SciaRegs.SCIRXBUF.all;
			Send_Flag = 1;
			j++;
	
         if(j == 18)
			{
				j = 0;
			}
	 }
    #endif
}
}
main()                                   
{  
     
 	  InitSysCtrl();
	  DINT;
      IER = 0x0000;
	  IFR = 0x0000;

      InitSciaGpio();
	  DINT;
	  InitPieCtrl();
      InitPieVectTable();
      
      sys_init();
      sci_init();
      UartSent();
      UartRec();
	  delay_ms(200);
        
}        

⌨️ 快捷键说明

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