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);
}
'연구&개발 > Embedded' 카테고리의 다른 글
DA1458X 시리즈 DSPS 설정_ EVERNOTE (0) | 2015.09.11 |
---|---|
[펌] RS-232 에 대해 (0) | 2013.07.18 |
Atmega128을 이용한 DC 서보모터 위치(각도)제어 (0) | 2013.01.14 |