Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define __spi_clock 52 // SCK - hardware SPI
- #define __spi_data_in 50 // MISO - hardware SPI (unused)
- #define __spi_data 51 // MOSI - hardware SPI
- #define __spi_latch 53
- #define __LATCH_LOW PORTC &= ~_BV(PC0)
- #define __LATCH_HIGH PORTC |= _BV(PC0)
- #define __display_enable 49
- #define __DISPLAY_ON PORTD &= ~_BV(PD6)
- #define __DISPLAY_OFF PORTD |= _BV(PD6)
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <stdint.h>
- void setup(void)
- {
- pinMode(__spi_clock, OUTPUT);
- pinMode(__spi_latch, OUTPUT);
- pinMode(__spi_data, OUTPUT);
- pinMode(__spi_data_in, INPUT);
- pinMode(__display_enable, OUTPUT);
- digitalWrite(__spi_latch, LOW);
- digitalWrite(__spi_data, LOW);
- digitalWrite(__spi_clock, LOW);
- setup_hardware_spi();
- }
- void loop(void)
- {
- __DISPLAY_OFF;
- __LATCH_LOW;
- spi_transfer(0xFF);
- spi_transfer(0xFF);
- spi_transfer(0xFF);
- spi_transfer(0xFF);
- __LATCH_HIGH;
- __DISPLAY_ON;
- delay(1000);
- __DISPLAY_OFF;
- __LATCH_LOW;
- spi_transfer(0x00);
- spi_transfer(0x00);
- spi_transfer(0x00);
- spi_transfer(0x00);
- __LATCH_HIGH;
- __DISPLAY_ON;
- delay(1000);
- }
- void setup_hardware_spi(void)
- {
- uint8_t clr;
- // spi prescaler:
- //
- // SPCR: SPR1 SPR0
- // SPSR: SPI2X
- //
- // SPI2X SPR1 SPR0
- // 0 0 0 fosc/4
- // 0 0 1 fosc/16
- // 0 1 0 fosc/64
- // 0 1 1 fosc/128
- // 1 0 0 fosc/2
- // 1 0 1 fosc/8
- // 1 1 0 fosc/32
- // 1 1 1 fosc/64
- /* enable SPI as master */
- SPCR |= (_BV(SPE) | _BV(MSTR));
- /* clear registers */
- clr = SPSR;
- clr = SPDR;
- /* set prescaler to fosc/2 */
- SPCR &= ~(_BV(SPR1) | _BV(SPR0));
- SPSR |= _BV(SPI2X);
- }
- uint8_t spi_transfer(uint8_t data)
- {
- SPDR = data; // Start the transmission
- while (!(SPSR & _BV(SPIF))) // Wait the end of the transmission
- {
- };
- return SPDR; // return the received byte. (we don't need that here)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement