rtfm: continue work
This commit is contained in:
parent
7501ea1963
commit
6be0ccfc6a
31
src/main.rs
31
src/main.rs
|
@ -495,7 +495,6 @@ const SCALE: f32 = ((1 << 15) - 1) as f32;
|
||||||
#[link_section = ".sram1.datspi"]
|
#[link_section = ".sram1.datspi"]
|
||||||
static mut DAT: u32 = 0x201; // EN | CSTART
|
static mut DAT: u32 = 0x201; // EN | CSTART
|
||||||
|
|
||||||
static TIME: AtomicU32 = AtomicU32::new(0);
|
|
||||||
static ETHERNET_PENDING: AtomicBool = AtomicBool::new(true);
|
static ETHERNET_PENDING: AtomicBool = AtomicBool::new(true);
|
||||||
|
|
||||||
#[link_section = ".sram3.eth"]
|
#[link_section = ".sram3.eth"]
|
||||||
|
@ -531,7 +530,7 @@ const APP: () = {
|
||||||
// static IFACE: net::iface::EthernetInterface<'static, 'static, 'static, eth::Device> = ();
|
// static IFACE: net::iface::EthernetInterface<'static, 'static, 'static, eth::Device> = ();
|
||||||
// static SOCKETS: net::socket::SocketSet<'static, 'static, 'static> = ();
|
// static SOCKETS: net::socket::SocketSet<'static, 'static, 'static> = ();
|
||||||
|
|
||||||
#[init]
|
#[init(schedule = [tick])]
|
||||||
fn init(c: init::Context) -> init::LateResources {
|
fn init(c: init::Context) -> init::LateResources {
|
||||||
let dp = c.device;
|
let dp = c.device;
|
||||||
let cp = c.core;
|
let cp = c.core;
|
||||||
|
@ -549,15 +548,6 @@ const APP: () = {
|
||||||
rcc.apb4enr.modify(|_, w| w.syscfgen().set_bit());
|
rcc.apb4enr.modify(|_, w| w.syscfgen().set_bit());
|
||||||
io_compensation_setup(&dp.SYSCFG);
|
io_compensation_setup(&dp.SYSCFG);
|
||||||
|
|
||||||
// 100 MHz
|
|
||||||
/*
|
|
||||||
cp.SYST.set_clock_source(cortex_m::peripheral::syst::SystClkSource::Core);
|
|
||||||
cp.SYST.set_reload(cortex_m::peripheral::SYST::get_ticks_per_10ms()*200/10);
|
|
||||||
cp.SYST.enable_counter();
|
|
||||||
cp.SYST.enable_interrupt();
|
|
||||||
unsafe { cp.SCB.shpr[11].write(128); } // systick exception priority
|
|
||||||
*/
|
|
||||||
|
|
||||||
cp.SCB.enable_icache();
|
cp.SCB.enable_icache();
|
||||||
// TODO: ETH DMA coherence issues
|
// TODO: ETH DMA coherence issues
|
||||||
// cp.SCB.enable_dcache(&mut cp.CPUID);
|
// cp.SCB.enable_dcache(&mut cp.CPUID);
|
||||||
|
@ -639,6 +629,8 @@ const APP: () = {
|
||||||
|
|
||||||
tim2_setup(&dp.TIM2);
|
tim2_setup(&dp.TIM2);
|
||||||
|
|
||||||
|
c.schedule.tick(rtfm::Instant::now()).unwrap();
|
||||||
|
|
||||||
init::LateResources {
|
init::LateResources {
|
||||||
SPI: (spi1, spi2, spi4, spi5),
|
SPI: (spi1, spi2, spi4, spi5),
|
||||||
// IFACE: iface,
|
// IFACE: iface,
|
||||||
|
@ -653,6 +645,13 @@ const APP: () = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[task(schedule = [tick])]
|
||||||
|
fn tick(c: tick::Context) {
|
||||||
|
// let now = rtfm::Instant::now();
|
||||||
|
const PERIOD: u32 = 200_000_000;
|
||||||
|
c.schedule.tick(c.scheduled + PERIOD.cycles()).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
// seems to slow it down
|
// seems to slow it down
|
||||||
// #[link_section = ".data.spi1"]
|
// #[link_section = ".data.spi1"]
|
||||||
#[interrupt(resources = [SPI, IIR_STATE, IIR_CH], priority = 1)]
|
#[interrupt(resources = [SPI, IIR_STATE, IIR_CH], priority = 1)]
|
||||||
|
@ -671,7 +670,7 @@ const APP: () = {
|
||||||
let rxdr = &spi1.rxdr as *const _ as *const u16;
|
let rxdr = &spi1.rxdr as *const _ as *const u16;
|
||||||
let a = unsafe { ptr::read_volatile(rxdr) };
|
let a = unsafe { ptr::read_volatile(rxdr) };
|
||||||
let x0 = f32::from(a as i16);
|
let x0 = f32::from(a as i16);
|
||||||
let y0 = unsafe { iir_ch[0].update(&mut iir_state[0], x0) };
|
let y0 = iir_ch[0].update(&mut iir_state[0], x0);
|
||||||
let d = y0 as i16 as u16 ^ 0x8000;
|
let d = y0 as i16 as u16 ^ 0x8000;
|
||||||
let txdr = &spi2.txdr as *const _ as *mut u16;
|
let txdr = &spi2.txdr as *const _ as *mut u16;
|
||||||
unsafe { ptr::write_volatile(txdr, d) };
|
unsafe { ptr::write_volatile(txdr, d) };
|
||||||
|
@ -685,7 +684,7 @@ const APP: () = {
|
||||||
let rxdr = &spi5.rxdr as *const _ as *const u16;
|
let rxdr = &spi5.rxdr as *const _ as *const u16;
|
||||||
let a = unsafe { ptr::read_volatile(rxdr) };
|
let a = unsafe { ptr::read_volatile(rxdr) };
|
||||||
let x0 = f32::from(a as i16);
|
let x0 = f32::from(a as i16);
|
||||||
let y0 = unsafe { iir_ch[1].update(&mut iir_state[1], x0) };
|
let y0 = iir_ch[1].update(&mut iir_state[1], x0);
|
||||||
let d = y0 as i16 as u16 ^ 0x8000;
|
let d = y0 as i16 as u16 ^ 0x8000;
|
||||||
let txdr = &spi4.txdr as *const _ as *mut u16;
|
let txdr = &spi4.txdr as *const _ as *mut u16;
|
||||||
unsafe { ptr::write_volatile(txdr, d) };
|
unsafe { ptr::write_volatile(txdr, d) };
|
||||||
|
@ -702,6 +701,7 @@ const APP: () = {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
// hw interrupt handlers for RTFM to use for scheduling tasks, one per priority
|
||||||
fn DCMI();
|
fn DCMI();
|
||||||
fn JPEG();
|
fn JPEG();
|
||||||
fn SDMMC();
|
fn SDMMC();
|
||||||
|
@ -834,11 +834,6 @@ struct Status {
|
||||||
x1: f32,
|
x1: f32,
|
||||||
y1: f32
|
y1: f32
|
||||||
}
|
}
|
||||||
|
|
||||||
#[exception]
|
|
||||||
fn SysTick() {
|
|
||||||
TIME.fetch_add(1, Ordering::Relaxed);
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#[exception]
|
#[exception]
|
||||||
|
|
Loading…
Reference in New Issue