Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. #if defined(__AVR__)
  2. void dmxSendByte(volatile uint8_t value)
  3. {
  4. uint8_t bitCount, delCount;
  5. __asm__ volatile (
  6. "clin" <<==== DISABLE INTERRUPTS
  7. "ld __tmp_reg__,%a[dmxPort]n"
  8. "and __tmp_reg__,%[outMask]n"
  9. "st %a[dmxPort],__tmp_reg__n"
  10. "ldi %[bitCount],11n" // 11 bit intervals per transmitted byte
  11. "rjmp bitLoop%=n" // Delay 2 clock cycles.
  12. "bitLoop%=:n"
  13. "ldi %[delCount],%[delCountVal]n"
  14. "delLoop%=:n"
  15. "nopn"
  16. "dec %[delCount]n"
  17. "brne delLoop%=n"
  18. "ld __tmp_reg__,%a[dmxPort]n"
  19. "and __tmp_reg__,%[outMask]n"
  20. "secn"
  21. "ror %[value]n"
  22. "brcc sendzero%=n"
  23. "or __tmp_reg__,%[outBit]n"
  24. "sendzero%=:n"
  25. "st %a[dmxPort],__tmp_reg__n"
  26. "dec %[bitCount]n"
  27. "brne bitLoop%=n"
  28. "sein" <<==== ENABLE INTERRUPTS
  29. :
  30. [bitCount] "=&d" (bitCount),
  31. [delCount] "=&d" (delCount)
  32. :
  33. [dmxPort] "e" (dmxPort),
  34. [outMask] "r" (~dmxBit),
  35. [outBit] "r" (dmxBit),
  36. [delCountVal] "M" (F_CPU/1000000-3),
  37. [value] "r" (value)
  38. );
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement