본문 바로가기

연구&개발/Embedded

[펌]Atmega 128 spi 통신 라이브러리..

 Atmega 128 spi 통신 라이브러리..


여기에서 펌하였습니다. [http://bellona.egloos.com/1586302]


혹시 문제가 된다면 삭제하도록 하겠습니다 !!


void SpiInit(void)
{
DDRB = 0x07; // Set SCK, MOSI & SS as outputs, Set MISO as input.
PORTB = 0x01; // clear bits MOSI, MISO, SCK & ^SS.

// SPIE=0, SPE=1, DDRD=0, MSTR=1, CPOL=0, CPHA=0 (Falling & Leading Edge),
// SPR1=0, SPR0=0 (8Mhz ; SPI2X=1일 경우)
SPCR = 0x50;
SPSR |= 0x01; // SPI2X = 1.
}

void SpiWriteByte(unsigned char byte)
{
SPDR = byte;
while (!(SPSR & 0x80)); // SPIF가 1로 될때까지 대기. (SPI 전송이 완료될때까지 대기)
byte = SPDR; // 더미코드 아님. 이줄은 지우지 말것.
}

unsigned char SpiReadByte(void)
{
SPDR = 0x00; // 더미코드 아님. 이줄은 지우지 말것.
while (!(SPSR & 0x80)); // SPIF가 1로 될때까지 대기. (SPI 전송이 완료될때까지 대기)
return SPDR;
}

// ****************************************************************************
// Chip Select. 0 = Low(Enable), 1 = High(Disable)
// ****************************************************************************
void EEPROM_CS(unsigned char ch)
{
if (ch==0) PORTB &= 0xFE;
else PORTB |= 0x01;
}

unsigned char EEPROM_ReadSR(void)
{
unsigned char temp;

EEPROM_CS(0);
SpiWriteByte(0x05);
temp = SpiReadByte();
EEPROM_CS(1);
return temp;
}

void EEPROM_WriteSR(unsigned char ch)
{
EEPROM_CS(0);
SpiWriteByte(0x01);
SpiWriteByte(ch);
EEPROM_CS(1);
}