pic32使用spi接口铁电存储器fm25v10的读写问题

2020-02-08 09:20发布

/*
*SPI接口铁电存储器FM25V10的PIC32MX775F512H驱动程序
*/
unsigned char temp = 0;
void SPI2_Init(void)
{
    SPI2BUF = 0x00;//
    SPI2STAT = 0x00;//清除SPI状态寄存器
    SPI2BRG = 3;//外围时钟总线40M,SPI时钟5M
    SPI2CON = 0x8120;//使能SPI主机模式,数据上升沿发送,SS由IO引脚控制
}
//写使能
void FM25_WriteEN(void)
{
    FM25_CS = 0;
    SPI2BUF = FM25CMD_WREN;
    while(SPI2STAT.SPITBE == 0);
    FM25_CS = 1;
}
//写禁用
void FM25_WriteDI(void)
{
    FM25_CS = 0;
    SPI2BUF = FM25CMD_WRDI;
    while(SPI2STAT.SPITBE == 0);
    FM25_CS = 1;
}
//读状态寄存器
unsigned char FM25_ReadStatus(void)
{
    unsigned char temp = 0;
    FM25_CS = 0;
    SPI2BUF = FM25CMD_RDSR;
    while(SPI2STAT.SPITBE == 0);
    SPI2BUF = 0xf0;
    while(SPI2STAT.SPITBE == 0);
    temp = SPI2BUF;
    FM25_CS = 1;
    return temp;   
}
void main(void)
{
    SysInit();//系统初始化,配置IO引脚,
              //SS为输出,初始化输出1
              //SDO,SCK为输出,初始化输出0;SDI为输入
    while(1)
   {
      temp = FM25_ReadStatus();
      Delay(300);//根据示波器测量,延时500us
      FM25_WriteEN();
      Delay(300);//根据示波器测量,延时500us
      temp = FM25_ReadStatus();
      Delay(300);//根据示波器测量,延时500us
      FM25_WriteDI();
      Delay(300);//根据示波器测量,延时500us
      temp = FM25_ReadStatus();
      Delay(300);
   }
}
问题描述:while(1)循环里只有temp = FM25_ReadStatus();时可以读出状态寄存器的值0x40。
但是如果加入写禁止或写允许的语句就有问题了。读到的数据始终为0.
//示波器现在只能测单路,所以没能测信号是否同步,单看CLK,CS,SDI,SDO倒是可以看到信号。
请朋友们帮忙看一下是哪里的问题。谢谢。
FM25V10芯片手册http://wenku.baidu.com/view/f005313083c4bb4cf7ecd1aa.html
PIC32 SPI部分的手册http://wenku.baidu.com/view/ca8af691daef5ef7ba0d3c7e.html
0条回答

一周热门 更多>