#![no_main]
#![no_std]
use core::convert::TryFrom;
extern crate panic_halt;
use core::fmt::Write;
use cortex_m_rt::entry;
use hal::prelude::*;
use lpc55_hal as hal;
use hal::{
drivers::{I2cMaster, Pins},
time::Hertz,
};
use ssd1306::prelude::*;
#[entry]
fn main() -> ! {
let hal = hal::new();
let mut anactrl = hal.anactrl;
let mut pmc = hal.pmc;
let mut syscon = hal.syscon;
let mut iocon = hal.iocon.enabled(&mut syscon);
let clocks = hal::ClockRequirements::default()
.system_frequency(50.MHz())
.configure(&mut anactrl, &mut pmc, &mut syscon)
.unwrap();
let token = clocks.support_flexcomm_token().unwrap();
let i2c = hal.flexcomm.4.enabled_as_i2c(&mut syscon, &token);
let pins = Pins::take().unwrap();
let scl = pins.pio1_20.into_i2c4_scl_pin(&mut iocon);
let sda = pins.pio1_21.into_i2c4_sda_pin(&mut iocon);
let i2c = I2cMaster::new(i2c, (scl, sda), Hertz::try_from(1_u32.MHz()).unwrap());
let mut display: TerminalMode<_> = ssd1306::Builder::new()
.size(DisplaySize::Display128x32)
.with_i2c_addr(0x3c)
.connect_i2c(i2c)
.into();
display.init().ok();
display.clear().ok();
loop {
for c in (97..123).chain(65..91) {
if let Err(_err) = display.write_str(unsafe { core::str::from_utf8_unchecked(&[c]) }) {
}
}
}
}