fm25cl64 linux,FM25CL64铁电存储器的问题

用SPI读FM25CL64铁电存储器状态,为什么收到的都是发送数据。

比如发送0x05,收到的也是0x05,

另:没有将SPI设置成内部连接

#define RDSR  0x05

Uint16 FM25CL64_Read(Uint16 address);

void FM25CL64_Write_Enable(void);

void FM25CL64_Write(Uint16 address,Uint16 data);

Uint8 FM25CL64_Read_Status();

Uint16 SpiWrite(Uint16 data);

Uint16 Spi_TxReady(void);

Uint16 Spi_RxReady(void);

//函数:Init_Spi_GPIO

//变量:无

//返回值:无

//功能:设置GPIO口B组54-57

void Init_Spi_GPIO(void)

{

EALLOW;

//SPISIMOA端口设置

GpioCtrlRegs.GPBMUX2.bit.GPIO54=1;

GpioCtrlRegs.GPBQSEL2.bit.GPIO54=3;

//SPISOMOIA端口设置

GpioCtrlRegs.GPBMUX2.bit.GPIO55=1;

GpioCtrlRegs.GPBQSEL2.bit.GPIO55=3;

//SPICLKA端口设置

GpioCtrlRegs.GPBMUX2.bit.GPIO56=1;

GpioCtrlRegs.GPBQSEL2.bit.GPIO56=3;

//SPISTEA端口设置

GpioCtrlRegs.GPBMUX2.bit.GPIO57=0;

GpioCtrlRegs.GPBDIR.bit.GPIO57=1;

EDIS;

}

//函数:InitSpi

//变量:无

//返回值:无

//功能:对SPI模块进行初始化

void InitSpi(void)

{

// Initialize SPI-A:

SpiaRegs.SPICCR.all=0x0007;//SPI软件复位

SpiaRegs.SPICTL.all=0x0006;       //Interrupt disabled

//SpiaRegs.SPISTS.all=0x0000;

SpiaRegs.SPIBRR =9;           // Baud rate  30Mhz /(9 + 1) = 3MHz

SpiaRegs.SPIPRI.all = 0x30; // free run

SpiaRegs.SPICCR.all=0x0087;//使SPI退出复位状态

SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;

SpiaRegs.SPICTL.bit.CLK_PHASE   = 0;//选择0模式

//tbd...

}

Uint8 FM25CL64_Read_Status()

{

Uint8 status;

GpioDataRegs.GPBCLEAR.bit.GPIO57 = 1;//使能

SpiWrite(RDSR);

status= SpiWrite(0xFF);

GpioDataRegs.GPBSET.bit.GPIO57 = 1;//关闭使能

//判断SPI发送准备好

return status;

}

/函数:SpiWrite

//变量:Uint16 data,SPI传输的数据

//返回值:无

//功能:实现SPI传输数据的功能

Uint16 SpiWrite(Uint16 data)

{

Uint8 ret;

SpiaRegs.SPITXBUF = data;

while(Spi_RxReady() == 0);

ret = SpiaRegs.SPIRXBUF>>8;

DELAY_US(10);

return ret;

}

//函数:Spi_TxReady

//变量:无

//返回值:无

//功能:描述SPI具备发送的条件

Uint16 Spi_TxReady(void)

{

Uint16 in;

if(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1)

{

in = 0;

}

else

{

in = 1;

}

return(in);

}

//函数:Spi_RxReady

//变量:无

//返回值:无

//功能:描述SPI具备发送的条件

Uint16 Spi_RxReady(void)

{

Uint16 im;

if(SpiaRegs.SPISTS.bit.INT_FLAG == 1)

{

im = 1;

}

else

{

im = 0;

}

return(im);

}

void main(void)

{

//int i,j,k;

Init_Spi_GPIO();

InitSpi();

while(1)

{       FM25CL64_Read_Status();

}

}

此帖出自小平头技术问答

用SPI读FM25CL64铁电存储器状态,为什么收到的都是发送数据。

比如发送0x05,收到的也是0x05,

另:没有将SPI设置成内部连接

#define RDSR  0x05

Uint16 FM25CL64_Read(Uint16 address);

void FM25CL64_Write_Enable(void);

void FM25CL64_Write(Uint16 address,Uint16 data);

Uint8 FM25CL64_Read_Status();

Uint16 SpiWrite(Uint16 data);

Uint16 Spi_TxReady(void);

Uint16 Spi_RxReady(void);

//函数:Init_Spi_GPIO

//变量:无

//返回值:无

//功能:设置GPIO口B组54-57

void Init_Spi_GPIO(void)

{

EALLOW;

//SPISIMOA端口设置

GpioCtrlRegs.GPBMUX2.bit.GPIO54=1;

GpioCtrlRegs.GPBQSEL2.bit.GPIO54=3;

//SPISOMOIA端口设置

GpioCtrlRegs.GPBMUX2.bit.GPIO55=1;

GpioCtrlRegs.GPBQSEL2.bit.GPIO55=3;

//SPICLKA端口设置

GpioCtrlRegs.GPBMUX2.bit.GPIO56=1;

GpioCtrlRegs.GPBQSEL2.bit.GPIO56=3;

//SPISTEA端口设置

GpioCtrlRegs.GPBMUX2.bit.GPIO57=0;

GpioCtrlRegs.GPBDIR.bit.GPIO57=1;

EDIS;

}

//函数:InitSpi

//变量:无

//返回值:无

//功能:对SPI模块进行初始化

void InitSpi(void)

{

// Initialize SPI-A:

SpiaRegs.SPICCR.all=0x0007;//SPI软件复位

SpiaRegs.SPICTL.all=0x0006;       //Interrupt disabled

//SpiaRegs.SPISTS.all=0x0000;

SpiaRegs.SPIBRR =9;           // Baud rate  30Mhz /(9 + 1) = 3MHz

SpiaRegs.SPIPRI.all = 0x30; // free run

SpiaRegs.SPICCR.all=0x0087;//使SPI退出复位状态

SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;

SpiaRegs.SPICTL.bit.CLK_PHASE   = 0;//选择0模式

//tbd...

}

Uint8 FM25CL64_Read_Status()

{

Uint8 status;

GpioDataRegs.GPBCLEAR.bit.GPIO57 = 1;//使能

SpiWrite(RDSR);

status= SpiWrite(0xFF);

GpioDataRegs.GPBSET.bit.GPIO57 = 1;//关闭使能

//判断SPI发送准备好

return status;

}

/函数:SpiWrite

//变量:Uint16 data,SPI传输的数据

//返回值:无

//功能:实现SPI传输数据的功能

Uint16 SpiWrite(Uint16 data)

{

Uint8 ret;

SpiaRegs.SPITXBUF = data;

while(Spi_RxReady() == 0);

ret = SpiaRegs.SPIRXBUF>>8;

DELAY_US(10);

return ret;

}

//函数:Spi_TxReady

//变量:无

//返回值:无

//功能:描述SPI具备发送的条件

Uint16 Spi_TxReady(void)

{

Uint16 in;

if(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1)

{

in = 0;

}

else

{

in = 1;

}

return(in);

}

//函数:Spi_RxReady

//变量:无

//返回值:无

//功能:描述SPI具备发送的条件

Uint16 Spi_RxReady(void)

{

Uint16 im;

if(SpiaRegs.SPISTS.bit.INT_FLAG == 1)

{

im = 1;

}

else

{

im = 0;

}

return(im);

}

void main(void)

{

//int i,j,k;

Init_Spi_GPIO();

InitSpi();

while(1)

{       FM25CL64_Read_Status();

}

}

此帖出自小平头技术问答

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值