This gets the screen working, though not correctly
This commit is contained in:
parent
2b291a3196
commit
8bc7a4c288
|
@ -17,6 +17,10 @@ use rp_pico::{
|
||||||
|
|
||||||
const XOSC_CRYSTAL_FREQ: u32 = 12_000_000; // MHz, https://forums.raspberrypi.com/viewtopic.php?t=356764
|
const XOSC_CRYSTAL_FREQ: u32 = 12_000_000; // MHz, https://forums.raspberrypi.com/viewtopic.php?t=356764
|
||||||
|
|
||||||
|
const ROWS: usize = 320;
|
||||||
|
const COLUMNS: usize = 240;
|
||||||
|
const FRAMEBUF: usize = ROWS * COLUMNS * 3;
|
||||||
|
|
||||||
struct Step {
|
struct Step {
|
||||||
param_cnt: usize,
|
param_cnt: usize,
|
||||||
command: u8,
|
command: u8,
|
||||||
|
@ -36,9 +40,11 @@ impl Step {
|
||||||
{
|
{
|
||||||
let _ = data_command.set_low();
|
let _ = data_command.set_low();
|
||||||
let _ = spi.write(&[self.command]);
|
let _ = spi.write(&[self.command]);
|
||||||
|
if self.param_cnt > 0 {
|
||||||
let _ = data_command.set_high();
|
let _ = data_command.set_high();
|
||||||
let _ = spi.write(&self.params[0..self.param_cnt]);
|
let _ = spi.write(&self.params[0..self.param_cnt]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const NOP: u8 = 0x00;
|
const NOP: u8 = 0x00;
|
||||||
|
@ -57,9 +63,9 @@ const SLPOUT: Step = Step {
|
||||||
};
|
};
|
||||||
const COLMOD: u8 = 0x3a;
|
const COLMOD: u8 = 0x3a;
|
||||||
const MADCTL: Step = Step {
|
const MADCTL: Step = Step {
|
||||||
param_cnt: 0,
|
param_cnt: 1,
|
||||||
command: 0x36,
|
command: 0x36,
|
||||||
params: [0, 0, 0, 0],
|
params: [0x08, 0, 0, 0],
|
||||||
delay: None,
|
delay: None,
|
||||||
};
|
};
|
||||||
const CASET: u8 = 0x2a;
|
const CASET: u8 = 0x2a;
|
||||||
|
@ -111,20 +117,20 @@ const SETUP_PROGRAM: [Step; 9] = [
|
||||||
Step {
|
Step {
|
||||||
param_cnt: 1,
|
param_cnt: 1,
|
||||||
command: COLMOD,
|
command: COLMOD,
|
||||||
params: [0x55, 0, 0, 0],
|
params: [0x66, 0, 0, 0],
|
||||||
delay: Some(10),
|
delay: Some(10),
|
||||||
},
|
},
|
||||||
MADCTL,
|
MADCTL,
|
||||||
Step {
|
Step {
|
||||||
param_cnt: 4,
|
param_cnt: 4,
|
||||||
command: CASET,
|
command: CASET,
|
||||||
params: [0, 0, 0, 170],
|
params: [0, 0, 0, 240],
|
||||||
delay: None,
|
delay: None,
|
||||||
},
|
},
|
||||||
Step {
|
Step {
|
||||||
param_cnt: 4,
|
param_cnt: 4,
|
||||||
command: RASET,
|
command: RASET,
|
||||||
params: [0, 0, (340 as u16 >> 8) as u8, (320 as u16 & 0xff) as u8],
|
params: [0, 0, (320 >> 8) as u8, (320 & 0xff) as u8],
|
||||||
delay: None,
|
delay: None,
|
||||||
},
|
},
|
||||||
INVON,
|
INVON,
|
||||||
|
@ -178,8 +184,8 @@ unsafe fn main() -> ! {
|
||||||
// let spi_sdi = pins.gpio4.into_function();
|
// let spi_sdi = pins.gpio4.into_function();
|
||||||
// Chip select 1 means the chip is not enabled
|
// Chip select 1 means the chip is not enabled
|
||||||
let mut board_select = pins.gpio13.into_function();
|
let mut board_select = pins.gpio13.into_function();
|
||||||
let mut data_command = pins.gpio14.into_function();
|
let mut data_command = pins.gpio15.into_function();
|
||||||
let mut reset = pins.gpio15.into_function();
|
let mut reset = pins.gpio14.into_function();
|
||||||
|
|
||||||
let _ = reset.set_low();
|
let _ = reset.set_low();
|
||||||
let _ = board_select.set_high();
|
let _ = board_select.set_high();
|
||||||
|
@ -191,10 +197,10 @@ unsafe fn main() -> ! {
|
||||||
// The SPI system uses the peripheral clock
|
// The SPI system uses the peripheral clock
|
||||||
clocks.peripheral_clock.freq(),
|
clocks.peripheral_clock.freq(),
|
||||||
// Transmit data at a rate of 1Mbit.
|
// Transmit data at a rate of 1Mbit.
|
||||||
1_u32.MHz(),
|
32_u32.MHz(),
|
||||||
// Run with SPI Mode 1. This means that the clock line should start high and that data will
|
// Run with SPI Mode 1. This means that the clock line should start high and that data will
|
||||||
// be sampled starting at the first falling edge.
|
// be sampled starting at the first falling edge.
|
||||||
embedded_hal::spi::MODE_1,
|
embedded_hal::spi::MODE_3,
|
||||||
);
|
);
|
||||||
|
|
||||||
let _ = reset.set_high();
|
let _ = reset.set_high();
|
||||||
|
@ -208,18 +214,24 @@ unsafe fn main() -> ! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timer.delay_ms(1000);
|
||||||
|
|
||||||
|
let mut bitmap: [u8; FRAMEBUF] = [0; FRAMEBUF];
|
||||||
|
|
||||||
|
let mut i = 0;
|
||||||
|
loop {
|
||||||
|
let _ = board_select.set_low();
|
||||||
let _ = data_command.set_low();
|
let _ = data_command.set_low();
|
||||||
let _ = spi.write(&[RAMWR]);
|
let _ = spi.write(&[RAMWR]);
|
||||||
let _ = data_command.set_high();
|
let _ = data_command.set_high();
|
||||||
let mut bitmap: [u8; 86700] = [0; 86700];
|
|
||||||
for i in 0..28900 {
|
|
||||||
bitmap[i] = 0x55;
|
|
||||||
}
|
|
||||||
let _ = spi.write(&bitmap);
|
let _ = spi.write(&bitmap);
|
||||||
let _ = data_command.set_low();
|
|
||||||
let _ = spi.write(&[NOP]);
|
|
||||||
let _ = board_select.set_high();
|
let _ = board_select.set_high();
|
||||||
|
|
||||||
|
let color = i << 2;
|
||||||
|
bitmap = [color; FRAMEBUF];
|
||||||
|
|
||||||
loop {}
|
i = if i >= 64 { 0 } else { i + 1 };
|
||||||
|
|
||||||
|
timer.delay_ms(10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue