Compare commits
3 Commits
master
...
consistent
| Author | SHA1 | Date |
|---|---|---|
|
|
cc4eaea572 | 5 years ago |
|
|
dcf1990830 | 5 years ago |
|
|
822f12025d | 5 years ago |
@ -1,50 +1,58 @@
|
||||
#include <avr/io.h>
|
||||
#include <stdint.h>
|
||||
#include <avr/interrupt.h>
|
||||
|
||||
#include "spi.h"
|
||||
|
||||
// Prevent Double Initialization
|
||||
unsigned short SPI_flag = 0;
|
||||
|
||||
void
|
||||
SPI_MasterInit (void)
|
||||
void SPI_MasterInit(void)
|
||||
{
|
||||
/* Check if already initialized */
|
||||
// Check if already initialized
|
||||
if (!(SPI_flag & 1))
|
||||
{
|
||||
/* Set MOSI and SCK output */
|
||||
DDRB |= (1<<PB5)|(1<<PB7);
|
||||
// Backup Status Register and disable Interrupts
|
||||
uint8_t sreg = SREG;
|
||||
cli();
|
||||
|
||||
/* Enable SPI, Master */
|
||||
SPCR = (1<<SPE)|(1<<MSTR);
|
||||
// Set MOSI, SCK and SS output
|
||||
DDRB |= (1 << PB5) | (1 << PB7) | (1 << PB4);
|
||||
|
||||
/* Set Double SPI Speed Bit, SPI clock will be fck/2 */
|
||||
SPSR = (1<<SPI2X);
|
||||
// Enable SPI, Master
|
||||
SPCR = (1 << SPE) | (1 << MSTR);
|
||||
|
||||
/* Set SPI Init Flag */
|
||||
// Set Double SPI Speed Bit, SPI clock will be fck/2
|
||||
SPSR = (1 << SPI2X);
|
||||
|
||||
// Restore Status Register
|
||||
SREG = sreg;
|
||||
|
||||
// Set SPI Init Flag
|
||||
SPI_flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SPI_MasterTransfer (unsigned char c)
|
||||
void SPI_MasterTransfer(unsigned char c)
|
||||
{
|
||||
/* Start transmission */
|
||||
// Start transmission
|
||||
SPDR = c;
|
||||
|
||||
/* Wait for transmission complete */
|
||||
while (!(SPSR & (1<<SPIF)));
|
||||
// Wait for transmission complete
|
||||
while (!(SPSR & (1 << SPIF)))
|
||||
;
|
||||
}
|
||||
|
||||
unsigned char
|
||||
SPI_MasterTransferRead (unsigned char c)
|
||||
SPI_MasterTransferRead(unsigned char c)
|
||||
{
|
||||
/* Start transmission */
|
||||
// Start transmission
|
||||
SPDR = c;
|
||||
|
||||
/* Wait for transmission complete */
|
||||
while (!(SPSR & (1<<SPIF)));
|
||||
// Wait for transmission complete
|
||||
while (!(SPSR & (1 << SPIF)))
|
||||
;
|
||||
|
||||
/* Return incoming character */
|
||||
// Return incoming character
|
||||
return SPDR;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue