FreeCalypso > hg > tcs211-c139
annotate chipsetsw/drivers/drv_app/r2d/lcds/c139/r2d_task_i.c @ 35:2071211e5d1a
Mot C1xx keypad layout entered
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Wed, 04 Nov 2015 06:18:11 +0000 |
parents | f1ffea823c18 |
children |
rev | line source |
---|---|
33
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 #include "r2d/lcds/c139/colors.h" |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 void c139_uwire_xmit(UINT16 cmd) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 * (volatile UINT16 *) TDR = cmd << 7; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 * (volatile UINT16 *) CSR |= NB_BITS_WR_9 + CS_CMD + START ; // transmit command data |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 while (((* (volatile UINT16 *) CSR) & CSRB) != 0 ); // wait for end of WRITE |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 * (volatile UINT16 *) CSR &= ~CS_CMD; // clears Chip Select |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 void c139_lcd_ctrl_cmd(UINT8 cmd, UINT8 param) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 c139_uwire_xmit(cmd); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 c139_uwire_xmit(param | 0x100); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 void c139_set_lcd_addr_region(UINT8 xstart, UINT8 xend, |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 UINT8 ystart, UINT8 yend) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 c139_lcd_ctrl_cmd(0x10, xstart); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 c139_lcd_ctrl_cmd(0x11, ystart); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 c139_lcd_ctrl_cmd(0x12, xend); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 c139_lcd_ctrl_cmd(0x13, yend); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 c139_lcd_ctrl_cmd(0x14, xstart); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 c139_lcd_ctrl_cmd(0x15, ystart); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 void c139_lcd_send_pix(UINT16 pixval) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 c139_uwire_xmit((pixval >> 8) | 0x100); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 c139_uwire_xmit((pixval & 0xFF) | 0x100); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 void r2d_lcd_power_on(void) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 void r2d_lcd_power_off(void) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 static int get_pix_from_sw_fb(UINT32 *fb, UINT16 x, UINT16 y) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 UINT32 *p, mask; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 UINT16 yword, ybit; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 /* mirroring */ |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 x = R2D_WIDTH - x; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 y = R2D_HEIGHT - y; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 yword = y >> 5; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 ybit = y & 31; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 p = fb + x * R2D_MWHEIGHT + yword; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 mask = 1 << ybit; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 if (*p & mask) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 return(1); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 else |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 return(0); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 void r2d_refresh(void) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 UINT16 x, y; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 UINT32 *fb; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 fb = r2d_g_framebuffer->p_memory_words; |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 /* set the LCD up to refresh the 84x48 area */ |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 c139_set_lcd_addr_region(6, 89, 8, 55); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 /* send the pixels */ |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
70 for (y = 0; y < R2D_HEIGHT; y++) { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
71 for (x = 0; x < R2D_WIDTH; x++) { |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
72 if (get_pix_from_sw_fb(fb, x, y)) |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 c139_lcd_send_pix(LCD16_COLOR_BLACK); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 else |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 c139_lcd_send_pix(LCD16_COLOR_WHITE); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
76 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 } |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 r2d_reinit_update_region(); |
f1ffea823c18
C-Sample-emulating C139 LCD driver implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 } |