miyago

SPI raw

Apr 3rd, 2020
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.61 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <Arduino.h>
  3.  
  4. #define F_CPU 1600000UL
  5.  
  6. /* SPCR SPI controler register
  7. Bit 7 SPIE - interrupt enable
  8. Bit 6 SPE - SPI enable
  9. Bit 5 DORD - Data order msb=0 or lsb=1 first
  10. Bit 4 MSTR - Master=1/slave=0 select
  11. Bit 3 CPOL - clock polarity
  12. Bit 2 CPHA - clock phase
  13. Bit 1 SPR1 - Clock rate select 1
  14. Bit 0 SPR0 - Clock rate select 0
  15.  000    /4
  16.  001    /16
  17.  010    /64
  18.  011    /128
  19.  100    /2
  20.  101    /8
  21.  110    /32
  22.  111    /64
  23. */
  24.  
  25. /*  SPSR - SPI Status register
  26. Bit 7 SPIF - interrupt flag
  27. Bit 6 WCOl - Write COLlision flag
  28. Bit 5-1 används inte alltid 0
  29. Bit 0 SPI2X - Double SPI speed bit
  30.  
  31. EEPROM uploading och downloading sida 308 i databladet
  32. */
  33.  
  34. /* SPDR - SPI Data Register = read write register.
  35. Om man skriver till detta register så påbörjas överföringen.
  36. Om man läser från detta register läses Shift Register Receive buffer.
  37. */
  38.  
  39. /* Port B pinnar
  40. PB5 SCK
  41. PB4 MISO
  42. PB3 MOSI
  43. Pb2 SS
  44. PB0 PCINT0
  45. */
  46.  
  47. char cData;
  48.  
  49. void SPI_MasterInit(void)
  50. {
  51.  
  52.     /* Set MOSI and SCK output, all others input */
  53.     DDRB = (1 << DDB3) | (1 << DDB5) | (1 << DDB2);
  54.     /* Enable SPI, Master, set clock rate fck/16 */
  55.     SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR1) | (1 << SPR0);
  56. }
  57.  
  58. void SPI_MasterTransmit(char cData)
  59. {
  60.     /* Start transmission */
  61.     //cData = 0xF8;
  62.     SPDR = cData;
  63.     /* Wait for transmission complete */
  64.     while (!(SPSR & (1 << SPIF)))
  65.         ;
  66. }
  67.  
  68. void delayLoop(uint32_t iterations)
  69. {
  70.     while ((--iterations) > 0)
  71.     {
  72.         asm volatile("nop");
  73.     }
  74. }
  75.  
  76. int main(void)
  77. {
  78.     PRR = (0 << PRSPI);
  79.     DDRB = (1 << DDB0) | (1 << DDB3) | (1 << DDB5);
  80.     PORTB = (0 << PB0);
  81.  
  82.     while (1)
  83.     {
  84.         SPI_MasterInit();
  85.  
  86.         SPI_MasterTransmit(0xC3);
  87.  
  88.         delayLoop(100);
  89.  
  90.         SPI_MasterTransmit(0xAA);
  91.  
  92.         delayLoop(100);
  93.  
  94.         SPI_MasterTransmit(0xF8);
  95.         delayLoop(10000);
  96.     }
  97. }
  98.  
  99. // #include <Arduino.h>
  100. // #include <SPI.h>
  101.  
  102. // #define SPI_SS_PIN    10
  103. // #define SPI_MOSI_PIN  11
  104. // #define SPI_MISO_PIN  12
  105. // #define SPI_SCK_PIN   13
  106. // #define SPI_CLOCK_SPEED 1000000
  107.  
  108. // void setup() {
  109. //   pinMode(SPI_SS_PIN, OUTPUT);
  110. //       digitalWrite(SPI_SS_PIN, HIGH);
  111.  
  112. //   SPI.begin();
  113. //    SPI.setClockDivider(SPI_CLOCK_DIV128);//divide the clock by 8
  114.  
  115. // }
  116.  
  117. // void loop() {
  118.  
  119. //     SPI.beginTransaction(SPISettings(SPI_CLOCK_SPEED, MSBFIRST, 0x00));
  120. //     digitalWrite(SPI_SS_PIN, LOW);
  121. //     SPI.transfer(0xAA);
  122. //     SPI.transfer(0x0F);
  123. //     SPI.transfer(0xC3);
  124.  
  125. //     SPI.endTransaction();
  126. //         digitalWrite(SPI_SS_PIN, HIGH);
  127.  
  128. //     delay(100);
  129.  
  130. // }
Advertisement
Add Comment
Please, Sign In to add comment