PlatformIO package of the Teensy core framework compatible with GCC 10 & C++20
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

189 rindas
4.1KB

  1. // *** Hardwarespecific functions ***
  2. void UTFT::_hw_special_init()
  3. {
  4. }
  5. void UTFT::LCD_Writ_Bus(char VH,char VL, byte mode)
  6. {
  7. switch (mode)
  8. {
  9. case 1:
  10. if (display_serial_mode==SERIAL_4PIN)
  11. {
  12. if (VH==1)
  13. sbi(P_SDA, B_SDA);
  14. else
  15. cbi(P_SDA, B_SDA);
  16. pulse_low(P_SCL, B_SCL);
  17. }
  18. else
  19. {
  20. if (VH==1)
  21. sbi(P_RS, B_RS);
  22. else
  23. cbi(P_RS, B_RS);
  24. }
  25. if (VL & 0x80)
  26. sbi(P_SDA, B_SDA);
  27. else
  28. cbi(P_SDA, B_SDA);
  29. pulse_low(P_SCL, B_SCL);
  30. if (VL & 0x40)
  31. sbi(P_SDA, B_SDA);
  32. else
  33. cbi(P_SDA, B_SDA);
  34. pulse_low(P_SCL, B_SCL);
  35. if (VL & 0x20)
  36. sbi(P_SDA, B_SDA);
  37. else
  38. cbi(P_SDA, B_SDA);
  39. pulse_low(P_SCL, B_SCL);
  40. if (VL & 0x10)
  41. sbi(P_SDA, B_SDA);
  42. else
  43. cbi(P_SDA, B_SDA);
  44. pulse_low(P_SCL, B_SCL);
  45. if (VL & 0x08)
  46. sbi(P_SDA, B_SDA);
  47. else
  48. cbi(P_SDA, B_SDA);
  49. pulse_low(P_SCL, B_SCL);
  50. if (VL & 0x04)
  51. sbi(P_SDA, B_SDA);
  52. else
  53. cbi(P_SDA, B_SDA);
  54. pulse_low(P_SCL, B_SCL);
  55. if (VL & 0x02)
  56. sbi(P_SDA, B_SDA);
  57. else
  58. cbi(P_SDA, B_SDA);
  59. pulse_low(P_SCL, B_SCL);
  60. if (VL & 0x01)
  61. sbi(P_SDA, B_SDA);
  62. else
  63. cbi(P_SDA, B_SDA);
  64. pulse_low(P_SCL, B_SCL);
  65. break;
  66. case 8:
  67. LATECLR = 0xFF;
  68. LATESET = VH;
  69. *P_WR &= ~B_WR;
  70. *P_WR |= B_WR;
  71. LATECLR = 0xFF;
  72. LATESET = VL;
  73. *P_WR &= ~B_WR;
  74. *P_WR |= B_WR;
  75. break;
  76. case 16:
  77. #ifdef AQUALED_SHIELD
  78. LATACLR = 0xFF;
  79. LATASET = VL & 0xFF;
  80. #else
  81. LATDCLR = 0xFF;
  82. LATDSET = VL & 0xFF;
  83. #endif
  84. LATECLR = 0xFF;
  85. LATESET = VH & 0xFF;
  86. *P_WR &= ~B_WR;
  87. *P_WR |= B_WR;
  88. break;
  89. case LATCHED_16:
  90. asm("nop"); // Mode is unsupported
  91. break;
  92. }
  93. }
  94. void UTFT::_set_direction_registers(byte mode)
  95. {
  96. if (mode!=LATCHED_16)
  97. {
  98. TRISE=0;
  99. if (mode==16)
  100. #ifdef AQUALED_SHIELD
  101. TRISA=0;
  102. #else
  103. TRISD=0;
  104. #endif
  105. }
  106. else
  107. {
  108. asm("nop"); // Mode is unsupported
  109. }
  110. }
  111. void UTFT::_fast_fill_16(int ch, int cl, long pix)
  112. {
  113. long blocks;
  114. #ifdef AQUALED_SHIELD
  115. LATACLR = 0xFF;
  116. LATASET = cl & 0xFF;
  117. #else
  118. LATDCLR = 0xFF;
  119. LATDSET = cl & 0xFF;
  120. #endif
  121. LATECLR = 0xFF;
  122. LATESET = ch & 0xFF;
  123. blocks = pix/16;
  124. for (int i=0; i<blocks; i++)
  125. {
  126. *P_WR &= ~B_WR; *P_WR |= B_WR;
  127. *P_WR &= ~B_WR; *P_WR |= B_WR;
  128. *P_WR &= ~B_WR; *P_WR |= B_WR;
  129. *P_WR &= ~B_WR; *P_WR |= B_WR;
  130. *P_WR &= ~B_WR; *P_WR |= B_WR;
  131. *P_WR &= ~B_WR; *P_WR |= B_WR;
  132. *P_WR &= ~B_WR; *P_WR |= B_WR;
  133. *P_WR &= ~B_WR; *P_WR |= B_WR;
  134. *P_WR &= ~B_WR; *P_WR |= B_WR;
  135. *P_WR &= ~B_WR; *P_WR |= B_WR;
  136. *P_WR &= ~B_WR; *P_WR |= B_WR;
  137. *P_WR &= ~B_WR; *P_WR |= B_WR;
  138. *P_WR &= ~B_WR; *P_WR |= B_WR;
  139. *P_WR &= ~B_WR; *P_WR |= B_WR;
  140. *P_WR &= ~B_WR; *P_WR |= B_WR;
  141. *P_WR &= ~B_WR; *P_WR |= B_WR;
  142. }
  143. if ((pix % 16) != 0)
  144. for (int i=0; i<(pix % 16)+1; i++)
  145. {
  146. *P_WR &= ~B_WR; *P_WR |= B_WR;
  147. }
  148. }
  149. void UTFT::_fast_fill_8(int ch, long pix)
  150. {
  151. long blocks;
  152. LATECLR = 0xFF;
  153. LATESET = ch;
  154. blocks = pix/16;
  155. for (int i=0; i<blocks; i++)
  156. {
  157. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  158. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  159. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  160. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  161. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  162. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  163. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  164. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  165. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  166. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  167. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  168. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  169. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  170. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  171. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  172. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  173. }
  174. if ((pix % 16) != 0)
  175. for (int i=0; i<(pix % 16)+1; i++)
  176. {
  177. *P_WR &= ~B_WR; *P_WR |= B_WR; *P_WR &= ~B_WR; *P_WR |= B_WR;
  178. }
  179. }