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

📄 spi.c

📁 Fujitsu 16bit mcu application, with ads8364.
💻 C
字号:
/*------------------------------------------------------------------------
This software includes some function about writing and reading serial EEPROM
via SIO.

Copyright 2002-2003,Xiaoquan Tang

File : spi.c
by Xiaoquan Tang
E-mail:xqtang@vip.sina.com
History:    
Date      Version              Author         Description 
3-5-03    1.0 initial version  Xiaoquan Tang
---------------------------------------------------------------------- */

#include "mb90540.h"

//Define EEPROM Op-code Command
#define WREN 0x06
#define WRDI 0x04
#define RDSR 0x05
#define WRSR 0x01
#define READ 0x03
#define WRITE 0x02
//Define EEPROM Chip Sclect Signal
#define CS25040 PDR9_P92

//Init CS
void InitCS(void)
{
//Set Port 92 to output
	DDR9_D92 = 1; 
//Set CS to invalid
	CS25040 = 1;
}

// init sio
void InitSio(void)
{
//Set CLK to 2M
	SMCS = 0x0207;
//Set Clock Division Rate to 4
	SCDCR =0x8c;
}

// SPI start
void StartSioSeq(void)
{
//start a synchron transfer
	SMCS_STOP = 0;
	SMCS_STRT = 1   ;
//wait until transmit is complete
	while(SMCS_BUSY == 1);
}

// SPI stop
void StopSioSeq(void)
{
	SMCS_STOP = 1;
	SMCS_STRT = 0;
	SMCS_BUSY = 0;
}

//Read 25040 Status Register
unsigned char Read25040Status()
{
	unsigned char SioBuffer;
	CS25040 = 0;
	SDR = RDSR;
	StartSioSeq();
	SDR = 0x00;
	StartSioSeq();
	SioBuffer = SDR;
	StopSioSeq();
	CS25040 = 1;
	return(SioBuffer);
}

// Write 25040 Status Register
void Write25040StaReg(unsigned char Data)
{
	CS25040 = 0;
	SDR = WRSR;
	StartSioSeq();
	SDR = Data;
	StartSioSeq();
	StopSioSeq();
	CS25040 = 1;
}


// Read Data from 25040
unsigned Read25040Data(unsigned char Highaddr,
					   unsigned Lowaddr)
// Highaddr--25040 Ninth address
// Lowaddr __25040 Low eight address 
// Return Read Data From 25040
{
	unsigned char Tem;
	if(Highaddr == 1)
		Tem = READ|0x08;
	else
		Tem = READ;
	CS25040 = 0;
	SDR = Tem;
	StartSioSeq();
	SDR = Lowaddr;
	StartSioSeq();
	SDR = 0x00;
	StartSioSeq();
	Tem = SDR;
	StopSioSeq();
	CS25040 = 1;
	return(Tem);
}

// Write Data to 25040
void Write25040Data(unsigned char Highaddr,
					unsigned char Lowaddr,
					unsigned char Data)
// Highaddr--25040 Ninth address
// Lowaddr --25040 Low eight address 
// Data    --Write Data to 25040 
{
	unsigned char Tem;
	
	CS25040 = 0;
	SDR = WREN;
	StartSioSeq();
	CS25040 = 1;
	
	if(Highaddr == 1)
		Tem = WRITE|0x08;
	else
		Tem = WRITE;
	CS25040 = 0;
	SDR = Tem;
	StartSioSeq();
	SDR = Lowaddr;
	StartSioSeq();
	SDR = Data;
	StartSioSeq();
	StopSioSeq();
	CS25040 = 1;
}

// write a string to EEPROM via SIO
void WriteChars(void)
{
	unsigned char ch,i,flag;
	Puts ("Please input data from PC keyboard and Press Enter key end");
	NewLine();
	i = 0;
	do
	{
		ch = Getch();
		Write25040Data (0,i,ch);
		i = i + 1;
		// polling write complete?
		do
		{
    		flag = Read25040Status ();
    	}while((flag&0x01)==0x01);
    	Putch (ch);
	}while (ch != 0x0a);
	NewLine();
	Puts ("store of data end and press any key to exit");
	ch = Getch ();
}

// read string from EEPROM via SIO 
void ReadChars(void)
{
	unsigned char ch,i;
	i = 0;
	Puts ("The storage data in EEPROM:");
	NewLine();
	do
	{
		ch = Read25040Data (0,i);
		i = i + 1;
		Putch (ch);
 	}while(ch != 0x0a);
	NewLine();
 	Puts ("Press any key to exit");
 	ch = Getch ();
}

⌨️ 快捷键说明

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