Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <Arduino.h>
- #define F_CPU 1600000UL
- /* SPCR SPI controler register
- Bit 7 SPIE - interrupt enable
- Bit 6 SPE - SPI enable
- Bit 5 DORD - Data order msb=0 or lsb=1 first
- Bit 4 MSTR - Master=1/slave=0 select
- Bit 3 CPOL - clock polarity
- Bit 2 CPHA - clock phase
- Bit 1 SPR1 - Clock rate select 1
- Bit 0 SPR0 - Clock rate select 0
- 000 /4
- 001 /16
- 010 /64
- 011 /128
- 100 /2
- 101 /8
- 110 /32
- 111 /64
- */
- /* SPSR - SPI Status register
- Bit 7 SPIF - interrupt flag
- Bit 6 WCOl - Write COLlision flag
- Bit 5-1 används inte alltid 0
- Bit 0 SPI2X - Double SPI speed bit
- EEPROM uploading och downloading sida 308 i databladet
- */
- /* SPDR - SPI Data Register = read write register.
- Om man skriver till detta register så påbörjas överföringen.
- Om man läser från detta register läses Shift Register Receive buffer.
- */
- /* Port B pinnar
- PB5 SCK
- PB4 MISO
- PB3 MOSI
- Pb2 SS
- PB0 PCINT0
- */
- char cData;
- void SPI_MasterInit(void)
- {
- /* Set MOSI and SCK output, all others input */
- DDRB = (1 << DDB3) | (1 << DDB5) | (1 << DDB2);
- /* Enable SPI, Master, set clock rate fck/16 */
- SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR1) | (1 << SPR0);
- }
- void SPI_MasterTransmit(char cData)
- {
- /* Start transmission */
- //cData = 0xF8;
- SPDR = cData;
- /* Wait for transmission complete */
- while (!(SPSR & (1 << SPIF)))
- ;
- }
- void delayLoop(uint32_t iterations)
- {
- while ((--iterations) > 0)
- {
- asm volatile("nop");
- }
- }
- int main(void)
- {
- PRR = (0 << PRSPI);
- DDRB = (1 << DDB0) | (1 << DDB3) | (1 << DDB5);
- PORTB = (0 << PB0);
- while (1)
- {
- SPI_MasterInit();
- SPI_MasterTransmit(0xC3);
- delayLoop(100);
- SPI_MasterTransmit(0xAA);
- delayLoop(100);
- SPI_MasterTransmit(0xF8);
- delayLoop(10000);
- }
- }
- // #include <Arduino.h>
- // #include <SPI.h>
- // #define SPI_SS_PIN 10
- // #define SPI_MOSI_PIN 11
- // #define SPI_MISO_PIN 12
- // #define SPI_SCK_PIN 13
- // #define SPI_CLOCK_SPEED 1000000
- // void setup() {
- // pinMode(SPI_SS_PIN, OUTPUT);
- // digitalWrite(SPI_SS_PIN, HIGH);
- // SPI.begin();
- // SPI.setClockDivider(SPI_CLOCK_DIV128);//divide the clock by 8
- // }
- // void loop() {
- // SPI.beginTransaction(SPISettings(SPI_CLOCK_SPEED, MSBFIRST, 0x00));
- // digitalWrite(SPI_SS_PIN, LOW);
- // SPI.transfer(0xAA);
- // SPI.transfer(0x0F);
- // SPI.transfer(0xC3);
- // SPI.endTransaction();
- // digitalWrite(SPI_SS_PIN, HIGH);
- // delay(100);
- // }
Advertisement
Add Comment
Please, Sign In to add comment