TA的每日心情 | 开心 2013-5-12 09:23 |
---|
签到天数: 64 天 连续签到: 1 天 [LV.6]常住居民II
|
本帖最后由 洛川子 于 2013-2-26 12:39 编辑
首先说明下。。用MSP430F2618对一个flash存储器进行读写,但是一直没有结果。。
我的想法是:要想知道读写是不是成功只需要将一串数字先写入flash存储器,如果可以在那个位置读取出来的话就说明写操作和读操作都是争取的。
但是不管我怎么读写读出来的都是0或者说是空。
附上代码
/**********************************************
初始化
***********************************************/
void Spi_Init()
{
UCB0CTL1 = UCSWRST;//使能
UCB0CTL0 |= UCMSB + UCMST + UCMODE_0+ UCSYNC + UCCKPL;
UCB0CTL0 &= ~UC7BIT;//8位
//UCB0CTL0 |= UCMSB + UCMST + UCSYNC + UCCKPL;
//UCMSB 起始选择 MSB开始
//UCMST 主机模式
//UCMODE_0 3线SPI(SCLK,SIMO,SOMI)
//UCSYNC 选择了spi模式
//UCCKPL 选择时钟极性
UCB0CTL1 |= UCSSEL_2; //SMCLK
UCB0BR0 =0xe2;
UCB0BR1 =0x04; //9600
P3SEL = 0x0e;
UCB0CTL1 &= ~UCSWRST; //模块使能
}
/**********************************************
函数功能:写data
函数参数:uchar Data
***********************************************/
void Write_Data(uchar Data)
{
UCB0TXBUF = Data;
while(!(IFG2&UCB0TXIFG));
}
/**********************************************
函数功能:等待不忙
函数参数:
//读取状态寄存器
//bit7 bit6 bit6 bit6 bit6 bit6 bit6 bit6
//RDY/BUSY COMP 1 0 1 1 PROTECT PAGE SIZE
If bit 7 is a 1, then the device is
not busy and is ready to accept the next command
***********************************************/
void Until_Ready()//这里没有跳出循环
{
uchar x=0x00;
while(!(x&0x10))
{
AT45_CS_0;
Write_Data(0xd7);
x = UCB0RXBUF;
AT45_CS_1;
}
}
/**********************************************
函数功能:写Buffer
函数参数:uchar Buffer_Num 选择写的是那个缓存区
int Buffer_Addr 在缓存区的那个位置写
char* Buffer_Data 写的数据
int size 存放的数据有多少个
***********************************************/
void Write_Buffer(uchar Buffer_Num,int Buffer_Addr,char* Buffer_Data,int size)
{
char Choose_Buffer_Num;
int i;
AT45_CS_0;
Until_Ready();
if(Buffer_Num)//如果Buffer_Num为0,选择缓存区1
Choose_Buffer_Num = 0x87;//缓存区2
else
Choose_Buffer_Num = 0x84;//缓存区1
Write_Data(Choose_Buffer_Num);
Write_Data(Buffer_Addr >> 16);
Delay(Flash_Delay);
Write_Data(Buffer_Addr >> 8);
Delay(Flash_Delay);
Write_Data(Buffer_Addr >> 0);
Delay(Flash_Delay);
for(i=0;i<SIZE;i++)
{
UCB0TXBUF = Buffer_Data;
}
Until_Ready();
AT45_CS_1;
}
/**********************************************
函数功能:读Buffer的内容
函数参数:uchar Buffer_Num 选择写的是那个缓存区
int Page_Addr 开始读缓存区的地址
char* Buffer_Data 存放读出的数据
int size 数据的个数
***********************************************/
void Read_Buffer(uchar Buffer_Num,int Buffer_Addr,char* Buffer_Data,int size)
{
char Choose_Buffer_Num;
int i;
AT45_CS_0;
Until_Ready();
if(Buffer_Num)//如果Buffer_Num为0,选择缓存区1
Choose_Buffer_Num = 0xd6;//缓存区2
else
Choose_Buffer_Num = 0xd4;//缓存区1
Write_Data(Choose_Buffer_Num);
Write_Data(Buffer_Addr >> 16);
Delay(Flash_Delay);
Write_Data(Buffer_Addr >> 8);
Delay(Flash_Delay);
Write_Data(Buffer_Addr >> 0);
Delay(Flash_Delay);
for(i=0;i<SIZE;i++)
{
Buffer_Data = UCB0RXBUF;
}
Until_Ready();
AT45_CS_1;
}
主函数就是直接调用读写函数,但是输出的不对,求教各位大神吧。
真诚要求各位大神指教
|
|