annotate lcd.c @ 8:58d76cf522ff

Split out code into separate files.
author Daniel O'Connor <darius@dons.net.au>
date Sat, 04 Feb 2012 13:29:31 +1030
parents 9404b9869c27
children be0a1ac64d97
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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>
3
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
60 #include "stm32f10x.h"
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
61 #include "lcd.h"
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
62 #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
63
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
64 #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
65 #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
66
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
67 void
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
68 lcd_wr_reg(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
69 *(__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
70 *(__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
71 }
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
72
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
73 uint16_t
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
74 lcd_rd_reg(uint16_t index) {
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
75 *(__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
76 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
77 }
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
78
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
79 uint16_t
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
80 lcd_rd_data(int first) {
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
81 uint16_t a = 0;
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
82 if (first)
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
83 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
84 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
85
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
86 return (a);
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
87 }
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
88
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
89 void
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
90 lcd_wr_startdata(uint16_t x, uint16_t y) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
91 lcd_wr_reg(0x20, x);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
92 lcd_wr_reg(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
93 *(__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
94 }
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
95
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
96 void
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
97 lcd_wr_data(uint16_t val) {
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
98 *(__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
99 }
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
100
5
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
101 void
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
102 lcd_setpwm(uint16_t val) {
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
103 TIM_OCInitTypeDef TIM_OCInitStructure;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
104
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
105 /* Channel 2 configuration in PWM mode */
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
106 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
107 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
108 TIM_OCInitStructure.TIM_Pulse = val;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
109 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
110
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
111 TIM_OC2Init(TIM4, &TIM_OCInitStructure);
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
112
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
113 }
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
114
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
115 void
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
116 lcd_init(void) {
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
117 uint16_t 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
118
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
119 /* 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
120
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
121 /* Pull reset pin low */
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
122 delay(1);
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
123 GPIO_ResetBits(GPIOE, GPIO_Pin_1);
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
124 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
125 GPIO_SetBits(GPIOE, GPIO_Pin_1);
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
126 delay(50);
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
127
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
128 id = lcd_rd_reg(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
129 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
130 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
131 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
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 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
134
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
135 lcd_wr_reg(0x00e3, 0x3008); /* Set internal timing (not documented) */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
136 lcd_wr_reg(0x00e7, 0x0012); /* Set internal timing (not documented) */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
137 lcd_wr_reg(0x00ef, 0x1231); /* Set internal timing (not documented) */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
138 lcd_wr_reg(0x0000, 0x0001); /* Start Oscillation */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
139 delay(50);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
140 lcd_wr_reg(0x0001, 0x0100); /* set SS (S720 -> S1) */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
141 lcd_wr_reg(0x0002, 0x0700); /* set line inversion (B/C + EOR) */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
142 lcd_wr_reg(0x0004, 0x0000); /* no resizing */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
143 lcd_wr_reg(0x0008, 0x0202); /* set the back porch and front porch (2 lines each) */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
144 lcd_wr_reg(0x0009, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
145 lcd_wr_reg(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
146
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
147 lcd_wr_reg(0x000c, 0x0000); /* RGB ctl - Internal clock, 18bit interface */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
148 lcd_wr_reg(0x000d, 0x0000); /* Frame marker Position */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
149 lcd_wr_reg(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
150
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
151 /* Power On sequence */
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
152 lcd_wr_reg(0x0010, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
153 lcd_wr_reg(0x0011, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
154 lcd_wr_reg(0x0012, 0x0000); /* VREG1OUT voltage */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
155 lcd_wr_reg(0x0013, 0x0000); /* VDV[4:0] for VCOM amplitude */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
156 delay(200); /* Dis-charge capacitor power voltage */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
157 lcd_wr_reg(0x0010, 0x1690); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
158 lcd_wr_reg(0x0011, 0x0227); /* R11h = 0x0221 at VCI = 3.3V, DC1[2:0], DC0[2:0], VC[2:0] */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
159 delay(50); /* delay 50ms */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
160 lcd_wr_reg(0x0012, 0x001c); /* External reference voltage= Vci; */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
161 delay(50); /* delay 50ms */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
162 lcd_wr_reg(0x0013, 0x1800); /* R13 = 1200 when R12 = 009D; VDV[4:0] for VCOM amplitude */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
163 lcd_wr_reg(0x0029, 0x001c); /* R29 = 000C when R12 = 009D; VCM[5:0] for VCOMH */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
164 lcd_wr_reg(0x002b, 0x000d); /* Frame Rate = 91Hz */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
165 delay(50); /* 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
166
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
167 /* Set GRAM area */
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
168 lcd_wr_reg(0x0050, 0x0000); /* Horizontal GRAM Start Address */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
169 lcd_wr_reg(0x0051, 0x00ef); /* Horizontal GRAM End Address */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
170 lcd_wr_reg(0x0052, 0x0000); /* Vertical GRAM Start Address */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
171 lcd_wr_reg(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
172
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
173 lcd_wr_reg(0x0060, 0xa700); /* Gate Scan Line, drive G320 -> G1 */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
174 lcd_wr_reg(0x0061, 0x0003); /* VLE & REV */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
175 lcd_wr_reg(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
176
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
177 /* Partial Display Control */
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
178 lcd_wr_reg(0x0080, 0x0000); /* Image 1 */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
179 lcd_wr_reg(0x0081, 0x0000);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
180 lcd_wr_reg(0x0082, 0x0000);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
181 lcd_wr_reg(0x0083, 0x0000); /* Image 2 */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
182 lcd_wr_reg(0x0084, 0x0000);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
183 lcd_wr_reg(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
184
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 /* Panel Control */
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
186 lcd_wr_reg(0x0090, 0x0010);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
187 lcd_wr_reg(0x0092, 0x0000);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
188 lcd_wr_reg(0x0093, 0x0003);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
189 lcd_wr_reg(0x0095, 0x0110);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
190 lcd_wr_reg(0x0097, 0x0000); /* Undocumented */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
191 lcd_wr_reg(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
192
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
193 lcd_wr_reg(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
194
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
195 lcd_wr_reg(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
196
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 /* Adjust the Gamma Curve */
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
198 lcd_wr_reg(0x0030, 0x0006);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
199 lcd_wr_reg(0x0031, 0x0101);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
200 lcd_wr_reg(0x0032, 0x0003);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
201 lcd_wr_reg(0x0035, 0x0106);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
202 lcd_wr_reg(0x0036, 0x0b02);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
203 lcd_wr_reg(0x0037, 0x0302);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
204 lcd_wr_reg(0x0038, 0x0707);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
205 lcd_wr_reg(0x0039, 0x0007);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
206 lcd_wr_reg(0x003c, 0x0600);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
207 lcd_wr_reg(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
208
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 fputs("Testing\r\n", stdout);
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
210 lcd_wr_startdata(0, 0);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
211 lcd_wr_data(0xa5a5);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
212 lcd_wr_data(0x5a5a);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
213 lcd_wr_startdata(0, 0);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
214 if ((id = lcd_rd_data(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
215 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
216
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
217 if ((id = lcd_rd_data(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
218 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
219
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
220 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
221 /* Fill panel */
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
222 lcd_wr_startdata(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
223
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
224 for (int x = 0; x < 320; x++) {
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
225 for (int y = 0; y < 240; y++) {
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
226 if (((x / 5) % 3) == 0)
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
227 lcd_wr_data(LCD_RED);
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 else if (((x / 5) % 3) == 1)
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
229 lcd_wr_data(LCD_GREEN);
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
230 else
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
231 lcd_wr_data(LCD_BLUE);
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
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 }
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
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
235 lcd_circle(50, 50, 20, LCD_BLACK);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
236
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
237 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
238
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
239 void
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
240 lcd_pixel(uint16_t x, uint16_t y, uint16_t colour) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
241 if (x > LCD_HEIGHT || y > LCD_WIDTH)
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
242 return;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
243
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
244 lcd_wr_startdata(x, y);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
245 lcd_wr_data(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
246 }
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
247
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
248 /*
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
249 * Draw a circle
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
250 * 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
251 */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
252 void
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
253 lcd_circle(uint16_t x0, uint16_t y0, uint16_t radius, uint16_t colour) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
254 int16_t f;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
255 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
256
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
257 f = 1 - radius;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
258 ddF_x = 1;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
259 ddF_y = -2 * radius;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
260 x = 0;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
261 y = radius;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
262
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
263 lcd_pixel(x0, y0 + radius, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
264 lcd_pixel(x0, y0 - radius, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
265 lcd_pixel(x0 + radius, y0, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
266 lcd_pixel(x0 - radius, y0, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
267
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
268 while(x < y) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
269 // ddF_x == 2 * x + 1;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
270 // ddF_y == -2 * y;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
271 // f == x*x + y*y - radius*radius + 2*x - y + 1;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
272 if(f >= 0) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
273 y--;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
274 ddF_y += 2;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
275 f += ddF_y;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
276 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
277 x++;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
278 ddF_x += 2;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
279 f += ddF_x;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
280 lcd_pixel(x0 + x, y0 + y, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
281 lcd_pixel(x0 - x, y0 + y, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
282 lcd_pixel(x0 + x, y0 - y, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
283 lcd_pixel(x0 - x, y0 - y, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
284 lcd_pixel(x0 + y, y0 + x, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
285 lcd_pixel(x0 - y, y0 + x, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
286 lcd_pixel(x0 + y, y0 - x, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
287 lcd_pixel(x0 - y, y0 - x, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
288 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
289 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
290
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
291
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
292 /*
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
293 * Draw a line
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
294 * 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
295 */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
296 void
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
297 lcd_line(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t colour) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
298 uint16_t dx, dy, d, x, y;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
299
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
300 dx = x1 - x0;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
301 dy = y1 - y0;
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 d = 2 * dy - dx;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
304 lcd_pixel(x0, y0, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
305 y = y0;
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 for (x = x0 + 1; x <= x1; x++) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
308 if (d > 0) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
309 y++;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
310 lcd_pixel(x, y, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
311 d += 2 * dy - 2 * dx;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
312 } else {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
313 lcd_pixel(x, y, colour);
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
314 d += 2 * dy;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
315 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
316 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
317 }