feat: add display UI with splash screen, dashboard, and RSSI sparkline

Implement full SSD1306 OLED display support:
- Splash screen on boot (1.5s) with project name, version, board
- Dashboard showing radio state, config, counters, RSSI/SNR
- RSSI history sparkline (64-sample ring buffer, 2px-wide bars)
- DisplayOn/DisplayOff host commands routed via dedicated channel
- Pure render functions against generic DrawTarget (no hardware coupling)
- Display on/off control bypasses radio task entirely

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
swaitsandClaude Opus 4.6 committed 2026-03-29 20:42:54 -06:00
1 parent 7064110293
commit 3102fc747a
17624 files changed
+4564928 -38

No files matched your search

+59
View File
@@ -0,0 +1,59 @@
#[doc = r"Register block"]
#[repr(C)]
pub struct INFO {
_reserved0: [u8; 0x04],
#[doc = "0x04..0x0c - Description collection: Device identifier"]
pub deviceid: [DEVICEID; 2],
#[doc = "0x0c - Part code"]
pub part: PART,
#[doc = "0x10 - Part Variant, Hardware version and Production configuration"]
pub variant: VARIANT,
#[doc = "0x14 - Package option"]
pub package: PACKAGE,
#[doc = "0x18 - RAM variant"]
pub ram: RAM,
#[doc = "0x1c - Flash variant"]
pub flash: FLASH,
#[doc = "0x20 - Code memory page size"]
pub codepagesize: CODEPAGESIZE,
#[doc = "0x24 - Code memory size"]
pub codesize: CODESIZE,
#[doc = "0x28 - Device type"]
pub devicetype: DEVICETYPE,
}
#[doc = "DEVICEID (r) register accessor: an alias for `Reg<DEVICEID_SPEC>`"]
pub type DEVICEID = crate::Reg<deviceid::DEVICEID_SPEC>;
#[doc = "Description collection: Device identifier"]
pub mod deviceid;
#[doc = "PART (r) register accessor: an alias for `Reg<PART_SPEC>`"]
pub type PART = crate::Reg<part::PART_SPEC>;
#[doc = "Part code"]
pub mod part;
#[doc = "VARIANT (r) register accessor: an alias for `Reg<VARIANT_SPEC>`"]
pub type VARIANT = crate::Reg<variant::VARIANT_SPEC>;
#[doc = "Part Variant, Hardware version and Production configuration"]
pub mod variant;
#[doc = "PACKAGE (r) register accessor: an alias for `Reg<PACKAGE_SPEC>`"]
pub type PACKAGE = crate::Reg<package::PACKAGE_SPEC>;
#[doc = "Package option"]
pub mod package;
#[doc = "RAM (r) register accessor: an alias for `Reg<RAM_SPEC>`"]
pub type RAM = crate::Reg<ram::RAM_SPEC>;
#[doc = "RAM variant"]
pub mod ram;
#[doc = "FLASH (r) register accessor: an alias for `Reg<FLASH_SPEC>`"]
pub type FLASH = crate::Reg<flash::FLASH_SPEC>;
#[doc = "Flash variant"]
pub mod flash;
#[doc = "CODEPAGESIZE (r) register accessor: an alias for `Reg<CODEPAGESIZE_SPEC>`"]
pub type CODEPAGESIZE = crate::Reg<codepagesize::CODEPAGESIZE_SPEC>;
#[doc = "Code memory page size"]
pub mod codepagesize;
#[doc = "CODESIZE (r) register accessor: an alias for `Reg<CODESIZE_SPEC>`"]
pub type CODESIZE = crate::Reg<codesize::CODESIZE_SPEC>;
#[doc = "Code memory size"]
pub mod codesize;
#[doc = "DEVICETYPE (r) register accessor: an alias for `Reg<DEVICETYPE_SPEC>`"]
pub type DEVICETYPE = crate::Reg<devicetype::DEVICETYPE_SPEC>;
#[doc = "Device type"]
pub mod devicetype;
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `CODEPAGESIZE` reader"]
pub struct R(crate::R<CODEPAGESIZE_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<CODEPAGESIZE_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<CODEPAGESIZE_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<CODEPAGESIZE_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `CODEPAGESIZE` reader - Code memory page size"]
pub type CODEPAGESIZE_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Code memory page size"]
#[inline(always)]
pub fn codepagesize(&self) -> CODEPAGESIZE_R {
CODEPAGESIZE_R::new(self.bits)
}
}
#[doc = "Code memory page size\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [codepagesize](index.html) module"]
pub struct CODEPAGESIZE_SPEC;
impl crate::RegisterSpec for CODEPAGESIZE_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [codepagesize::R](R) reader structure"]
impl crate::Readable for CODEPAGESIZE_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets CODEPAGESIZE to value 0x1000"]
impl crate::Resettable for CODEPAGESIZE_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0x1000
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `CODESIZE` reader"]
pub struct R(crate::R<CODESIZE_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<CODESIZE_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<CODESIZE_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<CODESIZE_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `CODESIZE` reader - Code memory size in number of pages"]
pub type CODESIZE_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Code memory size in number of pages"]
#[inline(always)]
pub fn codesize(&self) -> CODESIZE_R {
CODESIZE_R::new(self.bits)
}
}
#[doc = "Code memory size\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [codesize](index.html) module"]
pub struct CODESIZE_SPEC;
impl crate::RegisterSpec for CODESIZE_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [codesize::R](R) reader structure"]
impl crate::Readable for CODESIZE_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets CODESIZE to value 0x0100"]
impl crate::Resettable for CODESIZE_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0x0100
}
}
+41
View File
@@ -0,0 +1,41 @@
#[doc = "Register `DEVICEID[%s]` reader"]
pub struct R(crate::R<DEVICEID_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<DEVICEID_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<DEVICEID_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<DEVICEID_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `DEVICEID` reader - 64 bit unique device identifier"]
pub type DEVICEID_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - 64 bit unique device identifier"]
#[inline(always)]
pub fn deviceid(&self) -> DEVICEID_R {
DEVICEID_R::new(self.bits)
}
}
#[doc = "Description collection: Device identifier\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [deviceid](index.html) module"]
pub struct DEVICEID_SPEC;
impl crate::RegisterSpec for DEVICEID_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [deviceid::R](R) reader structure"]
impl crate::Readable for DEVICEID_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets DEVICEID[%s]
to value 0xffff_ffff"]
impl crate::Resettable for DEVICEID_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+76
View File
@@ -0,0 +1,76 @@
#[doc = "Register `DEVICETYPE` reader"]
pub struct R(crate::R<DEVICETYPE_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<DEVICETYPE_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<DEVICETYPE_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<DEVICETYPE_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `DEVICETYPE` reader - Device type"]
pub type DEVICETYPE_R = crate::FieldReader<u32, DEVICETYPE_A>;
#[doc = "Device type\n\nValue on reset: 4294967295"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u32)]
pub enum DEVICETYPE_A {
#[doc = "0: Device is an physical DIE"]
DIE = 0,
#[doc = "4294967295: Device is an FPGA"]
FPGA = 4294967295,
}
impl From<DEVICETYPE_A> for u32 {
#[inline(always)]
fn from(variant: DEVICETYPE_A) -> Self {
variant as _
}
}
impl DEVICETYPE_R {
#[doc = "Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> Option<DEVICETYPE_A> {
match self.bits {
0 => Some(DEVICETYPE_A::DIE),
4294967295 => Some(DEVICETYPE_A::FPGA),
_ => None,
}
}
#[doc = "Checks if the value of the field is `DIE`"]
#[inline(always)]
pub fn is_die(&self) -> bool {
*self == DEVICETYPE_A::DIE
}
#[doc = "Checks if the value of the field is `FPGA`"]
#[inline(always)]
pub fn is_fpga(&self) -> bool {
*self == DEVICETYPE_A::FPGA
}
}
impl R {
#[doc = "Bits 0:31 - Device type"]
#[inline(always)]
pub fn devicetype(&self) -> DEVICETYPE_R {
DEVICETYPE_R::new(self.bits)
}
}
#[doc = "Device type\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [devicetype](index.html) module"]
pub struct DEVICETYPE_SPEC;
impl crate::RegisterSpec for DEVICETYPE_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [devicetype::R](R) reader structure"]
impl crate::Readable for DEVICETYPE_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets DEVICETYPE to value 0xffff_ffff"]
impl crate::Resettable for DEVICETYPE_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+68
View File
@@ -0,0 +1,68 @@
#[doc = "Register `FLASH` reader"]
pub struct R(crate::R<FLASH_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<FLASH_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<FLASH_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<FLASH_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `FLASH` reader - Flash variant"]
pub type FLASH_R = crate::FieldReader<u32, FLASH_A>;
#[doc = "Flash variant\n\nValue on reset: 1024"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u32)]
pub enum FLASH_A {
#[doc = "1024: 1 MByte FLASH"]
K1024 = 1024,
}
impl From<FLASH_A> for u32 {
#[inline(always)]
fn from(variant: FLASH_A) -> Self {
variant as _
}
}
impl FLASH_R {
#[doc = "Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> Option<FLASH_A> {
match self.bits {
1024 => Some(FLASH_A::K1024),
_ => None,
}
}
#[doc = "Checks if the value of the field is `K1024`"]
#[inline(always)]
pub fn is_k1024(&self) -> bool {
*self == FLASH_A::K1024
}
}
impl R {
#[doc = "Bits 0:31 - Flash variant"]
#[inline(always)]
pub fn flash(&self) -> FLASH_R {
FLASH_R::new(self.bits)
}
}
#[doc = "Flash variant\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [flash](index.html) module"]
pub struct FLASH_SPEC;
impl crate::RegisterSpec for FLASH_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [flash::R](R) reader structure"]
impl crate::Readable for FLASH_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets FLASH to value 0x0400"]
impl crate::Resettable for FLASH_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0x0400
}
}
+68
View File
@@ -0,0 +1,68 @@
#[doc = "Register `PACKAGE` reader"]
pub struct R(crate::R<PACKAGE_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<PACKAGE_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<PACKAGE_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<PACKAGE_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `PACKAGE` reader - Package option"]
pub type PACKAGE_R = crate::FieldReader<u32, PACKAGE_A>;
#[doc = "Package option\n\nValue on reset: 8192"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u32)]
pub enum PACKAGE_A {
#[doc = "8192: CCxx - 236 ball wlCSP"]
CC = 8192,
}
impl From<PACKAGE_A> for u32 {
#[inline(always)]
fn from(variant: PACKAGE_A) -> Self {
variant as _
}
}
impl PACKAGE_R {
#[doc = "Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> Option<PACKAGE_A> {
match self.bits {
8192 => Some(PACKAGE_A::CC),
_ => None,
}
}
#[doc = "Checks if the value of the field is `CC`"]
#[inline(always)]
pub fn is_cc(&self) -> bool {
*self == PACKAGE_A::CC
}
}
impl R {
#[doc = "Bits 0:31 - Package option"]
#[inline(always)]
pub fn package(&self) -> PACKAGE_R {
PACKAGE_R::new(self.bits)
}
}
#[doc = "Package option\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [package](index.html) module"]
pub struct PACKAGE_SPEC;
impl crate::RegisterSpec for PACKAGE_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [package::R](R) reader structure"]
impl crate::Readable for PACKAGE_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets PACKAGE to value 0x2000"]
impl crate::Resettable for PACKAGE_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0x2000
}
}
+68
View File
@@ -0,0 +1,68 @@
#[doc = "Register `PART` reader"]
pub struct R(crate::R<PART_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<PART_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<PART_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<PART_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `PART` reader - Part code"]
pub type PART_R = crate::FieldReader<u32, PART_A>;
#[doc = "Part code\n\nValue on reset: 37216"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u32)]
pub enum PART_A {
#[doc = "37216: nRF9160"]
N9160 = 37216,
}
impl From<PART_A> for u32 {
#[inline(always)]
fn from(variant: PART_A) -> Self {
variant as _
}
}
impl PART_R {
#[doc = "Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> Option<PART_A> {
match self.bits {
37216 => Some(PART_A::N9160),
_ => None,
}
}
#[doc = "Checks if the value of the field is `N9160`"]
#[inline(always)]
pub fn is_n9160(&self) -> bool {
*self == PART_A::N9160
}
}
impl R {
#[doc = "Bits 0:31 - Part code"]
#[inline(always)]
pub fn part(&self) -> PART_R {
PART_R::new(self.bits)
}
}
#[doc = "Part code\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [part](index.html) module"]
pub struct PART_SPEC;
impl crate::RegisterSpec for PART_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [part::R](R) reader structure"]
impl crate::Readable for PART_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets PART to value 0x9160"]
impl crate::Resettable for PART_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0x9160
}
}
+76
View File
@@ -0,0 +1,76 @@
#[doc = "Register `RAM` reader"]
pub struct R(crate::R<RAM_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<RAM_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<RAM_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<RAM_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `RAM` reader - RAM variant"]
pub type RAM_R = crate::FieldReader<u32, RAM_A>;
#[doc = "RAM variant\n\nValue on reset: 256"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u32)]
pub enum RAM_A {
#[doc = "256: 256 kByte RAM"]
K256 = 256,
#[doc = "4294967295: Unspecified"]
UNSPECIFIED = 4294967295,
}
impl From<RAM_A> for u32 {
#[inline(always)]
fn from(variant: RAM_A) -> Self {
variant as _
}
}
impl RAM_R {
#[doc = "Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> Option<RAM_A> {
match self.bits {
256 => Some(RAM_A::K256),
4294967295 => Some(RAM_A::UNSPECIFIED),
_ => None,
}
}
#[doc = "Checks if the value of the field is `K256`"]
#[inline(always)]
pub fn is_k256(&self) -> bool {
*self == RAM_A::K256
}
#[doc = "Checks if the value of the field is `UNSPECIFIED`"]
#[inline(always)]
pub fn is_unspecified(&self) -> bool {
*self == RAM_A::UNSPECIFIED
}
}
impl R {
#[doc = "Bits 0:31 - RAM variant"]
#[inline(always)]
pub fn ram(&self) -> RAM_R {
RAM_R::new(self.bits)
}
}
#[doc = "RAM variant\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [ram](index.html) module"]
pub struct RAM_SPEC;
impl crate::RegisterSpec for RAM_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [ram::R](R) reader structure"]
impl crate::Readable for RAM_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets RAM to value 0x0100"]
impl crate::Resettable for RAM_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0x0100
}
}
+76
View File
@@ -0,0 +1,76 @@
#[doc = "Register `VARIANT` reader"]
pub struct R(crate::R<VARIANT_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<VARIANT_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<VARIANT_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<VARIANT_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `VARIANT` reader - Part Variant, Hardware version and Production configuration, encoded as ASCII"]
pub type VARIANT_R = crate::FieldReader<u32, VARIANT_A>;
#[doc = "Part Variant, Hardware version and Production configuration, encoded as ASCII\n\nValue on reset: 268435455"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u32)]
pub enum VARIANT_A {
#[doc = "1094795585: AAAA"]
AAAA = 1094795585,
#[doc = "1094795568: AAA0"]
AAA0 = 1094795568,
}
impl From<VARIANT_A> for u32 {
#[inline(always)]
fn from(variant: VARIANT_A) -> Self {
variant as _
}
}
impl VARIANT_R {
#[doc = "Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> Option<VARIANT_A> {
match self.bits {
1094795585 => Some(VARIANT_A::AAAA),
1094795568 => Some(VARIANT_A::AAA0),
_ => None,
}
}
#[doc = "Checks if the value of the field is `AAAA`"]
#[inline(always)]
pub fn is_aaaa(&self) -> bool {
*self == VARIANT_A::AAAA
}
#[doc = "Checks if the value of the field is `AAA0`"]
#[inline(always)]
pub fn is_aaa0(&self) -> bool {
*self == VARIANT_A::AAA0
}
}
impl R {
#[doc = "Bits 0:31 - Part Variant, Hardware version and Production configuration, encoded as ASCII"]
#[inline(always)]
pub fn variant(&self) -> VARIANT_R {
VARIANT_R::new(self.bits)
}
}
#[doc = "Part Variant, Hardware version and Production configuration\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [variant](index.html) module"]
pub struct VARIANT_SPEC;
impl crate::RegisterSpec for VARIANT_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [variant::R](R) reader structure"]
impl crate::Readable for VARIANT_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets VARIANT to value 0x0fff_ffff"]
impl crate::Resettable for VARIANT_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0x0fff_ffff
}
}
+16
View File
@@ -0,0 +1,16 @@
#[doc = r"Register block"]
#[repr(C)]
pub struct TRIMCNF {
#[doc = "0x00 - Description cluster: Address"]
pub addr: ADDR,
#[doc = "0x04 - Description cluster: Data"]
pub data: DATA,
}
#[doc = "ADDR (r) register accessor: an alias for `Reg<ADDR_SPEC>`"]
pub type ADDR = crate::Reg<addr::ADDR_SPEC>;
#[doc = "Description cluster: Address"]
pub mod addr;
#[doc = "DATA (r) register accessor: an alias for `Reg<DATA_SPEC>`"]
pub type DATA = crate::Reg<data::DATA_SPEC>;
#[doc = "Description cluster: Data"]
pub mod data;
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `ADDR` reader"]
pub struct R(crate::R<ADDR_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<ADDR_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<ADDR_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<ADDR_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `Address` reader - Address"]
pub type ADDRESS_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Address"]
#[inline(always)]
pub fn address(&self) -> ADDRESS_R {
ADDRESS_R::new(self.bits)
}
}
#[doc = "Description cluster: Address\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [addr](index.html) module"]
pub struct ADDR_SPEC;
impl crate::RegisterSpec for ADDR_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [addr::R](R) reader structure"]
impl crate::Readable for ADDR_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets ADDR to value 0xffff_ffff"]
impl crate::Resettable for ADDR_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `DATA` reader"]
pub struct R(crate::R<DATA_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<DATA_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<DATA_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<DATA_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `Data` reader - Data"]
pub type DATA_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Data"]
#[inline(always)]
pub fn data(&self) -> DATA_R {
DATA_R::new(self.bits)
}
}
#[doc = "Description cluster: Data\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [data](index.html) module"]
pub struct DATA_SPEC;
impl crate::RegisterSpec for DATA_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [data::R](R) reader structure"]
impl crate::Readable for DATA_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets DATA to value 0xffff_ffff"]
impl crate::Resettable for DATA_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+52
View File
@@ -0,0 +1,52 @@
#[doc = r"Register block"]
#[repr(C)]
pub struct TRNG90B {
#[doc = "0x00 - Amount of bytes for the required entropy bits"]
pub bytes: BYTES,
#[doc = "0x04 - Repetition counter cutoff"]
pub rccutoff: RCCUTOFF,
#[doc = "0x08 - Adaptive proportion cutoff"]
pub apcutoff: APCUTOFF,
#[doc = "0x0c - Amount of bytes for the startup tests"]
pub startup: STARTUP,
#[doc = "0x10 - Sample count for ring oscillator 1"]
pub rosc1: ROSC1,
#[doc = "0x14 - Sample count for ring oscillator 2"]
pub rosc2: ROSC2,
#[doc = "0x18 - Sample count for ring oscillator 3"]
pub rosc3: ROSC3,
#[doc = "0x1c - Sample count for ring oscillator 4"]
pub rosc4: ROSC4,
}
#[doc = "BYTES (r) register accessor: an alias for `Reg<BYTES_SPEC>`"]
pub type BYTES = crate::Reg<bytes::BYTES_SPEC>;
#[doc = "Amount of bytes for the required entropy bits"]
pub mod bytes;
#[doc = "RCCUTOFF (r) register accessor: an alias for `Reg<RCCUTOFF_SPEC>`"]
pub type RCCUTOFF = crate::Reg<rccutoff::RCCUTOFF_SPEC>;
#[doc = "Repetition counter cutoff"]
pub mod rccutoff;
#[doc = "APCUTOFF (r) register accessor: an alias for `Reg<APCUTOFF_SPEC>`"]
pub type APCUTOFF = crate::Reg<apcutoff::APCUTOFF_SPEC>;
#[doc = "Adaptive proportion cutoff"]
pub mod apcutoff;
#[doc = "STARTUP (r) register accessor: an alias for `Reg<STARTUP_SPEC>`"]
pub type STARTUP = crate::Reg<startup::STARTUP_SPEC>;
#[doc = "Amount of bytes for the startup tests"]
pub mod startup;
#[doc = "ROSC1 (r) register accessor: an alias for `Reg<ROSC1_SPEC>`"]
pub type ROSC1 = crate::Reg<rosc1::ROSC1_SPEC>;
#[doc = "Sample count for ring oscillator 1"]
pub mod rosc1;
#[doc = "ROSC2 (r) register accessor: an alias for `Reg<ROSC2_SPEC>`"]
pub type ROSC2 = crate::Reg<rosc2::ROSC2_SPEC>;
#[doc = "Sample count for ring oscillator 2"]
pub mod rosc2;
#[doc = "ROSC3 (r) register accessor: an alias for `Reg<ROSC3_SPEC>`"]
pub type ROSC3 = crate::Reg<rosc3::ROSC3_SPEC>;
#[doc = "Sample count for ring oscillator 3"]
pub mod rosc3;
#[doc = "ROSC4 (r) register accessor: an alias for `Reg<ROSC4_SPEC>`"]
pub type ROSC4 = crate::Reg<rosc4::ROSC4_SPEC>;
#[doc = "Sample count for ring oscillator 4"]
pub mod rosc4;
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `APCUTOFF` reader"]
pub struct R(crate::R<APCUTOFF_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<APCUTOFF_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<APCUTOFF_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<APCUTOFF_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `APCUTOFF` reader - Adaptive proportion cutoff"]
pub type APCUTOFF_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Adaptive proportion cutoff"]
#[inline(always)]
pub fn apcutoff(&self) -> APCUTOFF_R {
APCUTOFF_R::new(self.bits)
}
}
#[doc = "Adaptive proportion cutoff\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [apcutoff](index.html) module"]
pub struct APCUTOFF_SPEC;
impl crate::RegisterSpec for APCUTOFF_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [apcutoff::R](R) reader structure"]
impl crate::Readable for APCUTOFF_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets APCUTOFF to value 0xffff_ffff"]
impl crate::Resettable for APCUTOFF_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `BYTES` reader"]
pub struct R(crate::R<BYTES_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<BYTES_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<BYTES_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<BYTES_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `BYTES` reader - Amount of bytes for the required entropy bits"]
pub type BYTES_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Amount of bytes for the required entropy bits"]
#[inline(always)]
pub fn bytes(&self) -> BYTES_R {
BYTES_R::new(self.bits)
}
}
#[doc = "Amount of bytes for the required entropy bits\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [bytes](index.html) module"]
pub struct BYTES_SPEC;
impl crate::RegisterSpec for BYTES_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [bytes::R](R) reader structure"]
impl crate::Readable for BYTES_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets BYTES to value 0xffff_ffff"]
impl crate::Resettable for BYTES_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `RCCUTOFF` reader"]
pub struct R(crate::R<RCCUTOFF_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<RCCUTOFF_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<RCCUTOFF_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<RCCUTOFF_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `RCCUTOFF` reader - Repetition counter cutoff"]
pub type RCCUTOFF_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Repetition counter cutoff"]
#[inline(always)]
pub fn rccutoff(&self) -> RCCUTOFF_R {
RCCUTOFF_R::new(self.bits)
}
}
#[doc = "Repetition counter cutoff\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [rccutoff](index.html) module"]
pub struct RCCUTOFF_SPEC;
impl crate::RegisterSpec for RCCUTOFF_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [rccutoff::R](R) reader structure"]
impl crate::Readable for RCCUTOFF_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets RCCUTOFF to value 0xffff_ffff"]
impl crate::Resettable for RCCUTOFF_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `ROSC1` reader"]
pub struct R(crate::R<ROSC1_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<ROSC1_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<ROSC1_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<ROSC1_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `ROSC1` reader - Sample count for ring oscillator 1"]
pub type ROSC1_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Sample count for ring oscillator 1"]
#[inline(always)]
pub fn rosc1(&self) -> ROSC1_R {
ROSC1_R::new(self.bits)
}
}
#[doc = "Sample count for ring oscillator 1\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [rosc1](index.html) module"]
pub struct ROSC1_SPEC;
impl crate::RegisterSpec for ROSC1_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [rosc1::R](R) reader structure"]
impl crate::Readable for ROSC1_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets ROSC1 to value 0xffff_ffff"]
impl crate::Resettable for ROSC1_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `ROSC2` reader"]
pub struct R(crate::R<ROSC2_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<ROSC2_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<ROSC2_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<ROSC2_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `ROSC2` reader - Sample count for ring oscillator 2"]
pub type ROSC2_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Sample count for ring oscillator 2"]
#[inline(always)]
pub fn rosc2(&self) -> ROSC2_R {
ROSC2_R::new(self.bits)
}
}
#[doc = "Sample count for ring oscillator 2\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [rosc2](index.html) module"]
pub struct ROSC2_SPEC;
impl crate::RegisterSpec for ROSC2_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [rosc2::R](R) reader structure"]
impl crate::Readable for ROSC2_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets ROSC2 to value 0xffff_ffff"]
impl crate::Resettable for ROSC2_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `ROSC3` reader"]
pub struct R(crate::R<ROSC3_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<ROSC3_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<ROSC3_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<ROSC3_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `ROSC3` reader - Sample count for ring oscillator 3"]
pub type ROSC3_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Sample count for ring oscillator 3"]
#[inline(always)]
pub fn rosc3(&self) -> ROSC3_R {
ROSC3_R::new(self.bits)
}
}
#[doc = "Sample count for ring oscillator 3\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [rosc3](index.html) module"]
pub struct ROSC3_SPEC;
impl crate::RegisterSpec for ROSC3_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [rosc3::R](R) reader structure"]
impl crate::Readable for ROSC3_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets ROSC3 to value 0xffff_ffff"]
impl crate::Resettable for ROSC3_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `ROSC4` reader"]
pub struct R(crate::R<ROSC4_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<ROSC4_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<ROSC4_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<ROSC4_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `ROSC4` reader - Sample count for ring oscillator 4"]
pub type ROSC4_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Sample count for ring oscillator 4"]
#[inline(always)]
pub fn rosc4(&self) -> ROSC4_R {
ROSC4_R::new(self.bits)
}
}
#[doc = "Sample count for ring oscillator 4\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [rosc4](index.html) module"]
pub struct ROSC4_SPEC;
impl crate::RegisterSpec for ROSC4_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [rosc4::R](R) reader structure"]
impl crate::Readable for ROSC4_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets ROSC4 to value 0xffff_ffff"]
impl crate::Resettable for ROSC4_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0xffff_ffff
}
}
+40
View File
@@ -0,0 +1,40 @@
#[doc = "Register `STARTUP` reader"]
pub struct R(crate::R<STARTUP_SPEC>);
impl core::ops::Deref for R {
type Target = crate::R<STARTUP_SPEC>;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl From<crate::R<STARTUP_SPEC>> for R {
#[inline(always)]
fn from(reader: crate::R<STARTUP_SPEC>) -> Self {
R(reader)
}
}
#[doc = "Field `STARTUP` reader - Amount of bytes for the startup tests"]
pub type STARTUP_R = crate::FieldReader<u32, u32>;
impl R {
#[doc = "Bits 0:31 - Amount of bytes for the startup tests"]
#[inline(always)]
pub fn startup(&self) -> STARTUP_R {
STARTUP_R::new(self.bits)
}
}
#[doc = "Amount of bytes for the startup tests\n\nThis register you can [`read`](crate::generic::Reg::read). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [startup](index.html) module"]
pub struct STARTUP_SPEC;
impl crate::RegisterSpec for STARTUP_SPEC {
type Ux = u32;
}
#[doc = "`read()` method returns [startup::R](R) reader structure"]
impl crate::Readable for STARTUP_SPEC {
type Reader = R;
}
#[doc = "`reset()` method sets STARTUP to value 0x0210"]
impl crate::Resettable for STARTUP_SPEC {
#[inline(always)]
fn reset_value() -> Self::Ux {
0x0210
}
}