From 4c91a36568e65c6930609ba78f69621ad3c1720a Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 23 Nov 2021 01:24:21 +0100 Subject: [PATCH] I2C update - Added two missing bit fields for I2CA STATUS register: I2CIDLE and IDLE - Made STATUS register read-only --- CHANGELOG.md | 10 +- Cargo.toml | 2 +- src/i2ca/status.rs | 402 +++-------------------------------- src/lib.rs | 2 +- svd/va108xx-base.svd.patched | 6 +- svd/va108xx-patch.yml | 16 +- 6 files changed, 59 insertions(+), 379 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0e3d7c..cc3e752 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [unreleased] -## [v0.2.0] +## [v0.1.3] + +### Added + +- Added two missing bit fields for I2CA STATUS register: I2CIDLE and IDLE + +### Fixed + +- Made I2CA STATUS register read-only ## [v0.1.2] diff --git a/Cargo.toml b/Cargo.toml index 4bf056c..70adaa5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "va108xx" -version = "0.1.2" +version = "0.1.3" authors = ["Robin Mueller "] edition = "2021" description = "PAC for the Vorago VA108xx family of microcontrollers" diff --git a/src/i2ca/status.rs b/src/i2ca/status.rs index 0c1f13a..6a79314 100644 --- a/src/i2ca/status.rs +++ b/src/i2ca/status.rs @@ -13,27 +13,6 @@ impl From> for R { R(reader) } } -#[doc = "Register `STATUS` writer"] -pub struct W(crate::W); -impl core::ops::Deref for W { - type Target = crate::W; - #[inline(always)] - fn deref(&self) -> &Self::Target { - &self.0 - } -} -impl core::ops::DerefMut for W { - #[inline(always)] - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} -impl From> for W { - #[inline(always)] - fn from(writer: crate::W) -> Self { - W(writer) - } -} #[doc = "Field `WAITING` reader - Controller is Waiting"] pub struct WAITING_R(crate::FieldReader); impl WAITING_R { @@ -49,28 +28,6 @@ impl core::ops::Deref for WAITING_R { &self.0 } } -#[doc = "Field `WAITING` writer - Controller is Waiting"] -pub struct WAITING_W<'a> { - w: &'a mut W, -} -impl<'a> WAITING_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 2)) | ((value as u32 & 0x01) << 2); - self.w - } -} #[doc = "Field `STALLED` reader - Controller is Stalled"] pub struct STALLED_R(crate::FieldReader); impl STALLED_R { @@ -86,28 +43,6 @@ impl core::ops::Deref for STALLED_R { &self.0 } } -#[doc = "Field `STALLED` writer - Controller is Stalled"] -pub struct STALLED_W<'a> { - w: &'a mut W, -} -impl<'a> STALLED_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 3)) | ((value as u32 & 0x01) << 3); - self.w - } -} #[doc = "Field `ARBLOST` reader - I2C Arbitration was lost"] pub struct ARBLOST_R(crate::FieldReader); impl ARBLOST_R { @@ -123,28 +58,6 @@ impl core::ops::Deref for ARBLOST_R { &self.0 } } -#[doc = "Field `ARBLOST` writer - I2C Arbitration was lost"] -pub struct ARBLOST_W<'a> { - w: &'a mut W, -} -impl<'a> ARBLOST_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 4)) | ((value as u32 & 0x01) << 4); - self.w - } -} #[doc = "Field `NACKADDR` reader - I2C Address was not Acknowledged"] pub struct NACKADDR_R(crate::FieldReader); impl NACKADDR_R { @@ -160,28 +73,6 @@ impl core::ops::Deref for NACKADDR_R { &self.0 } } -#[doc = "Field `NACKADDR` writer - I2C Address was not Acknowledged"] -pub struct NACKADDR_W<'a> { - w: &'a mut W, -} -impl<'a> NACKADDR_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 5)) | ((value as u32 & 0x01) << 5); - self.w - } -} #[doc = "Field `NACKDATA` reader - I2C Data was not Acknowledged"] pub struct NACKDATA_R(crate::FieldReader); impl NACKDATA_R { @@ -197,28 +88,6 @@ impl core::ops::Deref for NACKDATA_R { &self.0 } } -#[doc = "Field `NACKDATA` writer - I2C Data was not Acknowledged"] -pub struct NACKDATA_W<'a> { - w: &'a mut W, -} -impl<'a> NACKDATA_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 6)) | ((value as u32 & 0x01) << 6); - self.w - } -} #[doc = "Field `RXNEMPTY` reader - RX FIFO is Not Empty"] pub struct RXNEMPTY_R(crate::FieldReader); impl RXNEMPTY_R { @@ -234,28 +103,6 @@ impl core::ops::Deref for RXNEMPTY_R { &self.0 } } -#[doc = "Field `RXNEMPTY` writer - RX FIFO is Not Empty"] -pub struct RXNEMPTY_W<'a> { - w: &'a mut W, -} -impl<'a> RXNEMPTY_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 8)) | ((value as u32 & 0x01) << 8); - self.w - } -} #[doc = "Field `RXFULL` reader - RX FIFO is Full"] pub struct RXFULL_R(crate::FieldReader); impl RXFULL_R { @@ -271,28 +118,6 @@ impl core::ops::Deref for RXFULL_R { &self.0 } } -#[doc = "Field `RXFULL` writer - RX FIFO is Full"] -pub struct RXFULL_W<'a> { - w: &'a mut W, -} -impl<'a> RXFULL_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 9)) | ((value as u32 & 0x01) << 9); - self.w - } -} #[doc = "Field `RXTRIGGER` reader - RX FIFO Above Trigger Level"] pub struct RXTRIGGER_R(crate::FieldReader); impl RXTRIGGER_R { @@ -308,28 +133,6 @@ impl core::ops::Deref for RXTRIGGER_R { &self.0 } } -#[doc = "Field `RXTRIGGER` writer - RX FIFO Above Trigger Level"] -pub struct RXTRIGGER_W<'a> { - w: &'a mut W, -} -impl<'a> RXTRIGGER_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 11)) | ((value as u32 & 0x01) << 11); - self.w - } -} #[doc = "Field `TXEMPTY` reader - TX FIFO is Empty"] pub struct TXEMPTY_R(crate::FieldReader); impl TXEMPTY_R { @@ -345,28 +148,6 @@ impl core::ops::Deref for TXEMPTY_R { &self.0 } } -#[doc = "Field `TXEMPTY` writer - TX FIFO is Empty"] -pub struct TXEMPTY_W<'a> { - w: &'a mut W, -} -impl<'a> TXEMPTY_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 12)) | ((value as u32 & 0x01) << 12); - self.w - } -} #[doc = "Field `TXNFULL` reader - TX FIFO is Full"] pub struct TXNFULL_R(crate::FieldReader); impl TXNFULL_R { @@ -382,28 +163,6 @@ impl core::ops::Deref for TXNFULL_R { &self.0 } } -#[doc = "Field `TXNFULL` writer - TX FIFO is Full"] -pub struct TXNFULL_W<'a> { - w: &'a mut W, -} -impl<'a> TXNFULL_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 13)) | ((value as u32 & 0x01) << 13); - self.w - } -} #[doc = "Field `TXTRIGGER` reader - TX FIFO Below Trigger Level"] pub struct TXTRIGGER_R(crate::FieldReader); impl TXTRIGGER_R { @@ -419,28 +178,6 @@ impl core::ops::Deref for TXTRIGGER_R { &self.0 } } -#[doc = "Field `TXTRIGGER` writer - TX FIFO Below Trigger Level"] -pub struct TXTRIGGER_W<'a> { - w: &'a mut W, -} -impl<'a> TXTRIGGER_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 15)) | ((value as u32 & 0x01) << 15); - self.w - } -} #[doc = "Field `RAW_SDA` reader - I2C Raw SDA value"] pub struct RAW_SDA_R(crate::FieldReader); impl RAW_SDA_R { @@ -456,28 +193,6 @@ impl core::ops::Deref for RAW_SDA_R { &self.0 } } -#[doc = "Field `RAW_SDA` writer - I2C Raw SDA value"] -pub struct RAW_SDA_W<'a> { - w: &'a mut W, -} -impl<'a> RAW_SDA_W<'a> { - #[doc = r"Sets the field bit"] - #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) - } - #[doc = r"Clears the field bit"] - #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) - } - #[doc = r"Writes raw bits to the field"] - #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 30)) | ((value as u32 & 0x01) << 30); - self.w - } -} #[doc = "Field `RAW_SCL` reader - I2C Raw SCL value"] pub struct RAW_SCL_R(crate::FieldReader); impl RAW_SCL_R { @@ -493,26 +208,34 @@ impl core::ops::Deref for RAW_SCL_R { &self.0 } } -#[doc = "Field `RAW_SCL` writer - I2C Raw SCL value"] -pub struct RAW_SCL_W<'a> { - w: &'a mut W, +#[doc = "Field `I2C_IDLE` reader - I2C bus is Idle"] +pub struct I2C_IDLE_R(crate::FieldReader); +impl I2C_IDLE_R { + #[inline(always)] + pub(crate) fn new(bits: bool) -> Self { + I2C_IDLE_R(crate::FieldReader::new(bits)) + } } -impl<'a> RAW_SCL_W<'a> { - #[doc = r"Sets the field bit"] +impl core::ops::Deref for I2C_IDLE_R { + type Target = crate::FieldReader; #[inline(always)] - pub fn set_bit(self) -> &'a mut W { - self.bit(true) + fn deref(&self) -> &Self::Target { + &self.0 } - #[doc = r"Clears the field bit"] +} +#[doc = "Field `IDLE` reader - Controller is Idle"] +pub struct IDLE_R(crate::FieldReader); +impl IDLE_R { #[inline(always)] - pub fn clear_bit(self) -> &'a mut W { - self.bit(false) + pub(crate) fn new(bits: bool) -> Self { + IDLE_R(crate::FieldReader::new(bits)) } - #[doc = r"Writes raw bits to the field"] +} +impl core::ops::Deref for IDLE_R { + type Target = crate::FieldReader; #[inline(always)] - pub fn bit(self, value: bool) -> &'a mut W { - self.w.bits = (self.w.bits & !(0x01 << 31)) | ((value as u32 & 0x01) << 31); - self.w + fn deref(&self) -> &Self::Target { + &self.0 } } impl R { @@ -581,81 +304,18 @@ impl R { pub fn raw_scl(&self) -> RAW_SCL_R { RAW_SCL_R::new(((self.bits >> 31) & 0x01) != 0) } -} -impl W { - #[doc = "Bit 2 - Controller is Waiting"] + #[doc = "Bit 0 - I2C bus is Idle"] #[inline(always)] - pub fn waiting(&mut self) -> WAITING_W { - WAITING_W { w: self } + pub fn i2c_idle(&self) -> I2C_IDLE_R { + I2C_IDLE_R::new((self.bits & 0x01) != 0) } - #[doc = "Bit 3 - Controller is Stalled"] + #[doc = "Bit 1 - Controller is Idle"] #[inline(always)] - pub fn stalled(&mut self) -> STALLED_W { - STALLED_W { w: self } - } - #[doc = "Bit 4 - I2C Arbitration was lost"] - #[inline(always)] - pub fn arblost(&mut self) -> ARBLOST_W { - ARBLOST_W { w: self } - } - #[doc = "Bit 5 - I2C Address was not Acknowledged"] - #[inline(always)] - pub fn nackaddr(&mut self) -> NACKADDR_W { - NACKADDR_W { w: self } - } - #[doc = "Bit 6 - I2C Data was not Acknowledged"] - #[inline(always)] - pub fn nackdata(&mut self) -> NACKDATA_W { - NACKDATA_W { w: self } - } - #[doc = "Bit 8 - RX FIFO is Not Empty"] - #[inline(always)] - pub fn rxnempty(&mut self) -> RXNEMPTY_W { - RXNEMPTY_W { w: self } - } - #[doc = "Bit 9 - RX FIFO is Full"] - #[inline(always)] - pub fn rxfull(&mut self) -> RXFULL_W { - RXFULL_W { w: self } - } - #[doc = "Bit 11 - RX FIFO Above Trigger Level"] - #[inline(always)] - pub fn rxtrigger(&mut self) -> RXTRIGGER_W { - RXTRIGGER_W { w: self } - } - #[doc = "Bit 12 - TX FIFO is Empty"] - #[inline(always)] - pub fn txempty(&mut self) -> TXEMPTY_W { - TXEMPTY_W { w: self } - } - #[doc = "Bit 13 - TX FIFO is Full"] - #[inline(always)] - pub fn txnfull(&mut self) -> TXNFULL_W { - TXNFULL_W { w: self } - } - #[doc = "Bit 15 - TX FIFO Below Trigger Level"] - #[inline(always)] - pub fn txtrigger(&mut self) -> TXTRIGGER_W { - TXTRIGGER_W { w: self } - } - #[doc = "Bit 30 - I2C Raw SDA value"] - #[inline(always)] - pub fn raw_sda(&mut self) -> RAW_SDA_W { - RAW_SDA_W { w: self } - } - #[doc = "Bit 31 - I2C Raw SCL value"] - #[inline(always)] - pub fn raw_scl(&mut self) -> RAW_SCL_W { - RAW_SCL_W { w: self } - } - #[doc = "Writes raw bits to the register."] - #[inline(always)] - pub unsafe fn bits(&mut self, bits: u32) -> &mut Self { - self.0.bits(bits); - self + pub fn idle(&self) -> IDLE_R { + IDLE_R::new(((self.bits >> 1) & 0x01) != 0) } } -#[doc = "I2C Controller Status Register\n\nThis register you can [`read`](crate::generic::Reg::read), [`write_with_zero`](crate::generic::Reg::write_with_zero), [`reset`](crate::generic::Reg::reset), [`write`](crate::generic::Reg::write), [`modify`](crate::generic::Reg::modify). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [status](index.html) module"] +#[doc = "I2C Controller Status Register\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 [status](index.html) module"] pub struct STATUS_SPEC; impl crate::RegisterSpec for STATUS_SPEC { type Ux = u32; @@ -664,10 +324,6 @@ impl crate::RegisterSpec for STATUS_SPEC { impl crate::Readable for STATUS_SPEC { type Reader = R; } -#[doc = "`write(|w| ..)` method takes [status::W](W) writer structure"] -impl crate::Writable for STATUS_SPEC { - type Writer = W; -} #[doc = "`reset()` method sets STATUS to value 0"] impl crate::Resettable for STATUS_SPEC { #[inline(always)] diff --git a/src/lib.rs b/src/lib.rs index 8b837c9..8ce0b95 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -#![doc = "Peripheral access API for VA108XX microcontrollers (generated using svd2rust v0.19.0 (43be074 2021-11-09))\n\nYou can find an overview of the generated API [here].\n\nAPI features to be included in the [next] +#![doc = "Peripheral access API for VA108XX microcontrollers (generated using svd2rust v0.19.0 (877196f 2021-11-14))\n\nYou can find an overview of the generated API [here].\n\nAPI features to be included in the [next] svd2rust release can be generated by cloning the svd2rust [repository], checking out the above commit, and running `cargo doc --open`.\n\n[here]: https://docs.rs/svd2rust/0.19.0/svd2rust/#peripheral-api\n[next]: https://github.com/rust-embedded/svd2rust/blob/master/CHANGELOG.md#unreleased\n[repository]: https://github.com/rust-embedded/svd2rust"] #![deny(const_err)] #![deny(dead_code)] diff --git a/svd/va108xx-base.svd.patched b/svd/va108xx-base.svd.patched index 8d7f57b..53c8c33 100644 --- a/svd/va108xx-base.svd.patched +++ b/svd/va108xx-base.svd.patched @@ -2157,7 +2157,7 @@ STATUS I2C Controller Status Register 0x018 - + read-only WAITING Controller is Waiting @@ -2223,7 +2223,9 @@ I2C Raw SCL value [31:31] - + I2C_IDLEI2C bus is Idle01 + IDLEController is Idle11 + STATE diff --git a/svd/va108xx-patch.yml b/svd/va108xx-patch.yml index 057b1a6..c4f3c8c 100644 --- a/svd/va108xx-patch.yml +++ b/svd/va108xx-patch.yml @@ -56,4 +56,18 @@ SYSCONFIG: bitOffset: 24 bitWidth: 1 - +# I2CB is derived from I2CA +I2CA: + _modify: + STATUS: + access: read-only + STATUS: + _add: + I2C_IDLE: + description: I2C bus is Idle + bitOffset: 0 + bitWidth: 1 + IDLE: + description: Controller is Idle + bitOffset: 1 + bitWidth: 1