ZodiacMentor

SPI to databus AVR asm

Feb 6th, 2022 (edited)
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.66 KB | None | 0 0
  1.     asm volatile(
  2.       "ldi    __temp_reg__,1\n\t"
  3.       "ldi    r20, 0\n\t"
  4.       "ldi    r21, 0\n\t"
  5.      
  6.       // initiate first SPI transfer
  7.       "ldi    r16, 0xff\n\t"
  8.       "out    0x2e, r16\n\t"
  9.       "rjmp   waitForSPIData\n\t"  // jump for waiting the data to prime simultaneous transfer
  10.      
  11.     "SPItoScreenLoop:\n\t"
  12.       // Read last byte from SPI
  13.       "in     r17, 0x2e\n\t"
  14.       // initiate next SPI transfer while we output to screen
  15.       "out    0x2e, r16\n\t"
  16.      
  17.       // low nibble to PORTF high
  18.       "in     r18, 0x11\n\t"
  19.       "andi   r18, 0xf\n\t"
  20.       "mov    r19, r17\n\t"
  21.       "lsl    r19\n\t"
  22.       "lsl    r19\n\t"
  23.       "lsl    r19\n\t"
  24.       "lsl    r19\n\t"
  25.       "or     r18, r19\n\t"
  26.       "out    0x11, r18\n\t"
  27.       // high nibble to PORTD low
  28.       "in     r18, 0x0b\n\t"
  29.       "andi   r18, 0xf0\n\t"
  30.       "mov    r19, r17\n\t"
  31.       "lsr    r19\n\t"
  32.       "lsr    r19\n\t"
  33.       "lsr    r19\n\t"
  34.       "lsr    r19\n\t"
  35.       "or     r18, r19\n\t"
  36.       "out    0x0b, r18\n\t"
  37.       // Toggle ILI WR
  38.       "cbi    0x08, 6\n\t"
  39.       "sbi    0x08, 6\n\t"
  40.  
  41.       // Wait for SPI data
  42.     "waitForSPIData:\n\t"
  43.       "sbis   SPSR,SPIF\n\t"
  44.       "rjmp   waitForSPIData\n\t"
  45.      
  46.       // Check if we are done
  47.       "add    r20, __temp_reg__\n\t"
  48.       "adc    r21, __temp_reg__\n\t"
  49.       "cpi    r21,2\n\t" // test against 512
  50.       "brne   SPItoScreenLoop\n\t"
  51.       "cpi    r20,1\n\t" // test against 513 as we skip the first write to let us write to screen while waiting for SPI
  52.       "brne   SPItoScreenLoop\n\t"
  53.       :
  54.       :
  55.       : "r16", "r17", "r18", "r19", "r20", "r21"
  56.     );
Add Comment
Please, Sign In to add comment