Merge branch 'consistent_interrupts' into 'master'
Konsistente Interrupts für alle Bibliotheken See merge request dmm/dmm-libs!1merge-requests/1/merge
commit
10b862dad6
@ -1,50 +1,58 @@
|
|||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
|
||||||
// Prevent Double Initialization
|
// Prevent Double Initialization
|
||||||
unsigned short SPI_flag = 0;
|
unsigned short SPI_flag = 0;
|
||||||
|
|
||||||
void
|
void SPI_MasterInit(void)
|
||||||
SPI_MasterInit (void)
|
|
||||||
{
|
{
|
||||||
/* Check if already initialized */
|
// Check if already initialized
|
||||||
if (!(SPI_flag & 1))
|
if (!(SPI_flag & 1))
|
||||||
{
|
{
|
||||||
/* Set MOSI and SCK output */
|
// Backup Status Register and disable Interrupts
|
||||||
DDRB |= (1<<PB5)|(1<<PB7);
|
uint8_t sreg = SREG;
|
||||||
|
cli();
|
||||||
|
|
||||||
/* Enable SPI, Master */
|
// Set MOSI, SCK and SS output
|
||||||
|
DDRB |= (1 << PB5) | (1 << PB7) | (1 << PB4);
|
||||||
|
|
||||||
|
// Enable SPI, Master
|
||||||
SPCR = (1 << SPE) | (1 << MSTR);
|
SPCR = (1 << SPE) | (1 << MSTR);
|
||||||
|
|
||||||
/* Set Double SPI Speed Bit, SPI clock will be fck/2 */
|
// Set Double SPI Speed Bit, SPI clock will be fck/2
|
||||||
SPSR = (1 << SPI2X);
|
SPSR = (1 << SPI2X);
|
||||||
|
|
||||||
/* Set SPI Init Flag */
|
// Restore Status Register
|
||||||
|
SREG = sreg;
|
||||||
|
|
||||||
|
// Set SPI Init Flag
|
||||||
SPI_flag = 1;
|
SPI_flag = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void SPI_MasterTransfer(unsigned char c)
|
||||||
SPI_MasterTransfer (unsigned char c)
|
|
||||||
{
|
{
|
||||||
/* Start transmission */
|
// Start transmission
|
||||||
SPDR = c;
|
SPDR = c;
|
||||||
|
|
||||||
/* Wait for transmission complete */
|
// Wait for transmission complete
|
||||||
while (!(SPSR & (1<<SPIF)));
|
while (!(SPSR & (1 << SPIF)))
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char
|
unsigned char
|
||||||
SPI_MasterTransferRead(unsigned char c)
|
SPI_MasterTransferRead(unsigned char c)
|
||||||
{
|
{
|
||||||
/* Start transmission */
|
// Start transmission
|
||||||
SPDR = c;
|
SPDR = c;
|
||||||
|
|
||||||
/* Wait for transmission complete */
|
// Wait for transmission complete
|
||||||
while (!(SPSR & (1<<SPIF)));
|
while (!(SPSR & (1 << SPIF)))
|
||||||
|
;
|
||||||
|
|
||||||
/* Return incoming character */
|
// Return incoming character
|
||||||
return SPDR;
|
return SPDR;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue