📄 spi.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 + -