Mercurial > ~darius > hgwebdir.cgi > stm32temp
annotate lcd.c @ 64:ff29436c0224
- Make sure the line is high before pulling low for reset.
- Use delay properly to get the required delays.
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Sun, 14 Apr 2013 14:25:51 +0930 |
parents | bb52e6dad784 |
children | 662e7f01c991 |
rev | line source |
---|---|
3
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
1 /* |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
2 * Example code (I think) |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
3 * ~/projects/STM32Strive/奋斗STM32开发板例程/奋斗STM32开发板例程/奋斗STM32开发板MINI/STM32奋斗版ucOS II V2.86 uCGUI 3.9 DEMO-V2/STM32奋斗版ucOS II V2.86 uCGUI 3.9 DEMO |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
4 * |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
5 * Schematics |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
6 * Main board docs/Strive\ Mini\ STM32\ Schematic.pdf |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
7 * LCD board docs/Strive Mini LCD STM32 Schematic.pdf |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
8 * MCU reference manual docs/CD00171190.pdf |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
9 * MCU Data sheet (pinout) docs/CD00191185.pdf |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
10 * LCD controller data sheet docs/ili9325-v0.35.pdf |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
11 * LCD controller app notes docs/ILI9325AN_V0.22.pdf |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
12 * XXX: not sure what panel is connected |
3
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
13 * |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
14 */ |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
15 /* LCD board MCU |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
16 1 VCC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
17 2 TC_SCK PA5/SPI1_SCK |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
18 3 GND |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
19 4 TC_CS PB7/SPI1_CS3 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
20 5 RST PE1 FSMC_NBL1? (unlikely) |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
21 6 TC_DIN PA7/SPI1_MOSI |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
22 7 nOE PD4/FSMC_nOE |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
23 8 TC_DOUT PA6/SPI1_MISO |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
24 9 nWR PD5/FSMC_nWE |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
25 10 TC_INT PB6 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
26 11 CS PD7/FSMC_NE1/FSMC_NCE2 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
27 12 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
28 13 RS PD11/FSMC_A16 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
29 14 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
30 15 D7 PE10/FSMC_D7 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
31 16 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
32 17 D6 PE9/FSMC_D6 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
33 18 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
34 19 D3 PD1/FSMC_D3 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
35 20 D13 PD8/FSMC_D13 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
36 21 D5 PE8/FSMC_D5 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
37 22 D12 PE15/FSMC_D12 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
38 23 D4 PE7/FSMC_D4 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
39 24 GND |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
40 25 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
41 26 D11 PE14/FSMC_D11 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
42 27 D2 PD0/FSMC_D2 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
43 28 D10 PE13/FSMC_D10 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
44 29 D1 PD15/FSMC_D1 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
45 30 D9 PE12/FSMC_D9 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
46 31 D0 PD14/FSMC_D0 |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
47 32 D14 PD9/FSMC_D14 |
3
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
48 33 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
49 34 D8 PE11/FSMC_D8 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
50 35 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
51 36 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
52 37 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
53 38 LCD_PWM PD13/TIM4_CH2 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
54 39 NC |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
55 40 D15 PD10/FSMC_D15 |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
56 */ |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
57 |
4
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
58 #include <stdio.h> |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
59 #include <stdint.h> |
9 | 60 #include <stdlib.h> |
61 #include <ctype.h> | |
3
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
62 #include "stm32f10x.h" |
74e9b3baac1e
Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
63 #include "lcd.h" |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
64 #include "delay.h" |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
65 |
4
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
66 #define Bank1_LCD_C ((uint32_t)0x60000000) /* Register Address */ |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
67 #define Bank1_LCD_D ((uint32_t)0x60020000) /* Data Address */ |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
68 |
9 | 69 #define COLINCVAL 7968 /* 255.0 / 320.0 * 10000 */ |
70 | |
71 void colinc(uint16_t *mag, uint16_t *err, uint16_t amt, uint16_t max) { | |
72 *err += amt; | |
73 if (*err > max) { | |
74 (*mag) = (*mag) + 1; | |
75 (*err) = (*err) - max; | |
76 } | |
77 } | |
78 | |
4
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
79 void |
9 | 80 lcd_writereg(uint16_t index, uint16_t val) { |
4
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
81 *(__IO uint16_t *)(Bank1_LCD_C) = index; |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
82 *(__IO uint16_t *)(Bank1_LCD_D) = val; |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
83 } |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
84 |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
85 uint16_t |
9 | 86 lcd_readreg(uint16_t index) { |
4
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
87 *(__IO uint16_t *)(Bank1_LCD_C) = index; |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
88 return(*(__IO uint16_t *)(Bank1_LCD_D)); |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
89 } |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
90 |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
91 uint16_t |
9 | 92 lcd_readdata(int first) { |
4
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
93 uint16_t a = 0; |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
94 if (first) |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
95 a = *(__IO uint16_t *) (Bank1_LCD_D); /* Dummy */ |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
96 a = *(__IO uint16_t *) (Bank1_LCD_D); /* Read */ |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
97 |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
98 return (a); |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
99 } |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
100 |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
101 void |
9 | 102 lcd_startgram(uint16_t x, uint16_t y) { |
103 lcd_writereg(0x20, x); | |
104 lcd_writereg(0x21, y); | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
105 *(__IO uint16_t *)(Bank1_LCD_C) = 0x22; /* Start GRAM write */ |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
106 } |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
107 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
108 void |
9 | 109 lcd_writedata(uint16_t val) { |
4
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
110 *(__IO uint16_t *)(Bank1_LCD_D) = val; |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
111 } |
2c87e30c982d
Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents:
3
diff
changeset
|
112 |
5
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
113 void |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
114 lcd_setpwm(uint16_t val) { |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
115 TIM_OCInitTypeDef TIM_OCInitStructure; |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
116 |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
117 /* Channel 2 configuration in PWM mode */ |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
118 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
119 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
120 TIM_OCInitStructure.TIM_Pulse = val; |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
121 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
122 |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
123 TIM_OC2Init(TIM4, &TIM_OCInitStructure); |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
124 |
efa2c22266e3
PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents:
4
diff
changeset
|
125 } |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
126 |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
127 void |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
128 lcd_init(void) { |
9 | 129 uint16_t id, x, y; |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
130 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
131 /* Initialise LCD panel */ |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
132 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
133 /* Pull reset pin low */ |
64
ff29436c0224
- Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents:
62
diff
changeset
|
134 GPIO_SetBits(GPIOE, GPIO_Pin_1); |
62
bb52e6dad784
The LCD works better when the GPIO clocks are enabled before frobbing them.
Daniel O'Connor <darius@dons.net.au>
parents:
9
diff
changeset
|
135 delay(10); |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
136 GPIO_ResetBits(GPIOE, GPIO_Pin_1); |
64
ff29436c0224
- Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents:
62
diff
changeset
|
137 delay(2000); |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
138 GPIO_SetBits(GPIOE, GPIO_Pin_1); |
62
bb52e6dad784
The LCD works better when the GPIO clocks are enabled before frobbing them.
Daniel O'Connor <darius@dons.net.au>
parents:
9
diff
changeset
|
139 delay(500); |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
140 |
9 | 141 id = lcd_readreg(0x00); |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
142 if (id != 0x9325) { |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
143 printf("LCD ID doesn't match, expected 0x9325 got 0x%x\r\n", id); |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
144 return; |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
145 } |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
146 printf("LCD ID matches\r\n"); |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
147 |
9 | 148 lcd_writereg(0x00e3, 0x3008); /* Set internal timing (not documented) */ |
149 lcd_writereg(0x00e7, 0x0012); /* Set internal timing (not documented) */ | |
150 lcd_writereg(0x00ef, 0x1231); /* Set internal timing (not documented) */ | |
151 lcd_writereg(0x0000, 0x0001); /* Start Oscillation */ | |
64
ff29436c0224
- Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents:
62
diff
changeset
|
152 delay(50000); |
9 | 153 lcd_writereg(0x0001, 0x0100); /* set SS (S720 -> S1) */ |
154 lcd_writereg(0x0002, 0x0700); /* set line inversion (B/C + EOR) */ | |
155 lcd_writereg(0x0004, 0x0000); /* no resizing */ | |
156 lcd_writereg(0x0008, 0x0202); /* set the back porch and front porch (2 lines each) */ | |
157 lcd_writereg(0x0009, 0x0000); /* set non-display area refresh cycle ISC[3:0] */ | |
158 lcd_writereg(0x000a, 0x0000); /* FMARK function */ | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
159 |
9 | 160 lcd_writereg(0x000c, 0x0000); /* RGB ctl - Internal clock, 18bit interface */ |
161 lcd_writereg(0x000d, 0x0000); /* Frame marker Position */ | |
162 lcd_writereg(0x000f, 0x0000); /* RGB interface polarity */ | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
163 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
164 /* Power On sequence */ |
9 | 165 lcd_writereg(0x0010, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ |
166 lcd_writereg(0x0011, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */ | |
167 lcd_writereg(0x0012, 0x0000); /* VREG1OUT voltage */ | |
168 lcd_writereg(0x0013, 0x0000); /* VDV[4:0] for VCOM amplitude */ | |
64
ff29436c0224
- Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents:
62
diff
changeset
|
169 delay(200000); /* Dis-charge capacitor power voltage */ |
9 | 170 lcd_writereg(0x0010, 0x1690); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ |
171 lcd_writereg(0x0011, 0x0227); /* R11h = 0x0221 at VCI = 3.3V, DC1[2:0], DC0[2:0], VC[2:0] */ | |
64
ff29436c0224
- Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents:
62
diff
changeset
|
172 delay(50000); /* delay 50ms */ |
9 | 173 lcd_writereg(0x0012, 0x001c); /* External reference voltage= Vci; */ |
64
ff29436c0224
- Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents:
62
diff
changeset
|
174 delay(50000); /* delay 50ms */ |
9 | 175 lcd_writereg(0x0013, 0x1800); /* R13 = 1200 when R12 = 009D; VDV[4:0] for VCOM amplitude */ |
176 lcd_writereg(0x0029, 0x001c); /* R29 = 000C when R12 = 009D; VCM[5:0] for VCOMH */ | |
177 lcd_writereg(0x002b, 0x000d); /* Frame Rate = 91Hz */ | |
64
ff29436c0224
- Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents:
62
diff
changeset
|
178 delay(50000); /* delay 50ms */ |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
179 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
180 /* Set GRAM area */ |
9 | 181 lcd_writereg(0x0050, 0x0000); /* Horizontal GRAM Start Address */ |
182 lcd_writereg(0x0051, 0x00ef); /* Horizontal GRAM End Address */ | |
183 lcd_writereg(0x0052, 0x0000); /* Vertical GRAM Start Address */ | |
184 lcd_writereg(0x0053, 0x013f); /* Vertical GRAM Start Address */ | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
185 |
9 | 186 lcd_writereg(0x0060, 0xa700); /* Gate Scan Line, drive G320 -> G1 */ |
187 lcd_writereg(0x0061, 0x0003); /* VLE & REV */ | |
188 lcd_writereg(0x006a, 0x0000); /* set scrolling line */ | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
189 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
190 /* Partial Display Control */ |
9 | 191 lcd_writereg(0x0080, 0x0000); /* Image 1 */ |
192 lcd_writereg(0x0081, 0x0000); | |
193 lcd_writereg(0x0082, 0x0000); | |
194 lcd_writereg(0x0083, 0x0000); /* Image 2 */ | |
195 lcd_writereg(0x0084, 0x0000); | |
196 lcd_writereg(0x0085, 0x0000); | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
197 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
198 /* Panel Control */ |
9 | 199 lcd_writereg(0x0090, 0x0010); |
200 lcd_writereg(0x0092, 0x0000); | |
201 lcd_writereg(0x0093, 0x0003); | |
202 lcd_writereg(0x0095, 0x0110); | |
203 lcd_writereg(0x0097, 0x0000); /* Undocumented */ | |
204 lcd_writereg(0x0098, 0x0000); /* Undocumented */ | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
205 |
9 | 206 lcd_writereg(0x0007, 0x0133); /* Display on, 262k colour mode (vs 8) */ |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
207 |
9 | 208 lcd_writereg(0x0003, 0x1030); /* set GRAM write direction and enable BGR, 64K colours, 1 transfers/pixel. */ |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
209 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
210 /* Adjust the Gamma Curve */ |
9 | 211 lcd_writereg(0x0030, 0x0006); |
212 lcd_writereg(0x0031, 0x0101); | |
213 lcd_writereg(0x0032, 0x0003); | |
214 lcd_writereg(0x0035, 0x0106); | |
215 lcd_writereg(0x0036, 0x0b02); | |
216 lcd_writereg(0x0037, 0x0302); | |
217 lcd_writereg(0x0038, 0x0707); | |
218 lcd_writereg(0x0039, 0x0007); | |
219 lcd_writereg(0x003c, 0x0600); | |
220 lcd_writereg(0x003d, 0x020b); | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
221 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
222 fputs("Testing\r\n", stdout); |
9 | 223 lcd_startgram(0, 0); |
224 lcd_writedata(0xa5a5); | |
225 lcd_writedata(0x5a5a); | |
226 lcd_startgram(0, 0); | |
227 if ((id = lcd_readdata(1)) != 0xa5a5) | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
228 printf("Expected 0xa5a5 got 0x%04x\r\n", id); |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
229 |
9 | 230 if ((id = lcd_readdata(0)) != 0x5a5a) |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
231 printf("Expected 0x5a5a got 0x%04x\r\n", id); |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
232 |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
233 fputs("Filling\r\n", stdout); |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
234 /* Fill panel */ |
9 | 235 lcd_startgram(0, 0); |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
236 |
9 | 237 for (y = 0; y < 320; y++) |
238 for (x = 0; x < 240; x++) | |
239 lcd_writedata(LCD_BLACK); | |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
240 } |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
241 |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
242 void |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
243 lcd_pixel(uint16_t x, uint16_t y, uint16_t colour) { |
9 | 244 if (x > LCD_WIDTH || y > LCD_HEIGHT) |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
245 return; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
246 |
9 | 247 /* Rotate for landscape */ |
248 lcd_startgram(y, x); | |
249 lcd_writedata(colour); | |
7
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
250 } |
9404b9869c27
Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents:
5
diff
changeset
|
251 |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
252 /* |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
253 * Draw a circle |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
254 * From http://en.wikipedia.org/wiki/Midpoint_circle_algorithm |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
255 */ |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
256 void |
9 | 257 lcd_circle(uint16_t x0, uint16_t y0, uint16_t radius, uint8_t fill, uint16_t colour) { |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
258 int16_t f; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
259 uint16_t ddF_x, ddF_y, x, y; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
260 |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
261 f = 1 - radius; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
262 ddF_x = 1; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
263 ddF_y = -2 * radius; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
264 x = 0; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
265 y = radius; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
266 |
9 | 267 |
268 if (fill) { | |
269 lcd_line(x0, y0 + radius, x0, y0 - radius, colour); | |
270 lcd_line(x0 + radius, y0, x0 - radius, y0, colour); | |
271 } else { | |
272 lcd_pixel(x0, y0 + radius, colour); | |
273 lcd_pixel(x0, y0 - radius, colour); | |
274 lcd_pixel(x0 + radius, y0, colour); | |
275 lcd_pixel(x0 - radius, y0, colour); | |
276 } | |
277 | |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
278 while(x < y) { |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
279 if(f >= 0) { |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
280 y--; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
281 ddF_y += 2; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
282 f += ddF_y; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
283 } |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
284 x++; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
285 ddF_x += 2; |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
286 f += ddF_x; |
9 | 287 if (fill) { |
288 lcd_line(x0 + x, y0 + y, x0 - x, y0 + y, colour); | |
289 lcd_line(x0 + x, y0 - y, x0 - x, y0 - y, colour); | |
290 lcd_line(x0 + y, y0 + x, x0 - y, y0 + x, colour); | |
291 lcd_line(x0 + y, y0 - x, x0 - y, y0 - x, colour); | |
292 } else { | |
293 lcd_pixel(x0 + x, y0 + y, colour); | |
294 lcd_pixel(x0 - x, y0 + y, colour); | |
295 lcd_pixel(x0 + x, y0 - y, colour); | |
296 lcd_pixel(x0 - x, y0 - y, colour); | |
297 lcd_pixel(x0 + y, y0 + x, colour); | |
298 lcd_pixel(x0 - y, y0 + x, colour); | |
299 lcd_pixel(x0 + y, y0 - x, colour); | |
300 lcd_pixel(x0 - y, y0 - x, colour); | |
301 } | |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
302 } |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
303 } |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
304 |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
305 |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
306 /* |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
307 * Draw a line |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
308 * From http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
309 */ |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
310 void |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
311 lcd_line(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t colour) { |
9 | 312 uint16_t dx, dy; |
313 int16_t sx, sy, err, e2; | |
314 | |
315 dx = abs(x1 - x0); | |
316 dy = abs(y1 - y0); | |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
317 |
9 | 318 if (x0 < x1) |
319 sx = 1; | |
320 else | |
321 sx = -1; | |
322 | |
323 if (y0 < y1) | |
324 sy = 1; | |
325 else | |
326 sy = -1; | |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
327 |
9 | 328 err = dx - dy; |
329 | |
330 while (1) { | |
331 | |
332 lcd_pixel(x0, y0, colour); | |
333 | |
334 if (x0 == x1 && y0 == y1) | |
335 break; | |
336 | |
337 e2 = 2 * err; | |
338 | |
339 if (e2 > -dy) { | |
340 err = err - dy; | |
341 x0 = x0 + sx; | |
342 } | |
343 | |
344 if (e2 < dx) { | |
345 err = err + dx; | |
346 y0 = y0 + sy; | |
8
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
347 } |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
348 } |
58d76cf522ff
Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents:
7
diff
changeset
|
349 } |
9 | 350 |
351 static void | |
352 _lcd_ellipsedraw(uint16_t xc, uint16_t yc, uint16_t x, uint16_t y, uint8_t fill, uint16_t colour) { | |
353 if (fill) { | |
354 lcd_line(xc + x, yc + y, xc - x, yc + y, colour); | |
355 lcd_line(xc - x, yc - y, xc + x, yc - y, colour); | |
356 } else { | |
357 lcd_pixel(xc + x, yc + y, colour); /* 1st quadrant */ | |
358 lcd_pixel(xc - x, yc + y, colour); /* 2nd quadrant */ | |
359 lcd_pixel(xc - x, yc - y, colour); /* 3rd quadrant */ | |
360 lcd_pixel(xc + x, yc - y, colour); /* 4th quadrant */ | |
361 } | |
362 } | |
363 | |
364 /* Draw an ellipse, from | |
365 * http://rooparam.blogspot.com.au/2009/09/midpoint-ellipse-algorithm.html | |
366 */ | |
367 void lcd_ellipse(int xc, int yc, int rx, int ry, uint8_t fill, uint16_t colour) { | |
368 long long int rx_2 = rx * rx, ry_2 = ry * ry; | |
369 long long int p = ry_2 - rx_2 * ry + (ry_2 >> 2); | |
370 int x = 0, y = ry; | |
371 long long int two_ry_2_x = 0, two_rx_2_y = (rx_2 << 1) * y; | |
372 | |
373 _lcd_ellipsedraw(xc, yc, x, y, fill, colour); | |
374 | |
375 while (two_rx_2_y >= two_ry_2_x) { | |
376 x++; | |
377 two_ry_2_x += ry_2 << 1; | |
378 | |
379 p += two_ry_2_x + ry_2; | |
380 | |
381 if (p >= 0){ | |
382 y--; | |
383 two_rx_2_y -= rx_2 << 1; | |
384 | |
385 p -= two_rx_2_y; | |
386 } | |
387 _lcd_ellipsedraw(xc, yc, x, y, fill, colour); | |
388 } | |
389 | |
390 p = (long long int)(ry_2 * (x + 1 / 2.0) * (x + 1 / 2.0) + rx_2 * (y - 1) * (y - 1) - rx_2 * ry_2); | |
391 while (y >= 0) { | |
392 p += rx_2; | |
393 y--; | |
394 two_rx_2_y -= rx_2 << 1; | |
395 p -= two_rx_2_y; | |
396 | |
397 if (p <= 0) { | |
398 x++; | |
399 two_ry_2_x += ry_2 << 1; | |
400 p += two_ry_2_x; | |
401 } | |
402 _lcd_ellipsedraw(xc, yc, x, y, fill, colour); | |
403 } | |
404 } | |
405 | |
406 void lcd_stripes(void) { | |
407 uint16_t x, y, mag, err; | |
408 | |
409 lcd_startgram(0, 0); | |
410 | |
411 mag = err = 0; | |
412 for (y = 0; y < 320; y++) { | |
413 for (x = 0; x < 240; x++) { | |
414 if (((x / 80) % 3) == 0) { | |
415 lcd_writedata(RGB24_565(mag, 0, 0)); | |
416 } else if (((x / 80) % 3) == 1) { | |
417 lcd_writedata(RGB24_565(0, mag, 0)); | |
418 } else { | |
419 lcd_writedata(RGB24_565(0, 0, mag)); | |
420 } | |
421 } | |
422 colinc(&mag, &err, COLINCVAL, 10000); | |
423 } | |
424 } | |
425 uint16_t | |
426 lcd_parsecol(char c) { | |
427 c = toupper(c); | |
428 if (c == 'R') | |
429 return(LCD_RED); | |
430 else if (c == 'G') | |
431 return(LCD_GREEN); | |
432 else if (c == 'B') | |
433 return(LCD_BLUE); | |
434 else if (c == 'L') | |
435 return(LCD_BLACK); | |
436 else | |
437 return(LCD_WHITE); | |
438 | |
439 } | |
440 |