PlatformIO package of the Teensy core framework compatible with GCC 10 & C++20
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

191 lines
4.2KB

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