diff options
| author | Joël Schulz-Ansres <[email protected]> | 2024-05-21 12:17:51 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2024-05-21 22:44:40 +0200 |
| commit | 4e42eaef7c423f7f15af38991d4444141a8af1c2 (patch) | |
| tree | b6cc8088011941955d20c211b741f725c0dc7458 /examples/stm32f469 | |
| parent | bb82a1bd607d717d845baa5d6d473f53ee17b43e (diff) | |
Add dsi example
Diffstat (limited to 'examples/stm32f469')
| -rw-r--r-- | examples/stm32f469/.cargo/config.toml | 9 | ||||
| -rw-r--r-- | examples/stm32f469/Cargo.toml | 22 | ||||
| -rw-r--r-- | examples/stm32f469/build.rs | 5 | ||||
| -rw-r--r-- | examples/stm32f469/src/bin/dsi_bsp.rs | 694 | ||||
| -rw-r--r-- | examples/stm32f469/src/bin/ferris.bin | 70 |
5 files changed, 800 insertions, 0 deletions
diff --git a/examples/stm32f469/.cargo/config.toml b/examples/stm32f469/.cargo/config.toml new file mode 100644 index 000000000..05250954f --- /dev/null +++ b/examples/stm32f469/.cargo/config.toml | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | [target.'cfg(all(target_arch = "arm", target_os = "none"))'] | ||
| 2 | # replace STM32F429ZITx with your chip as listed in `probe-rs chip list` | ||
| 3 | runner = "probe-rs run --chip STM32F469NIHx" | ||
| 4 | |||
| 5 | [build] | ||
| 6 | target = "thumbv7em-none-eabi" | ||
| 7 | |||
| 8 | [env] | ||
| 9 | DEFMT_LOG = "trace" | ||
diff --git a/examples/stm32f469/Cargo.toml b/examples/stm32f469/Cargo.toml new file mode 100644 index 000000000..7718a46c1 --- /dev/null +++ b/examples/stm32f469/Cargo.toml | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | [package] | ||
| 2 | edition = "2021" | ||
| 3 | name = "embassy-stm32f469-examples" | ||
| 4 | version = "0.1.0" | ||
| 5 | license = "MIT OR Apache-2.0" | ||
| 6 | |||
| 7 | [dependencies] | ||
| 8 | # Specific examples only for stm32f469 | ||
| 9 | embassy-stm32 = { version = "0.1.0", path = "../../embassy-stm32", features = ["defmt", "stm32f469ni", "unstable-pac", "memory-x", "time-driver-any", "exti", "chrono"] } | ||
| 10 | embassy-executor = { version = "0.5.0", path = "../../embassy-executor", features = ["task-arena-size-32768", "arch-cortex-m", "executor-thread", "executor-interrupt", "defmt", "integrated-timers"] } | ||
| 11 | embassy-time = { version = "0.3.0", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime", "tick-hz-32_768"] } | ||
| 12 | |||
| 13 | defmt = "0.3" | ||
| 14 | defmt-rtt = "0.4" | ||
| 15 | |||
| 16 | cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } | ||
| 17 | cortex-m-rt = "0.7.0" | ||
| 18 | embedded-hal = "1.0.0" | ||
| 19 | panic-probe = { version = "0.3", features = ["print-defmt"] } | ||
| 20 | |||
| 21 | [profile.release] | ||
| 22 | debug = 2 | ||
diff --git a/examples/stm32f469/build.rs b/examples/stm32f469/build.rs new file mode 100644 index 000000000..8cd32d7ed --- /dev/null +++ b/examples/stm32f469/build.rs | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | fn main() { | ||
| 2 | println!("cargo:rustc-link-arg-bins=--nmagic"); | ||
| 3 | println!("cargo:rustc-link-arg-bins=-Tlink.x"); | ||
| 4 | println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); | ||
| 5 | } | ||
diff --git a/examples/stm32f469/src/bin/dsi_bsp.rs b/examples/stm32f469/src/bin/dsi_bsp.rs new file mode 100644 index 000000000..e4e9e9c01 --- /dev/null +++ b/examples/stm32f469/src/bin/dsi_bsp.rs | |||
| @@ -0,0 +1,694 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::*; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_stm32::dsihost::{blocking_delay_ms, DsiHost, PacketType}; | ||
| 7 | use embassy_stm32::gpio::{Level, Output, Speed}; | ||
| 8 | use embassy_stm32::ltdc::Ltdc; | ||
| 9 | use embassy_stm32::pac::dsihost::regs::{Ier0, Ier1}; | ||
| 10 | use embassy_stm32::pac::ltdc::vals::{Bf1, Bf2, Depol, Hspol, Imr, Pcpol, Pf, Vspol}; | ||
| 11 | use embassy_stm32::pac::{DSIHOST, LTDC}; | ||
| 12 | use embassy_stm32::rcc::{ | ||
| 13 | AHBPrescaler, APBPrescaler, Hse, HseMode, Pll, PllMul, PllPDiv, PllPreDiv, PllQDiv, PllRDiv, PllSource, Sysclk, | ||
| 14 | }; | ||
| 15 | use embassy_stm32::time::mhz; | ||
| 16 | use embassy_time::Timer; | ||
| 17 | use {defmt_rtt as _, panic_probe as _}; | ||
| 18 | |||
| 19 | enum _Orientation { | ||
| 20 | Landscape, | ||
| 21 | Portrait, | ||
| 22 | } | ||
| 23 | |||
| 24 | const _LCD_ORIENTATION: _Orientation = _Orientation::Landscape; | ||
| 25 | const LCD_X_SIZE: u16 = 800; | ||
| 26 | const LCD_Y_SIZE: u16 = 480; | ||
| 27 | |||
| 28 | static FERRIS_IMAGE: &[u8; 1536000] = include_bytes!("ferris.bin"); | ||
| 29 | |||
| 30 | // This example allows to display an image on the STM32F469NI-DISCO boards | ||
| 31 | // with the Revision C, that is at least the boards marked DK32F469I$AU1. | ||
| 32 | // These boards have the NT35510 display driver. This example does not work | ||
| 33 | // for the older revisions with OTM8009A, though there are lots of C-examples | ||
| 34 | // available online where the correct config for the OTM8009A could be gotten from. | ||
| 35 | #[embassy_executor::main] | ||
| 36 | async fn main(_spawner: Spawner) { | ||
| 37 | let mut config = embassy_stm32::Config::default(); | ||
| 38 | config.rcc.sys = Sysclk::PLL1_P; | ||
| 39 | config.rcc.ahb_pre = AHBPrescaler::DIV1; | ||
| 40 | config.rcc.apb1_pre = APBPrescaler::DIV4; | ||
| 41 | config.rcc.apb2_pre = APBPrescaler::DIV2; | ||
| 42 | |||
| 43 | // HSE is on and ready | ||
| 44 | config.rcc.hse = Some(Hse { | ||
| 45 | freq: mhz(8), | ||
| 46 | mode: HseMode::Oscillator, | ||
| 47 | }); | ||
| 48 | config.rcc.pll_src = PllSource::HSE; | ||
| 49 | |||
| 50 | config.rcc.pll = Some(Pll { | ||
| 51 | prediv: PllPreDiv::DIV8, // PLLM | ||
| 52 | mul: PllMul::MUL360, // PLLN | ||
| 53 | divp: Some(PllPDiv::DIV2), | ||
| 54 | divq: Some(PllQDiv::DIV7), // was DIV4, but STM BSP example uses 7 | ||
| 55 | divr: Some(PllRDiv::DIV6), | ||
| 56 | }); | ||
| 57 | |||
| 58 | // This seems to be working, the values in the RCC.PLLSAICFGR are correct according to the debugger. Also on and ready according to CR | ||
| 59 | config.rcc.pllsai = Some(Pll { | ||
| 60 | prediv: PllPreDiv::DIV8, // Actually ignored | ||
| 61 | mul: PllMul::MUL384, // PLLN | ||
| 62 | divp: None, // PLLP | ||
| 63 | divq: None, // PLLQ | ||
| 64 | divr: Some(PllRDiv::DIV7), // PLLR (Sai actually has special clockdiv register) | ||
| 65 | }); | ||
| 66 | |||
| 67 | let p = embassy_stm32::init(config); | ||
| 68 | info!("Starting..."); | ||
| 69 | |||
| 70 | let mut led = Output::new(p.PG6, Level::High, Speed::Low); | ||
| 71 | |||
| 72 | // According to UM for the discovery kit, PH7 is an active-low reset for the LCD and touchsensor | ||
| 73 | let mut reset = Output::new(p.PH7, Level::Low, Speed::High); | ||
| 74 | |||
| 75 | // CubeMX example waits 20 ms before de-asserting reset | ||
| 76 | embassy_time::block_for(embassy_time::Duration::from_millis(20)); | ||
| 77 | |||
| 78 | // Disable the reset signal and wait 140ms as in the Linux driver (CubeMX waits only 20) | ||
| 79 | reset.set_high(); | ||
| 80 | embassy_time::block_for(embassy_time::Duration::from_millis(140)); | ||
| 81 | |||
| 82 | let mut ltdc = Ltdc::new(p.LTDC); | ||
| 83 | let mut dsi = DsiHost::new(p.DSIHOST, p.PJ2); | ||
| 84 | let version = dsi.get_version(); | ||
| 85 | defmt::warn!("en: {:x}", version); | ||
| 86 | |||
| 87 | // Disable the DSI wrapper | ||
| 88 | dsi.disable_wrapper_dsi(); | ||
| 89 | |||
| 90 | // Disable the DSI host | ||
| 91 | dsi.disable(); | ||
| 92 | |||
| 93 | // D-PHY clock and digital disable | ||
| 94 | DSIHOST.pctlr().modify(|w| { | ||
| 95 | w.set_cke(false); | ||
| 96 | w.set_den(false) | ||
| 97 | }); | ||
| 98 | |||
| 99 | // Turn off the DSI PLL | ||
| 100 | DSIHOST.wrpcr().modify(|w| w.set_pllen(false)); | ||
| 101 | |||
| 102 | // Disable the regulator | ||
| 103 | DSIHOST.wrpcr().write(|w| w.set_regen(false)); | ||
| 104 | |||
| 105 | // Enable regulator | ||
| 106 | info!("DSIHOST: enabling regulator"); | ||
| 107 | DSIHOST.wrpcr().write(|w| w.set_regen(true)); | ||
| 108 | |||
| 109 | for _ in 1..1000 { | ||
| 110 | // The regulator status (ready or not) can be monitored with the RRS flag in the DSI_WISR register. | ||
| 111 | // Once it is set, we stop waiting. | ||
| 112 | if DSIHOST.wisr().read().rrs() { | ||
| 113 | info!("DSIHOST Regulator ready"); | ||
| 114 | break; | ||
| 115 | } | ||
| 116 | embassy_time::block_for(embassy_time::Duration::from_millis(1)); | ||
| 117 | } | ||
| 118 | |||
| 119 | if !DSIHOST.wisr().read().rrs() { | ||
| 120 | defmt::panic!("DSIHOST: enabling regulator FAILED"); | ||
| 121 | } | ||
| 122 | |||
| 123 | // Set up PLL and enable it | ||
| 124 | DSIHOST.wrpcr().modify(|w| { | ||
| 125 | w.set_pllen(true); | ||
| 126 | w.set_ndiv(125); // PLL loop division factor set to 125 | ||
| 127 | w.set_idf(2); // PLL input divided by 2 | ||
| 128 | w.set_odf(0); // PLL output divided by 1 | ||
| 129 | }); | ||
| 130 | |||
| 131 | /* 500 MHz / 8 = 62.5 MHz = 62500 kHz */ | ||
| 132 | const LANE_BYTE_CLK_K_HZ: u16 = 62500; // https://github.com/STMicroelectronics/32f469idiscovery-bsp/blob/ec051de2bff3e1b73a9ccd49c9b85abf7320add9/stm32469i_discovery_lcd.c#L224C21-L224C26 | ||
| 133 | |||
| 134 | const _LCD_CLOCK: u16 = 27429; // https://github.com/STMicroelectronics/32f469idiscovery-bsp/blob/ec051de2bff3e1b73a9ccd49c9b85abf7320add9/stm32469i_discovery_lcd.c#L183 | ||
| 135 | |||
| 136 | /* TX_ESCAPE_CKDIV = f(LaneByteClk)/15.62 = 4 */ | ||
| 137 | const TX_ESCAPE_CKDIV: u8 = (LANE_BYTE_CLK_K_HZ / 15620) as u8; // https://github.com/STMicroelectronics/32f469idiscovery-bsp/blob/ec051de2bff3e1b73a9ccd49c9b85abf7320add9/stm32469i_discovery_lcd.c#L230 | ||
| 138 | |||
| 139 | for _ in 1..1000 { | ||
| 140 | embassy_time::block_for(embassy_time::Duration::from_millis(1)); | ||
| 141 | // The PLL status (lock or unlock) can be monitored with the PLLLS flag in the DSI_WISR register. | ||
| 142 | // Once it is set, we stop waiting. | ||
| 143 | if DSIHOST.wisr().read().pllls() { | ||
| 144 | info!("DSIHOST PLL locked"); | ||
| 145 | break; | ||
| 146 | } | ||
| 147 | } | ||
| 148 | |||
| 149 | if !DSIHOST.wisr().read().pllls() { | ||
| 150 | defmt::panic!("DSIHOST: enabling PLL FAILED"); | ||
| 151 | } | ||
| 152 | |||
| 153 | // Set the PHY parameters | ||
| 154 | |||
| 155 | // D-PHY clock and digital enable | ||
| 156 | DSIHOST.pctlr().write(|w| { | ||
| 157 | w.set_cke(true); | ||
| 158 | w.set_den(true); | ||
| 159 | }); | ||
| 160 | |||
| 161 | // Set Clock lane to high-speed mode and disable automatic clock lane control | ||
| 162 | DSIHOST.clcr().modify(|w| { | ||
| 163 | w.set_dpcc(true); | ||
| 164 | w.set_acr(false); | ||
| 165 | }); | ||
| 166 | |||
| 167 | // Set number of active data lanes to two (lanes 0 and 1) | ||
| 168 | DSIHOST.pconfr().modify(|w| w.set_nl(1)); | ||
| 169 | |||
| 170 | // Set the DSI clock parameters | ||
| 171 | |||
| 172 | // Set the TX escape clock division factor to 4 | ||
| 173 | DSIHOST.ccr().modify(|w| w.set_txeckdiv(TX_ESCAPE_CKDIV)); | ||
| 174 | |||
| 175 | // Calculate the bit period in high-speed mode in unit of 0.25 ns (UIX4) | ||
| 176 | // The equation is : UIX4 = IntegerPart( (1000/F_PHY_Mhz) * 4 ) | ||
| 177 | // Where : F_PHY_Mhz = (NDIV * HSE_Mhz) / (IDF * ODF) | ||
| 178 | // Set the bit period in high-speed mode | ||
| 179 | DSIHOST.wpcr0().modify(|w| w.set_uix4(8)); // 8 is set in the BSP example (confirmed with Debugger) | ||
| 180 | |||
| 181 | // Disable all error interrupts and reset the Error Mask | ||
| 182 | DSIHOST.ier0().write_value(Ier0(0)); | ||
| 183 | DSIHOST.ier1().write_value(Ier1(0)); | ||
| 184 | |||
| 185 | // Enable this to fix read timeout | ||
| 186 | DSIHOST.pcr().modify(|w| w.set_btae(true)); | ||
| 187 | |||
| 188 | const DSI_PIXEL_FORMAT_RGB888: u8 = 0x05; | ||
| 189 | const _DSI_PIXEL_FORMAT_ARGB888: u8 = 0x00; | ||
| 190 | |||
| 191 | const HACT: u16 = LCD_X_SIZE; | ||
| 192 | const VACT: u16 = LCD_Y_SIZE; | ||
| 193 | |||
| 194 | const VSA: u16 = 120; | ||
| 195 | const VBP: u16 = 150; | ||
| 196 | const VFP: u16 = 150; | ||
| 197 | const HSA: u16 = 2; | ||
| 198 | const HBP: u16 = 34; | ||
| 199 | const HFP: u16 = 34; | ||
| 200 | |||
| 201 | const VIRTUAL_CHANNEL_ID: u8 = 0; | ||
| 202 | |||
| 203 | const COLOR_CODING: u8 = DSI_PIXEL_FORMAT_RGB888; | ||
| 204 | const VS_POLARITY: bool = false; // DSI_VSYNC_ACTIVE_HIGH == 0 | ||
| 205 | const HS_POLARITY: bool = false; // DSI_HSYNC_ACTIVE_HIGH == 0 | ||
| 206 | const DE_POLARITY: bool = false; // DSI_DATA_ENABLE_ACTIVE_HIGH == 0 | ||
| 207 | const MODE: u8 = 2; // DSI_VID_MODE_BURST; /* Mode Video burst ie : one LgP per line */ | ||
| 208 | const NULL_PACKET_SIZE: u16 = 0xFFF; | ||
| 209 | const NUMBER_OF_CHUNKS: u16 = 0; | ||
| 210 | const PACKET_SIZE: u16 = HACT; /* Value depending on display orientation choice portrait/landscape */ | ||
| 211 | const HORIZONTAL_SYNC_ACTIVE: u16 = 4; // ((HSA as u32 * LANE_BYTE_CLK_K_HZ as u32 ) / LCD_CLOCK as u32 ) as u16; | ||
| 212 | const HORIZONTAL_BACK_PORCH: u16 = 77; //((HBP as u32 * LANE_BYTE_CLK_K_HZ as u32 ) / LCD_CLOCK as u32) as u16; | ||
| 213 | const HORIZONTAL_LINE: u16 = 1982; //(((HACT + HSA + HBP + HFP) as u32 * LANE_BYTE_CLK_K_HZ as u32 ) / LCD_CLOCK as u32 ) as u16; /* Value depending on display orientation choice portrait/landscape */ | ||
| 214 | // FIXME: Make depend on orientation | ||
| 215 | const VERTICAL_SYNC_ACTIVE: u16 = VSA; | ||
| 216 | const VERTICAL_BACK_PORCH: u16 = VBP; | ||
| 217 | const VERTICAL_FRONT_PORCH: u16 = VFP; | ||
| 218 | const VERTICAL_ACTIVE: u16 = VACT; | ||
| 219 | const LP_COMMAND_ENABLE: bool = true; /* Enable sending commands in mode LP (Low Power) */ | ||
| 220 | |||
| 221 | /* Largest packet size possible to transmit in LP mode in VSA, VBP, VFP regions */ | ||
| 222 | /* Only useful when sending LP packets is allowed while streaming is active in video mode */ | ||
| 223 | const LP_LARGEST_PACKET_SIZE: u8 = 16; | ||
| 224 | |||
| 225 | /* Largest packet size possible to transmit in LP mode in HFP region during VACT period */ | ||
| 226 | /* Only useful when sending LP packets is allowed while streaming is active in video mode */ | ||
| 227 | const LPVACT_LARGEST_PACKET_SIZE: u8 = 0; | ||
| 228 | |||
| 229 | const LPHORIZONTAL_FRONT_PORCH_ENABLE: bool = true; /* Allow sending LP commands during HFP period */ | ||
| 230 | const LPHORIZONTAL_BACK_PORCH_ENABLE: bool = true; /* Allow sending LP commands during HBP period */ | ||
| 231 | const LPVERTICAL_ACTIVE_ENABLE: bool = true; /* Allow sending LP commands during VACT period */ | ||
| 232 | const LPVERTICAL_FRONT_PORCH_ENABLE: bool = true; /* Allow sending LP commands during VFP period */ | ||
| 233 | const LPVERTICAL_BACK_PORCH_ENABLE: bool = true; /* Allow sending LP commands during VBP period */ | ||
| 234 | const LPVERTICAL_SYNC_ACTIVE_ENABLE: bool = true; /* Allow sending LP commands during VSync = VSA period */ | ||
| 235 | const FRAME_BTAACKNOWLEDGE_ENABLE: bool = false; /* Frame bus-turn-around acknowledge enable => false according to debugger */ | ||
| 236 | |||
| 237 | /* Select video mode by resetting CMDM and DSIM bits */ | ||
| 238 | DSIHOST.mcr().modify(|w| w.set_cmdm(false)); | ||
| 239 | DSIHOST.wcfgr().modify(|w| w.set_dsim(false)); | ||
| 240 | |||
| 241 | /* Configure the video mode transmission type */ | ||
| 242 | DSIHOST.vmcr().modify(|w| w.set_vmt(MODE)); | ||
| 243 | |||
| 244 | /* Configure the video packet size */ | ||
| 245 | DSIHOST.vpcr().modify(|w| w.set_vpsize(PACKET_SIZE)); | ||
| 246 | |||
| 247 | /* Set the chunks number to be transmitted through the DSI link */ | ||
| 248 | DSIHOST.vccr().modify(|w| w.set_numc(NUMBER_OF_CHUNKS)); | ||
| 249 | |||
| 250 | /* Set the size of the null packet */ | ||
| 251 | DSIHOST.vnpcr().modify(|w| w.set_npsize(NULL_PACKET_SIZE)); | ||
| 252 | |||
| 253 | /* Select the virtual channel for the LTDC interface traffic */ | ||
| 254 | DSIHOST.lvcidr().modify(|w| w.set_vcid(VIRTUAL_CHANNEL_ID)); | ||
| 255 | |||
| 256 | /* Configure the polarity of control signals */ | ||
| 257 | DSIHOST.lpcr().modify(|w| { | ||
| 258 | w.set_dep(DE_POLARITY); | ||
| 259 | w.set_hsp(HS_POLARITY); | ||
| 260 | w.set_vsp(VS_POLARITY); | ||
| 261 | }); | ||
| 262 | |||
| 263 | /* Select the color coding for the host */ | ||
| 264 | DSIHOST.lcolcr().modify(|w| w.set_colc(COLOR_CODING)); | ||
| 265 | |||
| 266 | /* Select the color coding for the wrapper */ | ||
| 267 | DSIHOST.wcfgr().modify(|w| w.set_colmux(COLOR_CODING)); | ||
| 268 | |||
| 269 | /* Set the Horizontal Synchronization Active (HSA) in lane byte clock cycles */ | ||
| 270 | DSIHOST.vhsacr().modify(|w| w.set_hsa(HORIZONTAL_SYNC_ACTIVE)); | ||
| 271 | |||
| 272 | /* Set the Horizontal Back Porch (HBP) in lane byte clock cycles */ | ||
| 273 | DSIHOST.vhbpcr().modify(|w| w.set_hbp(HORIZONTAL_BACK_PORCH)); | ||
| 274 | |||
| 275 | /* Set the total line time (HLINE=HSA+HBP+HACT+HFP) in lane byte clock cycles */ | ||
| 276 | DSIHOST.vlcr().modify(|w| w.set_hline(HORIZONTAL_LINE)); | ||
| 277 | |||
| 278 | /* Set the Vertical Synchronization Active (VSA) */ | ||
| 279 | DSIHOST.vvsacr().modify(|w| w.set_vsa(VERTICAL_SYNC_ACTIVE)); | ||
| 280 | |||
| 281 | /* Set the Vertical Back Porch (VBP)*/ | ||
| 282 | DSIHOST.vvbpcr().modify(|w| w.set_vbp(VERTICAL_BACK_PORCH)); | ||
| 283 | |||
| 284 | /* Set the Vertical Front Porch (VFP)*/ | ||
| 285 | DSIHOST.vvfpcr().modify(|w| w.set_vfp(VERTICAL_FRONT_PORCH)); | ||
| 286 | |||
| 287 | /* Set the Vertical Active period*/ | ||
| 288 | DSIHOST.vvacr().modify(|w| w.set_va(VERTICAL_ACTIVE)); | ||
| 289 | |||
| 290 | /* Configure the command transmission mode */ | ||
| 291 | DSIHOST.vmcr().modify(|w| w.set_lpce(LP_COMMAND_ENABLE)); | ||
| 292 | |||
| 293 | /* Low power largest packet size */ | ||
| 294 | DSIHOST.lpmcr().modify(|w| w.set_lpsize(LP_LARGEST_PACKET_SIZE)); | ||
| 295 | |||
| 296 | /* Low power VACT largest packet size */ | ||
| 297 | DSIHOST.lpmcr().modify(|w| w.set_lpsize(LP_LARGEST_PACKET_SIZE)); | ||
| 298 | DSIHOST.lpmcr().modify(|w| w.set_vlpsize(LPVACT_LARGEST_PACKET_SIZE)); | ||
| 299 | |||
| 300 | /* Enable LP transition in HFP period */ | ||
| 301 | DSIHOST.vmcr().modify(|w| w.set_lphfpe(LPHORIZONTAL_FRONT_PORCH_ENABLE)); | ||
| 302 | |||
| 303 | /* Enable LP transition in HBP period */ | ||
| 304 | DSIHOST.vmcr().modify(|w| w.set_lphbpe(LPHORIZONTAL_BACK_PORCH_ENABLE)); | ||
| 305 | |||
| 306 | /* Enable LP transition in VACT period */ | ||
| 307 | DSIHOST.vmcr().modify(|w| w.set_lpvae(LPVERTICAL_ACTIVE_ENABLE)); | ||
| 308 | |||
| 309 | /* Enable LP transition in VFP period */ | ||
| 310 | DSIHOST.vmcr().modify(|w| w.set_lpvfpe(LPVERTICAL_FRONT_PORCH_ENABLE)); | ||
| 311 | |||
| 312 | /* Enable LP transition in VBP period */ | ||
| 313 | DSIHOST.vmcr().modify(|w| w.set_lpvbpe(LPVERTICAL_BACK_PORCH_ENABLE)); | ||
| 314 | |||
| 315 | /* Enable LP transition in vertical sync period */ | ||
| 316 | DSIHOST.vmcr().modify(|w| w.set_lpvsae(LPVERTICAL_SYNC_ACTIVE_ENABLE)); | ||
| 317 | |||
| 318 | /* Enable the request for an acknowledge response at the end of a frame */ | ||
| 319 | DSIHOST.vmcr().modify(|w| w.set_fbtaae(FRAME_BTAACKNOWLEDGE_ENABLE)); | ||
| 320 | |||
| 321 | /* Configure DSI PHY HS2LP and LP2HS timings */ | ||
| 322 | const CLOCK_LANE_HS2_LPTIME: u16 = 35; | ||
| 323 | const CLOCK_LANE_LP2_HSTIME: u16 = 35; | ||
| 324 | const DATA_LANE_HS2_LPTIME: u8 = 35; | ||
| 325 | const DATA_LANE_LP2_HSTIME: u8 = 35; | ||
| 326 | const DATA_LANE_MAX_READ_TIME: u16 = 0; | ||
| 327 | const STOP_WAIT_TIME: u8 = 10; | ||
| 328 | |||
| 329 | const MAX_TIME: u16 = if CLOCK_LANE_HS2_LPTIME > CLOCK_LANE_LP2_HSTIME { | ||
| 330 | CLOCK_LANE_HS2_LPTIME | ||
| 331 | } else { | ||
| 332 | CLOCK_LANE_LP2_HSTIME | ||
| 333 | }; | ||
| 334 | |||
| 335 | /* Clock lane timer configuration */ | ||
| 336 | |||
| 337 | /* In Automatic Clock Lane control mode, the DSI Host can turn off the clock lane between two | ||
| 338 | High-Speed transmission. | ||
| 339 | To do so, the DSI Host calculates the time required for the clock lane to change from HighSpeed | ||
| 340 | to Low-Power and from Low-Power to High-Speed. | ||
| 341 | This timings are configured by the HS2LP_TIME and LP2HS_TIME in the DSI Host Clock Lane Timer Configuration | ||
| 342 | Register (DSI_CLTCR). | ||
| 343 | But the DSI Host is not calculating LP2HS_TIME + HS2LP_TIME but 2 x HS2LP_TIME. | ||
| 344 | |||
| 345 | Workaround : Configure HS2LP_TIME and LP2HS_TIME with the same value being the max of HS2LP_TIME or LP2HS_TIME. | ||
| 346 | */ | ||
| 347 | |||
| 348 | DSIHOST.cltcr().modify(|w| { | ||
| 349 | w.set_hs2lp_time(MAX_TIME); | ||
| 350 | w.set_lp2hs_time(MAX_TIME) | ||
| 351 | }); | ||
| 352 | |||
| 353 | // Data lane timer configuration | ||
| 354 | DSIHOST.dltcr().modify(|w| { | ||
| 355 | w.set_hs2lp_time(DATA_LANE_HS2_LPTIME); | ||
| 356 | w.set_lp2hs_time(DATA_LANE_LP2_HSTIME); | ||
| 357 | w.set_mrd_time(DATA_LANE_MAX_READ_TIME); | ||
| 358 | }); | ||
| 359 | |||
| 360 | // Configure the wait period to request HS transmission after a stop state | ||
| 361 | DSIHOST.pconfr().modify(|w| w.set_sw_time(STOP_WAIT_TIME)); | ||
| 362 | |||
| 363 | const _PCPOLARITY: bool = false; // LTDC_PCPOLARITY_IPC == 0 | ||
| 364 | |||
| 365 | const LTDC_DE_POLARITY: Depol = if !DE_POLARITY { | ||
| 366 | Depol::ACTIVELOW | ||
| 367 | } else { | ||
| 368 | Depol::ACTIVEHIGH | ||
| 369 | }; | ||
| 370 | const LTDC_VS_POLARITY: Vspol = if !VS_POLARITY { | ||
| 371 | Vspol::ACTIVEHIGH | ||
| 372 | } else { | ||
| 373 | Vspol::ACTIVELOW | ||
| 374 | }; | ||
| 375 | |||
| 376 | const LTDC_HS_POLARITY: Hspol = if !HS_POLARITY { | ||
| 377 | Hspol::ACTIVEHIGH | ||
| 378 | } else { | ||
| 379 | Hspol::ACTIVELOW | ||
| 380 | }; | ||
| 381 | |||
| 382 | /* Timing Configuration */ | ||
| 383 | const HORIZONTAL_SYNC: u16 = HSA - 1; | ||
| 384 | const VERTICAL_SYNC: u16 = VERTICAL_SYNC_ACTIVE - 1; | ||
| 385 | const ACCUMULATED_HBP: u16 = HSA + HBP - 1; | ||
| 386 | const ACCUMULATED_VBP: u16 = VERTICAL_SYNC_ACTIVE + VERTICAL_BACK_PORCH - 1; | ||
| 387 | const ACCUMULATED_ACTIVE_W: u16 = LCD_X_SIZE + HSA + HBP - 1; | ||
| 388 | const ACCUMULATED_ACTIVE_H: u16 = VERTICAL_SYNC_ACTIVE + VERTICAL_BACK_PORCH + VERTICAL_ACTIVE - 1; | ||
| 389 | const TOTAL_WIDTH: u16 = LCD_X_SIZE + HSA + HBP + HFP - 1; | ||
| 390 | const TOTAL_HEIGHT: u16 = VERTICAL_SYNC_ACTIVE + VERTICAL_BACK_PORCH + VERTICAL_ACTIVE + VERTICAL_FRONT_PORCH - 1; | ||
| 391 | |||
| 392 | // DISABLE LTDC before making changes | ||
| 393 | ltdc.disable(); | ||
| 394 | |||
| 395 | // Configure the HS, VS, DE and PC polarity | ||
| 396 | LTDC.gcr().modify(|w| { | ||
| 397 | w.set_hspol(LTDC_HS_POLARITY); | ||
| 398 | w.set_vspol(LTDC_VS_POLARITY); | ||
| 399 | w.set_depol(LTDC_DE_POLARITY); | ||
| 400 | w.set_pcpol(Pcpol::RISINGEDGE); | ||
| 401 | }); | ||
| 402 | |||
| 403 | // Set Synchronization size | ||
| 404 | LTDC.sscr().modify(|w| { | ||
| 405 | w.set_hsw(HORIZONTAL_SYNC); | ||
| 406 | w.set_vsh(VERTICAL_SYNC) | ||
| 407 | }); | ||
| 408 | |||
| 409 | // Set Accumulated Back porch | ||
| 410 | LTDC.bpcr().modify(|w| { | ||
| 411 | w.set_ahbp(ACCUMULATED_HBP); | ||
| 412 | w.set_avbp(ACCUMULATED_VBP); | ||
| 413 | }); | ||
| 414 | |||
| 415 | // Set Accumulated Active Width | ||
| 416 | LTDC.awcr().modify(|w| { | ||
| 417 | w.set_aah(ACCUMULATED_ACTIVE_H); | ||
| 418 | w.set_aaw(ACCUMULATED_ACTIVE_W); | ||
| 419 | }); | ||
| 420 | |||
| 421 | // Set Total Width | ||
| 422 | LTDC.twcr().modify(|w| { | ||
| 423 | w.set_totalh(TOTAL_HEIGHT); | ||
| 424 | w.set_totalw(TOTAL_WIDTH); | ||
| 425 | }); | ||
| 426 | |||
| 427 | // Set the background color value | ||
| 428 | LTDC.bccr().modify(|w| { | ||
| 429 | w.set_bcred(0); | ||
| 430 | w.set_bcgreen(0); | ||
| 431 | w.set_bcblue(0) | ||
| 432 | }); | ||
| 433 | |||
| 434 | // Enable the Transfer Error and FIFO underrun interrupts | ||
| 435 | LTDC.ier().modify(|w| { | ||
| 436 | w.set_terrie(true); | ||
| 437 | w.set_fuie(true); | ||
| 438 | }); | ||
| 439 | |||
| 440 | // ENABLE LTDC after making changes | ||
| 441 | ltdc.enable(); | ||
| 442 | |||
| 443 | dsi.enable(); | ||
| 444 | dsi.enable_wrapper_dsi(); | ||
| 445 | |||
| 446 | // First, delay 120 ms (reason unknown, STM32 Cube Example does it) | ||
| 447 | blocking_delay_ms(120); | ||
| 448 | |||
| 449 | // 1 to 26 | ||
| 450 | dsi.write_cmd(0, NT35510_WRITES_0[0], &NT35510_WRITES_0[1..]).unwrap(); | ||
| 451 | dsi.write_cmd(0, NT35510_WRITES_1[0], &NT35510_WRITES_1[1..]).unwrap(); | ||
| 452 | dsi.write_cmd(0, NT35510_WRITES_2[0], &NT35510_WRITES_2[1..]).unwrap(); | ||
| 453 | dsi.write_cmd(0, NT35510_WRITES_3[0], &NT35510_WRITES_3[1..]).unwrap(); | ||
| 454 | dsi.write_cmd(0, NT35510_WRITES_4[0], &NT35510_WRITES_4[1..]).unwrap(); | ||
| 455 | dsi.write_cmd(0, NT35510_WRITES_5[0], &NT35510_WRITES_5[1..]).unwrap(); | ||
| 456 | dsi.write_cmd(0, NT35510_WRITES_6[0], &NT35510_WRITES_6[1..]).unwrap(); | ||
| 457 | dsi.write_cmd(0, NT35510_WRITES_7[0], &NT35510_WRITES_7[1..]).unwrap(); | ||
| 458 | dsi.write_cmd(0, NT35510_WRITES_8[0], &NT35510_WRITES_8[1..]).unwrap(); | ||
| 459 | dsi.write_cmd(0, NT35510_WRITES_9[0], &NT35510_WRITES_9[1..]).unwrap(); | ||
| 460 | dsi.write_cmd(0, NT35510_WRITES_10[0], &NT35510_WRITES_10[1..]).unwrap(); | ||
| 461 | // 11 missing | ||
| 462 | dsi.write_cmd(0, NT35510_WRITES_12[0], &NT35510_WRITES_12[1..]).unwrap(); | ||
| 463 | dsi.write_cmd(0, NT35510_WRITES_13[0], &NT35510_WRITES_13[1..]).unwrap(); | ||
| 464 | dsi.write_cmd(0, NT35510_WRITES_14[0], &NT35510_WRITES_14[1..]).unwrap(); | ||
| 465 | dsi.write_cmd(0, NT35510_WRITES_15[0], &NT35510_WRITES_15[1..]).unwrap(); | ||
| 466 | dsi.write_cmd(0, NT35510_WRITES_16[0], &NT35510_WRITES_16[1..]).unwrap(); | ||
| 467 | dsi.write_cmd(0, NT35510_WRITES_17[0], &NT35510_WRITES_17[1..]).unwrap(); | ||
| 468 | dsi.write_cmd(0, NT35510_WRITES_18[0], &NT35510_WRITES_18[1..]).unwrap(); | ||
| 469 | dsi.write_cmd(0, NT35510_WRITES_19[0], &NT35510_WRITES_19[1..]).unwrap(); | ||
| 470 | dsi.write_cmd(0, NT35510_WRITES_20[0], &NT35510_WRITES_20[1..]).unwrap(); | ||
| 471 | dsi.write_cmd(0, NT35510_WRITES_21[0], &NT35510_WRITES_21[1..]).unwrap(); | ||
| 472 | dsi.write_cmd(0, NT35510_WRITES_22[0], &NT35510_WRITES_22[1..]).unwrap(); | ||
| 473 | dsi.write_cmd(0, NT35510_WRITES_23[0], &NT35510_WRITES_23[1..]).unwrap(); | ||
| 474 | dsi.write_cmd(0, NT35510_WRITES_24[0], &NT35510_WRITES_24[1..]).unwrap(); | ||
| 475 | |||
| 476 | // Tear on | ||
| 477 | dsi.write_cmd(0, NT35510_WRITES_26[0], &NT35510_WRITES_26[1..]).unwrap(); | ||
| 478 | |||
| 479 | // Set Pixel color format to RGB888 | ||
| 480 | dsi.write_cmd(0, NT35510_WRITES_37[0], &NT35510_WRITES_37[1..]).unwrap(); | ||
| 481 | |||
| 482 | // Add a delay, otherwise MADCTL not taken | ||
| 483 | blocking_delay_ms(200); | ||
| 484 | |||
| 485 | // Configure orientation as landscape | ||
| 486 | dsi.write_cmd(0, NT35510_MADCTL_LANDSCAPE[0], &NT35510_MADCTL_LANDSCAPE[1..]) | ||
| 487 | .unwrap(); | ||
| 488 | dsi.write_cmd(0, NT35510_CASET_LANDSCAPE[0], &NT35510_CASET_LANDSCAPE[1..]) | ||
| 489 | .unwrap(); | ||
| 490 | dsi.write_cmd(0, NT35510_RASET_LANDSCAPE[0], &NT35510_RASET_LANDSCAPE[1..]) | ||
| 491 | .unwrap(); | ||
| 492 | |||
| 493 | // Sleep out | ||
| 494 | dsi.write_cmd(0, NT35510_WRITES_27[0], &NT35510_WRITES_27[1..]).unwrap(); | ||
| 495 | |||
| 496 | // Wait for sleep out exit | ||
| 497 | blocking_delay_ms(120); | ||
| 498 | |||
| 499 | // Configure COLOR_CODING | ||
| 500 | dsi.write_cmd(0, NT35510_WRITES_37[0], &NT35510_WRITES_37[1..]).unwrap(); | ||
| 501 | |||
| 502 | /* CABC : Content Adaptive Backlight Control section start >> */ | ||
| 503 | /* Note : defaut is 0 (lowest Brightness), 0xFF is highest Brightness, try 0x7F : intermediate value */ | ||
| 504 | dsi.write_cmd(0, NT35510_WRITES_31[0], &NT35510_WRITES_31[1..]).unwrap(); | ||
| 505 | /* defaut is 0, try 0x2C - Brightness Control Block, Display Dimming & BackLight on */ | ||
| 506 | dsi.write_cmd(0, NT35510_WRITES_32[0], &NT35510_WRITES_32[1..]).unwrap(); | ||
| 507 | /* defaut is 0, try 0x02 - image Content based Adaptive Brightness [Still Picture] */ | ||
| 508 | dsi.write_cmd(0, NT35510_WRITES_33[0], &NT35510_WRITES_33[1..]).unwrap(); | ||
| 509 | /* defaut is 0 (lowest Brightness), 0xFF is highest Brightness */ | ||
| 510 | dsi.write_cmd(0, NT35510_WRITES_34[0], &NT35510_WRITES_34[1..]).unwrap(); | ||
| 511 | /* CABC : Content Adaptive Backlight Control section end << */ | ||
| 512 | /* Display on */ | ||
| 513 | dsi.write_cmd(0, NT35510_WRITES_30[0], &NT35510_WRITES_30[1..]).unwrap(); | ||
| 514 | |||
| 515 | /* Send Command GRAM memory write (no parameters) : this initiates frame write via other DSI commands sent by */ | ||
| 516 | /* DSI host from LTDC incoming pixels in video mode */ | ||
| 517 | dsi.write_cmd(0, NT35510_WRITES_35[0], &NT35510_WRITES_35[1..]).unwrap(); | ||
| 518 | |||
| 519 | /* Initialize the LCD pixel width and pixel height */ | ||
| 520 | const WINDOW_X0: u16 = 0; | ||
| 521 | const WINDOW_X1: u16 = LCD_X_SIZE; // 480 for ferris | ||
| 522 | const WINDOW_Y0: u16 = 0; | ||
| 523 | const WINDOW_Y1: u16 = LCD_Y_SIZE; // 800 for ferris | ||
| 524 | const PIXEL_FORMAT: Pf = Pf::ARGB8888; | ||
| 525 | //const FBStartAdress: u16 = FB_Address; | ||
| 526 | const ALPHA: u8 = 255; | ||
| 527 | const ALPHA0: u8 = 0; | ||
| 528 | const BACKCOLOR_BLUE: u8 = 0; | ||
| 529 | const BACKCOLOR_GREEN: u8 = 0; | ||
| 530 | const BACKCOLOR_RED: u8 = 0; | ||
| 531 | const IMAGE_WIDTH: u16 = LCD_X_SIZE; // 480 for ferris | ||
| 532 | const IMAGE_HEIGHT: u16 = LCD_Y_SIZE; // 800 for ferris | ||
| 533 | |||
| 534 | const PIXEL_SIZE: u8 = match PIXEL_FORMAT { | ||
| 535 | Pf::ARGB8888 => 4, | ||
| 536 | Pf::RGB888 => 3, | ||
| 537 | Pf::ARGB4444 | Pf::RGB565 | Pf::ARGB1555 | Pf::AL88 => 2, | ||
| 538 | _ => 1, | ||
| 539 | }; | ||
| 540 | |||
| 541 | // Configure the horizontal start and stop position | ||
| 542 | LTDC.layer(0).whpcr().write(|w| { | ||
| 543 | w.set_whstpos(LTDC.bpcr().read().ahbp() + 1 + WINDOW_X0); | ||
| 544 | w.set_whsppos(LTDC.bpcr().read().ahbp() + WINDOW_X1); | ||
| 545 | }); | ||
| 546 | |||
| 547 | // Configures the vertical start and stop position | ||
| 548 | LTDC.layer(0).wvpcr().write(|w| { | ||
| 549 | w.set_wvstpos(LTDC.bpcr().read().avbp() + 1 + WINDOW_Y0); | ||
| 550 | w.set_wvsppos(LTDC.bpcr().read().avbp() + WINDOW_Y1); | ||
| 551 | }); | ||
| 552 | |||
| 553 | // Specify the pixel format | ||
| 554 | LTDC.layer(0).pfcr().write(|w| w.set_pf(PIXEL_FORMAT)); | ||
| 555 | |||
| 556 | // Configures the default color values as zero | ||
| 557 | LTDC.layer(0).dccr().modify(|w| { | ||
| 558 | w.set_dcblue(BACKCOLOR_BLUE); | ||
| 559 | w.set_dcgreen(BACKCOLOR_GREEN); | ||
| 560 | w.set_dcred(BACKCOLOR_RED); | ||
| 561 | w.set_dcalpha(ALPHA0); | ||
| 562 | }); | ||
| 563 | |||
| 564 | // Specifies the constant ALPHA value | ||
| 565 | LTDC.layer(0).cacr().write(|w| w.set_consta(ALPHA)); | ||
| 566 | |||
| 567 | // Specifies the blending factors | ||
| 568 | LTDC.layer(0).bfcr().write(|w| { | ||
| 569 | w.set_bf1(Bf1::CONSTANT); | ||
| 570 | w.set_bf2(Bf2::CONSTANT); | ||
| 571 | }); | ||
| 572 | |||
| 573 | // Configure the color frame buffer start address | ||
| 574 | let fb_start_address: u32 = &FERRIS_IMAGE[0] as *const _ as u32; | ||
| 575 | info!("Setting Framebuffer Start Address: {:010x}", fb_start_address); | ||
| 576 | LTDC.layer(0).cfbar().write(|w| w.set_cfbadd(fb_start_address)); | ||
| 577 | |||
| 578 | // Configures the color frame buffer pitch in byte | ||
| 579 | LTDC.layer(0).cfblr().write(|w| { | ||
| 580 | w.set_cfbp(IMAGE_WIDTH * PIXEL_SIZE as u16); | ||
| 581 | w.set_cfbll(((WINDOW_X1 - WINDOW_X0) * PIXEL_SIZE as u16) + 3); | ||
| 582 | }); | ||
| 583 | |||
| 584 | // Configures the frame buffer line number | ||
| 585 | LTDC.layer(0).cfblnr().write(|w| w.set_cfblnbr(IMAGE_HEIGHT)); | ||
| 586 | |||
| 587 | // Enable LTDC_Layer by setting LEN bit | ||
| 588 | LTDC.layer(0).cr().modify(|w| w.set_len(true)); | ||
| 589 | |||
| 590 | //LTDC->SRCR = LTDC_SRCR_IMR; | ||
| 591 | LTDC.srcr().modify(|w| w.set_imr(Imr::RELOAD)); | ||
| 592 | |||
| 593 | blocking_delay_ms(5000); | ||
| 594 | |||
| 595 | const READ_SIZE: u16 = 1; | ||
| 596 | let mut data = [1u8; READ_SIZE as usize]; | ||
| 597 | dsi.read(0, PacketType::DcsShortPktRead(0xDA), READ_SIZE, &mut data) | ||
| 598 | .unwrap(); | ||
| 599 | info!("Display ID1: {:#04x}", data); | ||
| 600 | |||
| 601 | dsi.read(0, PacketType::DcsShortPktRead(0xDB), READ_SIZE, &mut data) | ||
| 602 | .unwrap(); | ||
| 603 | info!("Display ID2: {:#04x}", data); | ||
| 604 | |||
| 605 | dsi.read(0, PacketType::DcsShortPktRead(0xDC), READ_SIZE, &mut data) | ||
| 606 | .unwrap(); | ||
| 607 | info!("Display ID3: {:#04x}", data); | ||
| 608 | |||
| 609 | blocking_delay_ms(500); | ||
| 610 | |||
| 611 | info!("Config done, start blinking LED"); | ||
| 612 | loop { | ||
| 613 | led.set_high(); | ||
| 614 | Timer::after_millis(1000).await; | ||
| 615 | |||
| 616 | // Increase screen brightness | ||
| 617 | dsi.write_cmd(0, NT35510_CMD_WRDISBV, &[0xFF]).unwrap(); | ||
| 618 | |||
| 619 | led.set_low(); | ||
| 620 | Timer::after_millis(1000).await; | ||
| 621 | |||
| 622 | // Reduce screen brightness | ||
| 623 | dsi.write_cmd(0, NT35510_CMD_WRDISBV, &[0x50]).unwrap(); | ||
| 624 | } | ||
| 625 | } | ||
| 626 | |||
| 627 | const NT35510_WRITES_0: &[u8] = &[0xF0, 0x55, 0xAA, 0x52, 0x08, 0x01]; // LV2: Page 1 enable | ||
| 628 | const NT35510_WRITES_1: &[u8] = &[0xB0, 0x03, 0x03, 0x03]; // AVDD: 5.2V | ||
| 629 | const NT35510_WRITES_2: &[u8] = &[0xB6, 0x46, 0x46, 0x46]; // AVDD: Ratio | ||
| 630 | const NT35510_WRITES_3: &[u8] = &[0xB1, 0x03, 0x03, 0x03]; // AVEE: -5.2V | ||
| 631 | const NT35510_WRITES_4: &[u8] = &[0xB7, 0x36, 0x36, 0x36]; // AVEE: Ratio | ||
| 632 | const NT35510_WRITES_5: &[u8] = &[0xB2, 0x00, 0x00, 0x02]; // VCL: -2.5V | ||
| 633 | const NT35510_WRITES_6: &[u8] = &[0xB8, 0x26, 0x26, 0x26]; // VCL: Ratio | ||
| 634 | const NT35510_WRITES_7: &[u8] = &[0xBF, 0x01]; // VGH: 15V (Free Pump) | ||
| 635 | const NT35510_WRITES_8: &[u8] = &[0xB3, 0x09, 0x09, 0x09]; | ||
| 636 | const NT35510_WRITES_9: &[u8] = &[0xB9, 0x36, 0x36, 0x36]; // VGH: Ratio | ||
| 637 | const NT35510_WRITES_10: &[u8] = &[0xB5, 0x08, 0x08, 0x08]; // VGL_REG: -10V | ||
| 638 | const NT35510_WRITES_12: &[u8] = &[0xBA, 0x26, 0x26, 0x26]; // VGLX: Ratio | ||
| 639 | const NT35510_WRITES_13: &[u8] = &[0xBC, 0x00, 0x80, 0x00]; // VGMP/VGSP: 4.5V/0V | ||
| 640 | const NT35510_WRITES_14: &[u8] = &[0xBD, 0x00, 0x80, 0x00]; // VGMN/VGSN:-4.5V/0V | ||
| 641 | const NT35510_WRITES_15: &[u8] = &[0xBE, 0x00, 0x50]; // VCOM: -1.325V | ||
| 642 | const NT35510_WRITES_16: &[u8] = &[0xF0, 0x55, 0xAA, 0x52, 0x08, 0x00]; // LV2: Page 0 enable | ||
| 643 | const NT35510_WRITES_17: &[u8] = &[0xB1, 0xFC, 0x00]; // Display control | ||
| 644 | const NT35510_WRITES_18: &[u8] = &[0xB6, 0x03]; // Src hold time | ||
| 645 | const NT35510_WRITES_19: &[u8] = &[0xB5, 0x51]; | ||
| 646 | const NT35510_WRITES_20: &[u8] = &[0x00, 0x00, 0xB7]; // Gate EQ control | ||
| 647 | const NT35510_WRITES_21: &[u8] = &[0xB8, 0x01, 0x02, 0x02, 0x02]; // Src EQ control(Mode2) | ||
| 648 | const NT35510_WRITES_22: &[u8] = &[0xBC, 0x00, 0x00, 0x00]; // Inv. mode(2-dot) | ||
| 649 | const NT35510_WRITES_23: &[u8] = &[0xCC, 0x03, 0x00, 0x00]; | ||
| 650 | const NT35510_WRITES_24: &[u8] = &[0xBA, 0x01]; | ||
| 651 | |||
| 652 | const _NT35510_MADCTL_PORTRAIT: &[u8] = &[NT35510_CMD_MADCTL, 0x00]; | ||
| 653 | const _NT35510_CASET_PORTRAIT: &[u8] = &[NT35510_CMD_CASET, 0x00, 0x00, 0x01, 0xDF]; | ||
| 654 | const _NT35510_RASET_PORTRAIT: &[u8] = &[NT35510_CMD_RASET, 0x00, 0x00, 0x03, 0x1F]; | ||
| 655 | const NT35510_MADCTL_LANDSCAPE: &[u8] = &[NT35510_CMD_MADCTL, 0x60]; | ||
| 656 | const NT35510_CASET_LANDSCAPE: &[u8] = &[NT35510_CMD_CASET, 0x00, 0x00, 0x03, 0x1F]; | ||
| 657 | const NT35510_RASET_LANDSCAPE: &[u8] = &[NT35510_CMD_RASET, 0x00, 0x00, 0x01, 0xDF]; | ||
| 658 | |||
| 659 | const NT35510_WRITES_26: &[u8] = &[NT35510_CMD_TEEON, 0x00]; // Tear on | ||
| 660 | const NT35510_WRITES_27: &[u8] = &[NT35510_CMD_SLPOUT, 0x00]; // Sleep out | ||
| 661 | // 28,29 missing | ||
| 662 | const NT35510_WRITES_30: &[u8] = &[NT35510_CMD_DISPON, 0x00]; // Display on | ||
| 663 | |||
| 664 | const NT35510_WRITES_31: &[u8] = &[NT35510_CMD_WRDISBV, 0x7F]; | ||
| 665 | const NT35510_WRITES_32: &[u8] = &[NT35510_CMD_WRCTRLD, 0x2C]; | ||
| 666 | const NT35510_WRITES_33: &[u8] = &[NT35510_CMD_WRCABC, 0x02]; | ||
| 667 | const NT35510_WRITES_34: &[u8] = &[NT35510_CMD_WRCABCMB, 0xFF]; | ||
| 668 | const NT35510_WRITES_35: &[u8] = &[NT35510_CMD_RAMWR, 0x00]; | ||
| 669 | |||
| 670 | //const NT35510_WRITES_36: &[u8] = &[NT35510_CMD_COLMOD, NT35510_COLMOD_RGB565]; // FIXME: Example sets it to 888 but rest of the code seems to configure DSI for 565 | ||
| 671 | const NT35510_WRITES_37: &[u8] = &[NT35510_CMD_COLMOD, NT35510_COLMOD_RGB888]; | ||
| 672 | |||
| 673 | // More of these: https://elixir.bootlin.com/linux/latest/source/include/video/mipi_display.h#L83 | ||
| 674 | const _NT35510_CMD_TEEON_GET_DISPLAY_ID: u8 = 0x04; | ||
| 675 | |||
| 676 | const NT35510_CMD_TEEON: u8 = 0x35; | ||
| 677 | const NT35510_CMD_MADCTL: u8 = 0x36; | ||
| 678 | |||
| 679 | const NT35510_CMD_SLPOUT: u8 = 0x11; | ||
| 680 | const NT35510_CMD_DISPON: u8 = 0x29; | ||
| 681 | const NT35510_CMD_CASET: u8 = 0x2A; | ||
| 682 | const NT35510_CMD_RASET: u8 = 0x2B; | ||
| 683 | const NT35510_CMD_RAMWR: u8 = 0x2C; /* Memory write */ | ||
| 684 | const NT35510_CMD_COLMOD: u8 = 0x3A; | ||
| 685 | |||
| 686 | const NT35510_CMD_WRDISBV: u8 = 0x51; /* Write display brightness */ | ||
| 687 | const _NT35510_CMD_RDDISBV: u8 = 0x52; /* Read display brightness */ | ||
| 688 | const NT35510_CMD_WRCTRLD: u8 = 0x53; /* Write CTRL display */ | ||
| 689 | const _NT35510_CMD_RDCTRLD: u8 = 0x54; /* Read CTRL display value */ | ||
| 690 | const NT35510_CMD_WRCABC: u8 = 0x55; /* Write content adaptative brightness control */ | ||
| 691 | const NT35510_CMD_WRCABCMB: u8 = 0x5E; /* Write CABC minimum brightness */ | ||
| 692 | |||
| 693 | const _NT35510_COLMOD_RGB565: u8 = 0x55; | ||
| 694 | const NT35510_COLMOD_RGB888: u8 = 0x77; | ||
diff --git a/examples/stm32f469/src/bin/ferris.bin b/examples/stm32f469/src/bin/ferris.bin new file mode 100644 index 000000000..ae1c466be --- /dev/null +++ b/examples/stm32f469/src/bin/ferris.bin | |||
| @@ -0,0 +1,70 @@ | |||
| 1 | ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������f���2��� | ||
| 2 | ��� | ||
| 3 | ��� | ||
| 4 | �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=��� | ||
| 5 | �������������������������������������������������������������������������������������������������������������������������������I��� | ||
| 6 | ��� | ||
| 7 | �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%��� | ||
| 8 | ��� | ||
| 9 | ��� | ||
| 10 | ��� | ||
| 11 | ���������������������������������������������������������������������������������������������������������������������������T��� | ||
| 12 | ���������������������������������������������������������������������������������������������������2��� | ||
| 13 | ���=���c�����������������������������������G��� | ||
| 14 | |||
| 15 | |||
| 16 | � | ||
| 17 | e�� | ||
| 18 | |||
| 19 | |||
| 20 | �������������������������������������������������������������������������������������������������������������������������hhh� | ||
| 21 | _�� | ||
| 22 | _�� | ||
| 23 | � | ||
| 24 | (� | ||
| 25 | � | ||
| 26 | .� | ||
| 27 | 1� | ||
| 28 | -� | ||
| 29 | � | ||
| 30 | .�� | ||
| 31 | .��Yb�������������� | ||
| 32 | M�� | ||
| 33 | .��S]���������������������������������� | ||
| 34 | .�� | ||
| 35 | .�� | ||
| 36 | -� | ||
| 37 | .�� | ||
| 38 | .�� | ||
| 39 | .��v{������������������������������_f��%9��,�� | ||
| 40 | 5� | ||
| 41 | .�� | ||
| 42 | L���������������������������������������������������������������������������������������������� | ||
| 43 | .��|������������������������������������������������������������������ | ||
| 44 | -� | ||
| 45 | .�� | ||
| 46 | � | ||
| 47 | � | ||
| 48 | M�� | ||
| 49 | 3� | ||
| 50 | -� | ||
| 51 | 0� | ||
| 52 | 2� | ||
| 53 | .� | ||
| 54 | '� | ||
| 55 | .����������������������������������������������������������������������������������������������%T�� | ||
| 56 | M������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lx�� | ||
| 57 | 6� | ||
| 58 | M��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������fu�� | ||
| 59 | 3� | ||
| 60 | M�� | ||
| 61 | /� | ||
| 62 | 2� | ||
| 63 | J�� | ||
| 64 | .�� | ||
| 65 | .����������������������������������������������������������������������������������������������������������Sl�� | ||
| 66 | H�� | ||
| 67 | M�� | ||
| 68 | .�� | ||
| 69 | M������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������q|��O�� | ||
| 70 | M������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(T�� | ||
