BayEOS-Arduino  1.8.0_0.0.4
HW_ATmega1280.h
1 // *** Hardwarespecific functions ***
3 {
4 }
5 
6 void UTFT::LCD_Writ_Bus(char VH,char VL, byte mode)
7 {
8  switch (mode)
9  {
10  case 1:
11  if (display_serial_mode==SERIAL_4PIN)
12  {
13  if (VH==1)
14  sbi(P_SDA, B_SDA);
15  else
16  cbi(P_SDA, B_SDA);
17  pulse_low(P_SCL, B_SCL);
18  }
19  else
20  {
21  if (VH==1)
22  sbi(P_RS, B_RS);
23  else
24  cbi(P_RS, B_RS);
25  }
26 
27  if (VL & 0x80)
28  sbi(P_SDA, B_SDA);
29  else
30  cbi(P_SDA, B_SDA);
31  pulse_low(P_SCL, B_SCL);
32  if (VL & 0x40)
33  sbi(P_SDA, B_SDA);
34  else
35  cbi(P_SDA, B_SDA);
36  pulse_low(P_SCL, B_SCL);
37  if (VL & 0x20)
38  sbi(P_SDA, B_SDA);
39  else
40  cbi(P_SDA, B_SDA);
41  pulse_low(P_SCL, B_SCL);
42  if (VL & 0x10)
43  sbi(P_SDA, B_SDA);
44  else
45  cbi(P_SDA, B_SDA);
46  pulse_low(P_SCL, B_SCL);
47  if (VL & 0x08)
48  sbi(P_SDA, B_SDA);
49  else
50  cbi(P_SDA, B_SDA);
51  pulse_low(P_SCL, B_SCL);
52  if (VL & 0x04)
53  sbi(P_SDA, B_SDA);
54  else
55  cbi(P_SDA, B_SDA);
56  pulse_low(P_SCL, B_SCL);
57  if (VL & 0x02)
58  sbi(P_SDA, B_SDA);
59  else
60  cbi(P_SDA, B_SDA);
61  pulse_low(P_SCL, B_SCL);
62  if (VL & 0x01)
63  sbi(P_SDA, B_SDA);
64  else
65  cbi(P_SDA, B_SDA);
66  pulse_low(P_SCL, B_SCL);
67  break;
68  case 8:
69 #if defined(USE_UNO_SHIELD_ON_MEGA)
70  PORTG &= ~0x20;
71  PORTG |= (VH & 0x10)<<1;
72  PORTH &= ~0x18;
73  PORTH |= (VH & 0xC0)>>3;
74  PORTE &= ~0x3B;
75  PORTE |= (VH & 0x03) + ((VH & 0x0C)<<2) + ((VH & 0x20)>>2);
76  pulse_low(P_WR, B_WR);
77  PORTG &= ~0x20;
78  PORTG |= (VL & 0x10)<<1;
79  PORTH &= ~0x18;
80  PORTH |= (VL & 0xC0)>>3;
81  PORTE &= ~0x3B;
82  PORTE |= (VL & 0x03) + ((VL & 0x0C)<<2) + ((VL & 0x20)>>2);
83  pulse_low(P_WR, B_WR);
84 #else
85  PORTA = VH;
86  pulse_low(P_WR, B_WR);
87  PORTA = VL;
88  pulse_low(P_WR, B_WR);
89 #endif
90  break;
91  case 16:
92  PORTA = VH;
93  PORTC = VL;
94  pulse_low(P_WR, B_WR);
95  break;
96  case LATCHED_16:
97  PORTG &= ~0x20;
98  PORTG |= (VH & 0x10)<<1;
99  PORTH &= ~0x18;
100  PORTH |= (VH & 0xC0)>>3;
101  PORTE &= ~0x3B;
102  PORTE |= (VH & 0x03) + ((VH & 0x0C)<<2) + ((VH & 0x20)>>2);
103  cbi(P_ALE, B_ALE);
104  pulse_high(P_ALE, B_ALE);
105  cbi(P_CS, B_CS);
106  PORTG &= ~0x20;
107  PORTG |= (VL & 0x10)<<1;
108  PORTH &= ~0x18;
109  PORTH |= (VL & 0xC0)>>3;
110  PORTE &= ~0x3B;
111  PORTE |= (VL & 0x03) + ((VL & 0x0C)<<2) + ((VL & 0x20)>>2);
112  pulse_low(P_WR, B_WR);
113  sbi(P_CS, B_CS);
114  break;
115  }
116 }
117 
118 void UTFT::_set_direction_registers(byte mode)
119 {
120 #if defined(USE_UNO_SHIELD_ON_MEGA)
121  DDRH = 0x18;
122  DDRG = 0x20;
123  DDRE = 0x3B;
124 #else
125  if (mode!=LATCHED_16)
126  {
127  DDRA = 0xFF;
128  if (mode==16)
129  DDRC = 0xFF;
130  }
131  else
132  {
133  DDRH = 0x18;
134  DDRG = 0x20;
135  DDRE = 0x3B;
136  }
137 #endif
138 }
139 
140 void UTFT::_fast_fill_16(int ch, int cl, long pix)
141 {
142 #if defined(USE_UNO_SHIELD_ON_MEGA)
143  if (ch==cl)
144  _fast_fill_8(ch, pix);
145  else
146  {
147  for (int i=0; i<pix; i++)
148  {
149  PORTG &= ~0x20;
150  PORTG |= (ch & 0x10)<<1;
151  PORTH &= ~0x18;
152  PORTH |= (ch & 0xC0)>>3;
153  PORTE &= ~0x3B;
154  PORTE |= (ch & 0x03) + ((ch & 0x0C)<<2) + ((ch & 0x20)>>2);
155  pulse_low(P_WR, B_WR);
156  PORTG &= ~0x20;
157  PORTG |= (cl & 0x10)<<1;
158  PORTH &= ~0x18;
159  PORTH |= (cl & 0xC0)>>3;
160  PORTE &= ~0x3B;
161  PORTE |= (cl & 0x03) + ((cl & 0x0C)<<2) + ((cl & 0x20)>>2);
162  pulse_low(P_WR, B_WR);
163  }
164  }
165 #else
166  long blocks;
167 
168  PORTA = ch;
169  PORTC = cl;
170 
171  blocks = pix/16;
172  for (int i=0; i<blocks; i++)
173  {
174  pulse_low(P_WR, B_WR);
175  pulse_low(P_WR, B_WR);
176  pulse_low(P_WR, B_WR);
177  pulse_low(P_WR, B_WR);
178  pulse_low(P_WR, B_WR);
179  pulse_low(P_WR, B_WR);
180  pulse_low(P_WR, B_WR);
181  pulse_low(P_WR, B_WR);
182  pulse_low(P_WR, B_WR);
183  pulse_low(P_WR, B_WR);
184  pulse_low(P_WR, B_WR);
185  pulse_low(P_WR, B_WR);
186  pulse_low(P_WR, B_WR);
187  pulse_low(P_WR, B_WR);
188  pulse_low(P_WR, B_WR);
189  pulse_low(P_WR, B_WR);
190  }
191  if ((pix % 16) != 0)
192  for (int i=0; i<(pix % 16)+1; i++)
193  {
194  pulse_low(P_WR, B_WR);
195  }
196 #endif
197 }
198 
199 void UTFT::_fast_fill_8(int ch, long pix)
200 {
201  long blocks;
202 
203 #if defined(USE_UNO_SHIELD_ON_MEGA)
204  PORTG &= ~0x20;
205  PORTG |= (ch & 0x10)<<1;
206  PORTH &= ~0x18;
207  PORTH |= (ch & 0xC0)>>3;
208  PORTE &= ~0x3B;
209  PORTE |= (ch & 0x03) + ((ch & 0x0C)<<2) + ((ch & 0x20)>>2);
210 #else
211  PORTA = ch;
212 #endif
213 
214  blocks = pix/16;
215  for (int i=0; i<blocks; i++)
216  {
217  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
218  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
219  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
220  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
221  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
222  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
223  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
224  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
225  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
226  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
227  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
228  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
229  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
230  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
231  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
232  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
233  }
234  if ((pix % 16) != 0)
235  for (int i=0; i<(pix % 16)+1; i++)
236  {
237  pulse_low(P_WR, B_WR);pulse_low(P_WR, B_WR);
238  }
239 }
void _hw_special_init()
Definition: HW_CC3200.h:2