⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 EVM2407板卡上的测试程序源码
💻 C
字号:
#include    "f2407_c.h"
 
 
extern unsigned int test_x25650(void); 

void write_enable(void);
unsigned int read_x25650(unsigned int addr);
void write_x25650(unsigned int addr,unsigned int data);
void reset_cs(void);
void set_cs(void);
unsigned int wr_busy(void);
void write_status(void);
void spi_init(void);
 
 
 
void spi_init(void)
{
	unsigned int temp;
	*SPICCR=0x0007;
	*SPICTL=0x0006;
	*SPIBRR=0x007f;
	*SPICCR=*SPICCR|0x0080;
	*SPICCR=0xc7;
	*SPIPRI=0x0030;
	*SPITXBUF=0x5500;
	while((*SPISTS&0x0040)==0);
    temp=*SPIRXBUF;
	  write_enable();
	 write_status();
	
} 

void write_status(void)    /*wpen=1,BL0=BL1=0*/
{
	int temp;
	reset_cs();
	*SPITXBUF=0x0100;
	while((*SPISTS&0x0040)==0);
    temp=*SPIRXBUF;
	*SPITXBUF=0x8000;
	while((*SPISTS&0x0040)==0);
    temp=*SPIRXBUF;
	set_cs();
	while(wr_busy());
}

unsigned int wr_busy(void)
{
	 unsigned int temp;
	 reset_cs();
	 *SPITXBUF=0x0500; 
	 while((*SPISTS&0x0040)==0);
     temp=*SPIRXBUF;
     *SPITXBUF=0x0000;
     while((*SPISTS&0x0040)==0);
     set_cs();
     temp=*SPIRXBUF;
     temp=temp&0x0001;
     return(temp);
} 
	 
void set_cs(void)
{
	 *PCDATDIR=*PCDATDIR|0x0020;
}

void reset_cs(void)
{
	*PCDATDIR=*PCDATDIR&0xffdf;
}

void write_x25650(unsigned int addr,unsigned int data)
{
	 unsigned temp;
	 write_enable();
	 reset_cs();
	 *SPITXBUF=0x0200;
	 while((*SPISTS&0x0040)==0);
     temp=*SPIRXBUF;
	 *SPITXBUF=addr;
	 while((*SPISTS&0x0040)==0);
     temp=*SPIRXBUF;
     *SPITXBUF=(addr%0x100)*0x100;
	 while((*SPISTS&0x0040)==0);
     temp=*SPIRXBUF;
	 *SPITXBUF=data*0x100;
	 while((*SPISTS&0x0040)==0);
     temp=*SPIRXBUF;
	 set_cs();
	 while(wr_busy());
}
	 
unsigned int read_x25650(unsigned int addr)
{
	unsigned int temp;
	reset_cs();
	*SPITXBUF=0x0300;
	while((*SPISTS&0x0040)==0);
     temp=*SPIRXBUF;
	*SPITXBUF=addr;
	while((*SPISTS&0x0040)==0);
     temp=*SPIRXBUF;
     *SPITXBUF=(addr%0x100)*0x100;
	 while((*SPISTS&0x0040)==0);
     temp=*SPIRXBUF;
	*SPITXBUF=0;
	while((*SPISTS&0x0040)==0);
    temp=*SPIRXBUF;
    set_cs();
    return(temp&0x00ff);
}
		 
void write_enable(void)
{
	 int temp;
	 reset_cs();
	 *SPITXBUF=0x0600;
	 while((*SPISTS&0x0040)==0);
	 temp=*SPIRXBUF;
	 set_cs();
	 while(wr_busy());
}
	 
	 	
unsigned int test_x25650(void)
{
	unsigned int data_read;
	unsigned int address;
	spi_init();
	for(address=0;address<0x2000;address++)
	{
		write_x25650(address,0x55);
		data_read=read_x25650(address);
		if((address%256)<128)asm("	clrc  XF");
		else asm("	setc  XF");
		if(data_read!=0x55)
		{   
			asm("nop");
			return(0);
			
		} 
		/*write_x25650(address,0xff);*/
	}
	return(1);
}
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -