在线时间0 小时
UID94704
注册时间2008-3-4
NXP金币0
该用户从未签到
新手上路

- 积分
- 24
- 最后登录
- 1970-1-1
|
大家好。请问谁有用过fresscale单片机的SPI模块外接SPI系列的铁电存储器FRAM(FM25040A).
硬件上的连接。是接单片机的SPI模块。
PTE4(ss) 接 25040的/SS
PTE5(MISO) 接 25040的so
PTE6(MOSI) 接 25040的si
PTE7(SCK) 接 25040的sck
PTE8 (VSS)接 25040的vss
25040的/hold(保持管脚),/wp(写保护管脚),VDD都接到5V上。
我的程序想实现往FM25040A写数据,然后读数据。可是好像写不到数据那样,数据寄存器读不到任何数据。
请大家帮帮忙找找原因。感激不尽。
#include "Cpu.h"
/* Include shared modules, which are used for whole project */
#include " E_Types.h"
#include " E_Error.h"
#include " E_Const.h"
#include "IO_Map.h"
//fm25040的指令
#define WREN 0X06 //写允许指令
#define WRDI 0X04 //禁止写指令
#define RDSR 0x05 //写状态寄存器指令
#define WRSR 0X01 //读状态寄存器指令
#define READ 0x03 //写地址指令
#define WRITE 0X02 //读地址指令
#define maxaddr 0x0fff
#define minaddr 0
#define cs_low() (PTED_PTED4=0)
#define cs_high() (PTED_PTED4=1)
unsigned char i=0;
unsigned char rebuff1;
unsigned int k,d;
//==============================================================
//函数名:Init_SPI
//作者:KLY
//日期:2007-11-8 10:34
//功能:初始化SPI,波特率62.5KHZ//05,设置模式0,使能SPI (CPOL, CPHA=0,0)
//输入参数:无 250k//03
//返回值:无
//修改记录:无
//===============================================================
void SPI2_Init(void)
{
/* SPI1C1: SPIE=0,SPE=1,SPTIE=0,MSTR=1,CPOL=0,CPHA=0,SSOE=0,LSBFE=0 */
setReg8(SPI1C1, 0x50);
/* SPI1C2: ??=0,??=0,??=0,MODFEN=0,BIDIROE=0,??=0,SPISWAI=0,SPC0=0 */
setReg8(SPI1C2, 0x00); //双向模式
/* SPI1BR: ??=0,SPPR2=0,SPPR1=0,SPPR0=0,??=0,SPR2=1,SPR1=0,SPR0=1 */
setReg8(SPI1BR, 0x03);
PTED_PTED4=0; //初始值
PTEDD_PTEDD4=1;//设置为输出(片选管脚)
PTEPE_PTEPE4=1;//上拉
}
/***************************延时函数*******************************/
void delay(unsigned char t) {
unsigned char i,j;
for(i=0;i 8));//0;//发送写高8位地址
while(!SPI1S_SPTEF);
SPI1D=((unsigned char)(ADR));//0;//发送写低8位地址
while(!SPI1S_SPTEF);
SPI1D=DATA1; //写高8位数据
while(!SPI1S_SPTEF);
// rebuff1=SPI1D; //读高8位数据
// while(!SPI1S_SPRF);
cs_high();
}
/************************读数据函数*********************************/
void READDATA(unsigned int ADR)
{
cs_low();
SPI1D=READ; //FM25040A读指令
while(!SPI1S_SPTEF);
// SPI1D=ADR; //发送读地址
// while(!SPI1S_SPTEF);
SPI1D=((unsigned char)(ADR>> 8));//0;//发送写高8位地址
while(!SPI1S_SPTEF);
SPI1D=((unsigned char)(ADR));//0;//发送写低8位地址
while(!SPI1S_SPTEF);
while(SPI1S_SPRF);
rebuff1=SPI1D; //读8位数据
cs_high();
}
void main(void)
{
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
SPI2_Init(); //SPI初始化
cs_high();
for(k=0;k
|
|