📄 dsp281x_spi.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 + -