AVR MEGA8 通过 SPI 总线读写 93C46
* 项目:SPI总线驱动93C46
* 平台:AVR MEGA8 + WinAVR
* 作者:Etual /Etual@163.com
* 日期:2008-8-18
*/
SPI访问部分代码:
/////////////////////////////////////////////////
// pin assignment
#define SS PB2 //chip select
#define SCK PB5 //clock
#define MOSI PB3 //input
#define MISO PB4 //output
#define SS_SET (PORTB|=(1
#define SCK_SET (PORTB|=(1
#define MOSI_SET (PORTB|=(1
#define SS_CLR (PORTB &= ~(1
#define SCK_CLR (PORTB &= ~(1
#define MOSI_CLR (PORTB &= ~(1
void spi_init(void)
{
DDRB |= (1
SPCR = 0x53;
SPSR = 0x00;
}
void SendByte(u8 sData)
{
SPDR = sData;
while(!(SPSR & (1
}
u8 spi_read(void)
{
SPDR = 0x00;
while(!(SPSR & (1
return SPDR;
}
//////////////////////////////////////////////////
//start and stop condition of 93C46
void Start(void)
{
u8 temp;
temp = SPCR;
SPCR = 0; // 禁止SPI功能
//-----------------------------------------------
SCK_CLR; // 手工产生一个起始位,93C46特殊的地方
MOSI_SET; // 所以要特殊处理
SS_SET;
SCK_SET;
//-----------------------------------------------
SPCR = temp; // 使能SPI功能
}
void Stop(void)
{
SS_CLR;
}
//////////////////////////////////////////////////
// write enable / diable
void EWEN(void)
{
Start();
SendByte(0x30); // EWEN command
Stop();
}
void EWDS(void)
{
Start();
SendByte(0x00); // EWDS command
Stop();
}
//////////////////////////////////////////////////
// read word
u16 ReadWord(u8 addr)
{
u16 temp=0;
u8 hig,low;
Start();
SendByte(addr | 0x80); // read command
//------------------------ 切换到SPI模式1
SPCR = 0x5b;
hig = spi_read();
low = spi_read();
//------------------------ 切换回SPI模式0
SPCR = 0x53;
Stop();
temp = (hig<8) + low ;
return temp;
}
//////////////////////////////////////////////////
// write a word
void WriteWord(u16 da
{
EWEN();
Start();
SendByte(addr | 0x40); // write command
SendByte((u8)(da
SendByte((u8)da
Stop(); // wait at lease 2ms
}
void WriteAll(u16 da
{
EWEN(); // write enable
Start();
SendByte(0x10); // write command
SendByte((u8)(da
SendByte((u8)da
Stop(); // wait at lease 10MS
}
AVRMEGA8SPI总线读写93C4 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)