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

📄 spi.txt

📁 f2812 spi初始化及自测程序
💻 TXT
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File

#define SCI_IO   0x0030
//void delay_loop(void);
void spi_xmit(Uint16 a);
void spi_fifo_init(void);
void spi_init(void);
void error(void);
void Scib_init(void);
void Scib_xmit(int a);

void main(void)
{  Uint16 sdata;  // send data
   Uint16 rdata;  // received data

   InitSysCtrl();
   
   EALLOW;
   GpioMuxRegs.GPFMUX.all=0x000F;	// Select GPIOs to be SPI pins
   GpioMuxRegs.GPGMUX.all|=SCI_IO;      //SCIB口功能口	 
   EDIS;
   
   DINT;
   
   InitPieCtrl();
   
   IER = 0x0000;
   IFR = 0x0000;
   
   InitPieVectTable();
   
   PieCtrlRegs.PIECRTL.bit.ENPIE = 1;     // Enable the PIE block
   PieCtrlRegs.PIEIER9.bit.INTx3=1;       // PIE Group 9, INT3
   IER = 0x101;	// Enable CPU INT
   EINT;  
   ERTM;   // 允许DEBUG中段
   
   Scib_init();
   spi_fifo_init();	  // Initialize the Spi FIFO
   spi_init();		  // init SPI
   
   /*while(SpiaRegs.SPIFFRX.bit.RXFFST >0)			
     rdata = SpiaRegs.SPIRXBUF;	
   sdata = 0x0000;*/							
   for(;;)
   {   
     spi_xmit(0x01);
     while(SpiaRegs.SPIFFRX.bit.RXFFST ==0 ) { }		
     rdata = SpiaRegs.SPIRXBUF;				
     if(rdata != sdata) error();
     Scib_xmit(rdata);
   }
} 	
/*void delay_loop()
{
    long      i;
    for (i = 0; i < 1000000; i++) {}
}*/

void error(void)
{
    asm("     ESTOP0");						// Test failed!! Stop!
    for (;;);
}

void Scib_xmit(int a)
{
  ScibRegs.SCITXBUF=(a&0xff);             //发送数据缓冲寄存器
  while(ScibRegs.SCICTL2.bit.TXRDY!=1){}; //发送缓冲寄存器准备好标志位
}

void spi_xmit(Uint16 a)
{
    SpiaRegs.SPITXBUF=a;
    while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1) { }
}
    
void Scib_init(void)
{
	ScibRegs.SCIFFTX.all =0xE040;         //允许接收,使能FIFO,没有FIFO中断
                                         //清除TXFIFINT,
    ScibRegs.SCIFFRX.all =0x2021;         //使能FIFO接收,清除RXFFINT,16级FIFO
    ScibRegs.SCIFFCT.all =0x0000;         //禁止波特率校验
    ScibRegs.SCICCR.all  =0x0007;         //1个停止位,无校验,禁止自测试,
    									 //空闲地址模式,字长8位    									 																																										
   	ScibRegs.SCICTL1.all =0x0003;        //复位
	ScibRegs.SCICTL2.all =0x0003;  
    ScibRegs.SCIHBAUD    =0x0001;        //设定波特率9600bps
    ScibRegs.SCILBAUD    =0x00E7;        //设定波特率9600bps
	ScibRegs.SCICTL1.all =0x0023;        //退出RESET
}   

void spi_init()
{    
	SpiaRegs.SPICCR.all =0x000F;	             // 复位,上升沿有效,16位数据  
	SpiaRegs.SPICTL.all =0x0006;    		     // 主模式, 使能发送,SPI禁止中断
	SpiaRegs.SPIBRR =0x007F;                     // SPICLK=37.5M/(127+1)									
    SpiaRegs.SPICCR.all =0x008F;		         // 退出复位,禁止内部连接 
    SpiaRegs.SPIPRI.bit.SOFT = 1;                // 自由运行 
    SpiaRegs.SPIPRI.bit.FREE = 1;                // 自由运行 
}

void spi_fifo_init()										
{
    SpiaRegs.SPIFFTX.all=0xE040;
    SpiaRegs.SPIFFRX.all=0x204f;
    SpiaRegs.SPIFFCT.all=0x0;
}  

//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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