/*
*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
一周热门 更多>