PlatformIO package of the Teensy core framework compatible with GCC 10 & C++20
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

172 lines
3.5KB

  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. PORTD = VH;
  68. pulse_low(P_WR, B_WR);
  69. PORTD = VL;
  70. pulse_low(P_WR, B_WR);
  71. break;
  72. case 16:
  73. PORTD = VH;
  74. cport(PORTC, 0xFC);
  75. sport(PORTC, (VL>>6) & 0x03);
  76. PORTB = VL & 0x3F;
  77. pulse_low(P_WR, B_WR);
  78. break;
  79. case LATCHED_16:
  80. PORTD = VH;
  81. cbi(P_ALE, B_ALE);
  82. pulse_high(P_ALE, B_ALE);
  83. cbi(P_CS, B_CS);
  84. PORTD = VL;
  85. pulse_low(P_WR, B_WR);
  86. sbi(P_CS, B_CS);
  87. break;
  88. }
  89. }
  90. void UTFT::_set_direction_registers(byte mode)
  91. {
  92. DDRD = 0xFF;
  93. if (mode==16)
  94. {
  95. DDRB |= 0x3F;
  96. DDRC |= 0x03;
  97. }
  98. }
  99. void UTFT::_fast_fill_16(int ch, int cl, long pix)
  100. {
  101. long blocks;
  102. PORTD = ch;
  103. cport(PORTC, 0xFC);
  104. sport(PORTC, (cl>>6) & 0x03);
  105. PORTB = cl & 0x3F;
  106. blocks = pix/16;
  107. for (int i=0; i<blocks; i++)
  108. {
  109. pulse_low(P_WR, B_WR);
  110. pulse_low(P_WR, B_WR);
  111. pulse_low(P_WR, B_WR);
  112. pulse_low(P_WR, B_WR);
  113. pulse_low(P_WR, B_WR);
  114. pulse_low(P_WR, B_WR);
  115. pulse_low(P_WR, B_WR);
  116. pulse_low(P_WR, B_WR);
  117. pulse_low(P_WR, B_WR);
  118. pulse_low(P_WR, B_WR);
  119. pulse_low(P_WR, B_WR);
  120. pulse_low(P_WR, B_WR);
  121. pulse_low(P_WR, B_WR);
  122. pulse_low(P_WR, B_WR);
  123. pulse_low(P_WR, B_WR);
  124. pulse_low(P_WR, B_WR);
  125. }
  126. if ((pix % 16) != 0)
  127. for (int i=0; i<(pix % 16)+1; i++)
  128. {
  129. pulse_low(P_WR, B_WR);
  130. }
  131. }
  132. void UTFT::_fast_fill_8(int ch, long pix)
  133. {
  134. long blocks;
  135. PORTD = ch;
  136. blocks = pix/16;
  137. for (int i=0; i<blocks; i++)
  138. {
  139. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  140. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  141. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  142. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  143. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  144. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  145. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  146. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  147. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  148. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  149. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  150. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  151. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  152. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  153. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  154. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  155. }
  156. if ((pix % 16) != 0)
  157. for (int i=0; i<(pix % 16)+1; i++)
  158. {
  159. pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
  160. }
  161. }