暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233
  1. #include <avr/io.h>
  2. /* Pin Definitions: */
  3. #define SPI_DDR DDRB
  4. #define SPI_SCK_PIN PB5
  5. #define SPI_MOSI_PIN PB3
  6. #define SPI_MISO_PIN PB4
  7. void Initialize_SPI(void)
  8. {
  9. /* Set MOSI and SCK output, all others input */
  10. SPI_DDR = (1<<SPI_MOSI_PIN)|(1<<SPI_SCK_PIN);
  11. /* Enable SPI, Master, set clock rate fck/16 */
  12. SPCR = (1<<SPE)|(1<<MSTR);
  13. }
  14. void SPI_Start_Transmission(volatile uint8_t *port, uint8_t pinNumber)
  15. {
  16. *port &= ~(1<<pinNumber);
  17. }
  18. uint8_t SPI_Transfer_Byte(uint8_t byteToSend)
  19. {
  20. SPDR = byteToSend;
  21. while(!(SPSR & (1<<SPIF))); // Wait for transmission complete
  22. return SPDR;
  23. }
  24. void SPI_Stop_Transmission(volatile uint8_t *port, uint8_t pinNumber)
  25. {
  26. *port |= (1<<pinNumber);
  27. }