Add hardware memory map
This commit is contained in:
parent
5f62d443dc
commit
ab2df6d8ca
292
src/devices.rs
Normal file
292
src/devices.rs
Normal file
|
@ -0,0 +1,292 @@
|
|||
const DEVICE_NB: usize = 42;
|
||||
|
||||
pub enum Device {
|
||||
Pmu,
|
||||
Radio,
|
||||
Uart,
|
||||
Spi,
|
||||
Nfct,
|
||||
GpioTE,
|
||||
Saadc,
|
||||
Timer,
|
||||
Rtc,
|
||||
Temp,
|
||||
Rng,
|
||||
Ecb,
|
||||
Ccm,
|
||||
Wdt,
|
||||
Qdec,
|
||||
Comp,
|
||||
Egu,
|
||||
Pwm,
|
||||
Pdm,
|
||||
Nvmc,
|
||||
Ppi,
|
||||
Mwu,
|
||||
I2s,
|
||||
Fpu,
|
||||
Gpio,
|
||||
Ficr,
|
||||
Uicr,
|
||||
}
|
||||
|
||||
pub struct MappedDevice {
|
||||
device: Device,
|
||||
address: usize,
|
||||
size: usize,
|
||||
}
|
||||
|
||||
const DEVICES: [MappedDevice; DEVICE_NB] = [
|
||||
/* Power Monitoring Unit */
|
||||
MappedDevice {
|
||||
device: Device::Pmu,
|
||||
address: 0x4000000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* 2.4 GHz Radio */
|
||||
MappedDevice {
|
||||
device: Device::Radio,
|
||||
address: 0x40001000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* UART 0 */
|
||||
MappedDevice {
|
||||
device: Device::Uart,
|
||||
address: 0x40002000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* SPI 0 */
|
||||
MappedDevice {
|
||||
device: Device::Spi,
|
||||
address: 0x40003000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* SPI 1 */
|
||||
MappedDevice {
|
||||
device: Device::Spi,
|
||||
address: 0x40004000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Near-Field Communication Tag */
|
||||
MappedDevice {
|
||||
device: Device::Nfct,
|
||||
address: 0x40005000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* GPIO Tasks and Events */
|
||||
MappedDevice {
|
||||
device: Device::GpioTE,
|
||||
address: 0x40006000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Analog to digital converter */
|
||||
MappedDevice {
|
||||
device: Device::Saadc,
|
||||
address: 0x40007000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Timer 0 */
|
||||
MappedDevice {
|
||||
device: Device::Timer,
|
||||
address: 0x40008000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Timer 1 */
|
||||
MappedDevice {
|
||||
device: Device::Timer,
|
||||
address: 0x40009000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Timer 2 */
|
||||
MappedDevice {
|
||||
device: Device::Timer,
|
||||
address: 0x4000a000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* RTC 0 */
|
||||
MappedDevice {
|
||||
device: Device::Rtc,
|
||||
address: 0x4000b000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Temperature sensor */
|
||||
MappedDevice {
|
||||
device: Device::Temp,
|
||||
address: 0x4000c000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Random Number Generator */
|
||||
MappedDevice {
|
||||
device: Device::Rng,
|
||||
address: 0x4000d000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* AES Electronic Code Book */
|
||||
MappedDevice {
|
||||
device: Device::Ecb,
|
||||
address: 0x4000e000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* AES CCM Mode Encryption */
|
||||
MappedDevice {
|
||||
device: Device::Ccm,
|
||||
address: 0x4000f000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Watchdog Timer */
|
||||
MappedDevice {
|
||||
device: Device::Wdt,
|
||||
address: 0x40010000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* RTC 1 */
|
||||
MappedDevice {
|
||||
device: Device::Rtc,
|
||||
address: 0x40011000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Quadrature Decoder */
|
||||
MappedDevice {
|
||||
device: Device::Qdec,
|
||||
address: 0x40012000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* General Purpose Comparator */
|
||||
MappedDevice {
|
||||
device: Device::Comp,
|
||||
address: 0x40013000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Event Generator Unit 0 */
|
||||
MappedDevice {
|
||||
device: Device::Egu,
|
||||
address: 0x40014000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Event Generator Unit 1 */
|
||||
MappedDevice {
|
||||
device: Device::Egu,
|
||||
address: 0x40015000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Event Generator Unit 2 */
|
||||
MappedDevice {
|
||||
device: Device::Egu,
|
||||
address: 0x40016000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Event Generator Unit 3 */
|
||||
MappedDevice {
|
||||
device: Device::Egu,
|
||||
address: 0x40017000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Event Generator Unit 4 */
|
||||
MappedDevice {
|
||||
device: Device::Egu,
|
||||
address: 0x40018000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Event Generator Unit 5 */
|
||||
MappedDevice {
|
||||
device: Device::Egu,
|
||||
address: 0x40019000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Timer 3 */
|
||||
MappedDevice {
|
||||
device: Device::Timer,
|
||||
address: 0x4001a000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Timer 4 */
|
||||
MappedDevice {
|
||||
device: Device::Timer,
|
||||
address: 0x4001b000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Pulse Width Modulation Unit 0 */
|
||||
MappedDevice {
|
||||
device: Device::Pwm,
|
||||
address: 0x4001c000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Pulse Density Modulation */
|
||||
MappedDevice {
|
||||
device: Device::Pdm,
|
||||
address: 0x4001d000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Non-Volatile Memory Controller */
|
||||
MappedDevice {
|
||||
device: Device::Nvmc,
|
||||
address: 0x4001e000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Programmable Peripheral Interconnect */
|
||||
MappedDevice {
|
||||
device: Device::Ppi,
|
||||
address: 0x4001f000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Memory Watch Unit */
|
||||
MappedDevice {
|
||||
device: Device::Mwu,
|
||||
address: 0x40020000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Pulse Width Modulation Unit 1 */
|
||||
MappedDevice {
|
||||
device: Device::Pwm,
|
||||
address: 0x40021000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Pulse Width Modulation Unit 2 */
|
||||
MappedDevice {
|
||||
device: Device::Pwm,
|
||||
address: 0x40022000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* SPI 2 */
|
||||
MappedDevice {
|
||||
device: Device::Spi,
|
||||
address: 0x40023000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* RTC 2 */
|
||||
MappedDevice {
|
||||
device: Device::Rtc,
|
||||
address: 0x40024000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Inter-IC Sound Interface */
|
||||
MappedDevice {
|
||||
device: Device::I2s,
|
||||
address: 0x40025000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* FPU Interrupt */
|
||||
MappedDevice {
|
||||
device: Device::Fpu,
|
||||
address: 0x40026000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* GPIO */
|
||||
MappedDevice {
|
||||
device: Device::Gpio,
|
||||
address: 0x50000000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* Factory Information Configuration */
|
||||
MappedDevice {
|
||||
device: Device::Ficr,
|
||||
address: 0x10000000,
|
||||
size: 0x1000,
|
||||
},
|
||||
/* User Information Configuration */
|
||||
MappedDevice {
|
||||
device: Device::Uicr,
|
||||
address: 0x10001000,
|
||||
size: 0x1000,
|
||||
},
|
||||
];
|
|
@ -1,6 +1,7 @@
|
|||
#![no_main]
|
||||
#![no_std]
|
||||
|
||||
mod devices;
|
||||
use core::{arch::global_asm, panic::PanicInfo};
|
||||
|
||||
global_asm!(include_str!("bootstrap.s"));
|
||||
|
|
Loading…
Reference in a new issue