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

📄 dsp281x_spi.c

📁 一个DSP2812的源代码
💻 C
字号:
//###########################################################################
//
// FILE:   DSP281x_Spi.c
//
// TITLE:  DSP281x SPI Initialization & Support Functions.
//
//###########################################################################
//
//  Ver | dd mmm yyyy | Who  | Description of changes
// =====|=============|======|===============================================
//  1.00| 11 Sep 2003 | L.H. | No change since previous version (v.58 Alpha)
//###########################################################################

#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
#include "FM25L512.h"
//---------------------------------------------------------------------------
// InitSPI: 
//---------------------------------------------------------------------------
// This function initializes the SPI(s) to a known state.
//

Uint16   tab[] = {0,1,2,3,4,5,6,7,8,9};

void InitSpi(void)
{
   // Initialize SPI-A:
	SpiaRegs.SPICCR.all =0x0047;	             // Reset on, rising edge, 8-bit char bits  
	SpiaRegs.SPICTL.all =0x000E;    		     // Enable master mode, normal phase,
                                                 // enable talk, and SPI int disabled.
	SpiaRegs.SPIBRR =0x0042;	                 //BOUD = 500k					
    SpiaRegs.SPICCR.all =0x0087;		         // Relinquish SPI from Reset   
    SpiaRegs.SPIPRI.bit.FREE = 1;                // Set so breakpoints don't disturb xmission
// Initialize SPI FIFO registers
    SpiaRegs.SPIFFTX.all=0xE040;
    SpiaRegs.SPIFFRX.all=0x204f;
    SpiaRegs.SPIFFCT.all=0x0;

   //tbd...

}

void spi_sent(Uint16 a)
{
    while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1){FEED_WATCHDOG;}
    SpiaRegs.SPITXBUF=a;
} 

Uint16  spi_receive(void)
{

    Uint16  TempData;
    while(SpiaRegs.SPIFFRX.bit.RXFFST != 1) {FEED_WATCHDOG; } 			
    TempData = SpiaRegs.SPIRXBUF;
	//TempData = SpiaRegs.SPIDAT;
//	SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1;
    
    return  TempData;	
}    
   
Uint16	bcd2decimal(Uint16 dat)
{
    Uint16 temp;
	  temp = tab[(dat & 0x00FF)>>4];
      temp = temp * 10;
      temp = temp + tab[dat & 0x000F];

	  return  temp;

}

void  SPI1_WriteByte(Uint16 Data)        //往FRAM中写入一个字节
{
    int  i;
   // delay_loop(10);
    for(i=0;i<8;i++)
    {
       
        if((Data<<i) & 0x80)
            SPISIMO=1;
        else
            SPISIMO=0; 
        SCK1_H;
        delay_loop(10);
        SCK1_L;
		delay_loop(10);

    }
    
}

unsigned int  SPI1_ReadByte()        //读取FRAM中的一个字节
{
    unsigned int  i;
    unsigned int  temp_buffer=0;

    for(i=0;i<8;i++)
    {
       
        temp_buffer<<=1;
        if(SPISOMI)
            temp_buffer+=1;
         SCK1_H;
         delay_loop(10);
         SCK1_L;
         delay_loop(10);
    }

    return temp_buffer;
}

unsigned int DS1390_Write(Uint16 Addr,Uint16 Length,Uint16 *Data)        //往FRAM中写入数据
{
    unsigned int i;
    SCK1_L;
	CS1_L;
    SPI1_WriteByte(Addr);                   // high 8 bits address
    for(i=0;i<Length;i++)
    {
        SPI1_WriteByte(*Data);
        Data++;
    }
    SCK1_L;
    CS1_H;
    return 0;
}

unsigned int DS1390_Read(Uint16 Addr,Uint16 Length,Uint16 *Data)        //读FRAM中的信息
{
    unsigned int i;
    SCK1_L;
    CS1_H;
    CS1_L;    
    SPI1_WriteByte(Addr);                   // high 8 bits address
    for(i=0;i<Length;i++)
    {
        *Data = SPI1_ReadByte();
        Data++;
    }
    CS1_H;
    SCK1_L;
    return 0;
}
//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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