用dsp28335的spi去读写EEPROM(FM25L256),读出的数据全是0xFF
在用28335的spi外设去读写EEPROM,无论是模拟SPI的CS还是用现成模块的,读出的数据全是0xFF,调了好几天了,请大虾们帮忙看看。。
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
#include "DSP2833x_Examples.h"
//EEPROM的po-code定义
#define WREN 0x06
#define WRITE 0x02
#define READ 0x03
#define RDSR 0x05
#define EEPROM_CS GpioDataRegs.GPADAT.bit.GPIO19
//相关函数的声明
void spi_init(void);
void spi_xmit(int a);
//发送与结束的变量
Uint16 Ret_var1=0;
Uint16 Ret_var2=0;
/*****************************************SPI初始化函数********************************************************/
void spi_init(void)
{
SpiaRegs.SPICCR.all=0x0007; //SPI复位,设置时钟为上升沿,8位字符长度
SpiaRegs.SPICTL.all=0x0006; // 使能主模式,标准相位
// 使能Talk,SPIINT屏蔽
SpiaRegs.SPIBRR=0x00024; //设置波特率
SpiaRegs.SPICCR.all=0x0087; //使SPI退出复位状态
//使能自测试模式
SpiaRegs.SPIPRI.bit.FREE = 1;
}
/*****************************************EEPROM的写函数*******************************************************/
void EEPROM_WRITE(Uint16 address,int Data)
{
int addrH,addrL;
addrH = 0;
addrL = 0;
addrH = (address>>8);
addrL = (address&0x00FF);
EEPROM_CS = 0;
DELAY_US(1);
spi_xmit(WREN); //写使能
EEPROM_CS = 1;
DELAY_US(1);
EEPROM_CS = 0;
DELAY_US(1);
spi_xmit(WRITE); //写入WRITE命令
spi_xmit(addrH); //写入高字节地址
spi_xmit(addrL); //写入低字节地址
spi_xmit(Data);
DELAY_US(1);
EEPROM_CS = 1;
DELAY_US(10);
}
/********************************************发送数据函数*******************************************/
void spi_xmit(int a)
{
SpiaRegs.SPITXBUF = (a<<8);
while(SpiaRegs.SPISTS.bit.INT_FLAG == 0);
Ret_var1 = SpiaRegs.SPIRXBUF<<8;
}
/*******************************************读EEPROM函数*******************************************/
void EEPROM_READ(Uint16 address)
{
int addrH,addrL;
addrH = 0;
addrL = 0;
addrH = (address>>8);
addrL = (address&0x00FF);
EEPROM_CS = 0;
DELAY_US(1);
spi_xmit(READ);
spi_xmit(addrH);
spi_xmit(addrL);
spi_xmit(0);
DELAY_US(1);
EEPROM_CS = 1;
DELAY_US(100);
}
/**********************************************读取状态寄存器函数*************************************/
void STA_READ()
{
EEPROM_CS = 0;
DELAY_US(1);
spi_xmit(RDSR);
EEPROM_CS = 1;
DELAY_US(100);
}
/************************************************主函数********************************************/
void main()
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER=0x0000;
IFR=0x0000;
InitPieVectTable();
InitSpiaGpio();
spi_init();
EEPROM_CS = 1;
STA_READ();
EEPROM_WRITE(0,0xAAAA);
DELAY_US(100);
EEPROM_READ(0);
} |