请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28377S 工具/软件:Code Composer Studio
你(们)好
我将 TMS320F28377S 与外部闪存 SST26VF064B-104V/SM 搭配使用、并且 ID 读取出现问题。
读取过程如下所示:
-主机发送0x9F 以开始读取 ID
主器件发送虚拟字节
—Salve 发送三个 ID 字节
-主读取 ID 字节。
我有一个问题,读数程序应该是什么样的?
在哪里我可以写入0x9F 和虚拟字节? SPITxBUF 或 SPIDAT?
我附加了我的代码、但它不起作用。
在 SPITXBUF 中、SPIRXBUF 和 SPIDAT I 始终具有0xFFFF。
感谢你的帮助
此致
Szymon
#include "F28x_Project.h"
void delay1_loop (void);
void SPI_xmit (uint16 a);
void SPI_fifo_init (void);
void InitMySpi (void);
void InitSpiGpioMy ();
UINT16 Flash_SpiTransmit (UINT16数据)
{
uint16 i = 0;
对于(I = 0;I < 2;+I)
ASM (" NOP");
SpiaRegs.SPITXBUF =数据;
对于(I = 0;I < 2;+I)
ASM (" NOP");
返回(UINT16) SpiaRegs.SPITXBUF;
}
UINT16 Flash_SpiReceive (UINT16 DataToTransmit)
{
uint16 i = 0;
对于(I = 0;I < 2;+I)
ASM (" NOP");
SpiaRegs.SPIDAT = DataToTransmit;
对于(I = 0;I < 2;+I)
ASM (" NOP");
返回(UINT16) SpiaRegs.SPITXBUF;
}
UINT16 Tab[3];
UINT16 statusRegister;
UINT16 configRegister;
UINT16 tabConfig[2];
UINT16 dataSend[256];
UINT16数据接收器[256];
void FlashReadJedec (void)
{
uint16 i = 0;
EALLOW;
GpioDataRegs.GPACLEAR.bit.GPIO12=1;/CS na 0
EDIS;
ASM (" NOP");
对于(I = 0;I < 100;+I)
ASM (" NOP");
Flash_SpiTransmit (0x9F);//命令读取 JEDEC
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
Flash_SpiReceive (0x00);
TAB[0]= SpiaRegs.SPIRXBUF;
TAB[1]= SpiaRegs.SPIRXBUF;
TAB[2]= SpiaRegs.SPIRXBUF;
对于(I = 0;I < 100;+I)
ASM (" NOP");
EALLOW;
GpioDataRegs.GPASET.bit.GPIO12=1;/CS na 1.
EDIS;
}
void main (void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// InitSpiaGpio();
InitSpiGpioMy();
InitMySpi();
SPI_Fifo_init();
while (1)
{
FlashReadJedec;
uint16 a = tab[0];
uint16 b = tab[1];
uint16 c = tab[2];
}
void spi_fifo_init ()
{
SpiaRegs.SPIFFTX.ALL = 0xE040;
SpiaRegs.SPIFFRX.ALL = 0x2044;
SpiaRegs.SPIFFCT.all = 0x0;
}
void InitMySpi (void)
{
SpiaRegs.SPICCR.bit.SPISWRESET = 0;
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICCR.bit.SPICHAR =(16-1);
SpiaRegs.SPICCR.bit.SPILBK = 0;
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICTL.bit.TALK = 1;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;
SpiaRegs.SPICTL.bit.SPIINTENA=0;
//设置波特率
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = 99;
SpiaRegs.SPIPRI.bit.FREE = 1;
SpiaRegs.SPICCR.bit.SPISWRESET = 1;
}
void InitSpiGpioMy ()
{
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//(SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//(SPISOMIA)
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//(SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//(SPISIMOA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//(SPISOMIA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//(SPICLKA)
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;// SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;// SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;// SPICLKA
GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;// SPISIMOA
GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;// SPISOMIA
GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;// SPICLKA
GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;
GpioCtrlRegs.GPADIR.bit.GPIO12 = 1;// CS
GpioDataRegs.GPASET.bit.GPIO12=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO13=0;
GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;// WP
GpioDataRegs.GPASET.bit.GPIO13 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO14=0;
GpioCtrlRegs.GPADIR.bit.GPIO14 = 1;//保持
GpioDataRegs.GPASET.bit.GPIO14=1;
EDIS;
}



