atsamv71q20 0.21.0

Peripheral access API for ATSAMV71Q20 microcontrollers from Atmel/Microchip (generated using svd2rust)
Documentation
#[doc = "Register `MCAN_PSR` reader"]
pub struct R(crate::R<MCAN_PSR_SPEC>);
impl core::ops::Deref for R {
    type Target = crate::R<MCAN_PSR_SPEC>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl From<crate::R<MCAN_PSR_SPEC>> for R {
    #[inline(always)]
    fn from(reader: crate::R<MCAN_PSR_SPEC>) -> Self {
        R(reader)
    }
}
#[doc = "Last Error Code (set to 111 on read)\n\nValue on reset: 0"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u8)]
pub enum LEC_A {
    #[doc = "0: No error occurred since LEC has been reset by successful reception or transmission."]
    NO_ERROR = 0,
    #[doc = "1: More than 5 equal bits in a sequence have occurred in a part of a received message where this is not allowed."]
    STUFF_ERROR = 1,
    #[doc = "2: A fixed format part of a received frame has the wrong format."]
    FORM_ERROR = 2,
    #[doc = "3: The message transmitted by the MCAN was not acknowledged by another node."]
    ACK_ERROR = 3,
    #[doc = "4: During the transmission of a message (with the exception of the arbitration field), the device wanted to send a recessive level (bit of logical value '1'), but the monitored bus value was dominant."]
    BIT1_ERROR = 4,
    #[doc = "5: During the transmission of a message (or acknowledge bit, or active error flag, or overload flag), the device wanted to send a dominant level (data or identifier bit logical value '0'), but the monitored bus value was recessive. During Bus_Off recovery this status is set each time a sequence of 11 recessive bits has been monitored. This enables the processor to monitor the proceeding of the Bus_Off recovery sequence (indicating the bus is not stuck at dominant or continuously disturbed)."]
    BIT0_ERROR = 5,
    #[doc = "6: The CRC check sum of a received message was incorrect. The CRC of an incoming message does not match with the CRC calculated from the received data."]
    CRC_ERROR = 6,
    #[doc = "7: Any read access to the Protocol Status Register re-initializes the LEC to '7'. When the LEC shows the value '7', no CAN bus event was detected since the last processor read access to the Protocol Status Register."]
    NO_CHANGE = 7,
}
impl From<LEC_A> for u8 {
    #[inline(always)]
    fn from(variant: LEC_A) -> Self {
        variant as _
    }
}
#[doc = "Field `LEC` reader - Last Error Code (set to 111 on read)"]
pub struct LEC_R(crate::FieldReader<u8, LEC_A>);
impl LEC_R {
    #[inline(always)]
    pub(crate) fn new(bits: u8) -> Self {
        LEC_R(crate::FieldReader::new(bits))
    }
    #[doc = r"Get enumerated values variant"]
    #[inline(always)]
    pub fn variant(&self) -> LEC_A {
        match self.bits {
            0 => LEC_A::NO_ERROR,
            1 => LEC_A::STUFF_ERROR,
            2 => LEC_A::FORM_ERROR,
            3 => LEC_A::ACK_ERROR,
            4 => LEC_A::BIT1_ERROR,
            5 => LEC_A::BIT0_ERROR,
            6 => LEC_A::CRC_ERROR,
            7 => LEC_A::NO_CHANGE,
            _ => unreachable!(),
        }
    }
    #[doc = "Checks if the value of the field is `NO_ERROR`"]
    #[inline(always)]
    pub fn is_no_error(&self) -> bool {
        **self == LEC_A::NO_ERROR
    }
    #[doc = "Checks if the value of the field is `STUFF_ERROR`"]
    #[inline(always)]
    pub fn is_stuff_error(&self) -> bool {
        **self == LEC_A::STUFF_ERROR
    }
    #[doc = "Checks if the value of the field is `FORM_ERROR`"]
    #[inline(always)]
    pub fn is_form_error(&self) -> bool {
        **self == LEC_A::FORM_ERROR
    }
    #[doc = "Checks if the value of the field is `ACK_ERROR`"]
    #[inline(always)]
    pub fn is_ack_error(&self) -> bool {
        **self == LEC_A::ACK_ERROR
    }
    #[doc = "Checks if the value of the field is `BIT1_ERROR`"]
    #[inline(always)]
    pub fn is_bit1_error(&self) -> bool {
        **self == LEC_A::BIT1_ERROR
    }
    #[doc = "Checks if the value of the field is `BIT0_ERROR`"]
    #[inline(always)]
    pub fn is_bit0_error(&self) -> bool {
        **self == LEC_A::BIT0_ERROR
    }
    #[doc = "Checks if the value of the field is `CRC_ERROR`"]
    #[inline(always)]
    pub fn is_crc_error(&self) -> bool {
        **self == LEC_A::CRC_ERROR
    }
    #[doc = "Checks if the value of the field is `NO_CHANGE`"]
    #[inline(always)]
    pub fn is_no_change(&self) -> bool {
        **self == LEC_A::NO_CHANGE
    }
}
impl core::ops::Deref for LEC_R {
    type Target = crate::FieldReader<u8, LEC_A>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
#[doc = "Activity\n\nValue on reset: 0"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u8)]
pub enum ACT_A {
    #[doc = "0: Node is synchronizing on CAN communication"]
    SYNCHRONIZING = 0,
    #[doc = "1: Node is neither receiver nor transmitter"]
    IDLE = 1,
    #[doc = "2: Node is operating as receiver"]
    RECEIVER = 2,
    #[doc = "3: Node is operating as transmitter"]
    TRANSMITTER = 3,
}
impl From<ACT_A> for u8 {
    #[inline(always)]
    fn from(variant: ACT_A) -> Self {
        variant as _
    }
}
#[doc = "Field `ACT` reader - Activity"]
pub struct ACT_R(crate::FieldReader<u8, ACT_A>);
impl ACT_R {
    #[inline(always)]
    pub(crate) fn new(bits: u8) -> Self {
        ACT_R(crate::FieldReader::new(bits))
    }
    #[doc = r"Get enumerated values variant"]
    #[inline(always)]
    pub fn variant(&self) -> ACT_A {
        match self.bits {
            0 => ACT_A::SYNCHRONIZING,
            1 => ACT_A::IDLE,
            2 => ACT_A::RECEIVER,
            3 => ACT_A::TRANSMITTER,
            _ => unreachable!(),
        }
    }
    #[doc = "Checks if the value of the field is `SYNCHRONIZING`"]
    #[inline(always)]
    pub fn is_synchronizing(&self) -> bool {
        **self == ACT_A::SYNCHRONIZING
    }
    #[doc = "Checks if the value of the field is `IDLE`"]
    #[inline(always)]
    pub fn is_idle(&self) -> bool {
        **self == ACT_A::IDLE
    }
    #[doc = "Checks if the value of the field is `RECEIVER`"]
    #[inline(always)]
    pub fn is_receiver(&self) -> bool {
        **self == ACT_A::RECEIVER
    }
    #[doc = "Checks if the value of the field is `TRANSMITTER`"]
    #[inline(always)]
    pub fn is_transmitter(&self) -> bool {
        **self == ACT_A::TRANSMITTER
    }
}
impl core::ops::Deref for ACT_R {
    type Target = crate::FieldReader<u8, ACT_A>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
#[doc = "Field `EP` reader - Error Passive"]
pub struct EP_R(crate::FieldReader<bool, bool>);
impl EP_R {
    #[inline(always)]
    pub(crate) fn new(bits: bool) -> Self {
        EP_R(crate::FieldReader::new(bits))
    }
}
impl core::ops::Deref for EP_R {
    type Target = crate::FieldReader<bool, bool>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
#[doc = "Field `EW` reader - Warning Status"]
pub struct EW_R(crate::FieldReader<bool, bool>);
impl EW_R {
    #[inline(always)]
    pub(crate) fn new(bits: bool) -> Self {
        EW_R(crate::FieldReader::new(bits))
    }
}
impl core::ops::Deref for EW_R {
    type Target = crate::FieldReader<bool, bool>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
#[doc = "Field `BO` reader - Bus_Off Status"]
pub struct BO_R(crate::FieldReader<bool, bool>);
impl BO_R {
    #[inline(always)]
    pub(crate) fn new(bits: bool) -> Self {
        BO_R(crate::FieldReader::new(bits))
    }
}
impl core::ops::Deref for BO_R {
    type Target = crate::FieldReader<bool, bool>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
#[doc = "Field `FLEC` reader - Fast Last Error Code (set to 111 on read)"]
pub struct FLEC_R(crate::FieldReader<u8, u8>);
impl FLEC_R {
    #[inline(always)]
    pub(crate) fn new(bits: u8) -> Self {
        FLEC_R(crate::FieldReader::new(bits))
    }
}
impl core::ops::Deref for FLEC_R {
    type Target = crate::FieldReader<u8, u8>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
#[doc = "Field `RESI` reader - ESI Flag of Last Received CAN FD Message (cleared on read)"]
pub struct RESI_R(crate::FieldReader<bool, bool>);
impl RESI_R {
    #[inline(always)]
    pub(crate) fn new(bits: bool) -> Self {
        RESI_R(crate::FieldReader::new(bits))
    }
}
impl core::ops::Deref for RESI_R {
    type Target = crate::FieldReader<bool, bool>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
#[doc = "Field `RBRS` reader - BRS Flag of Last Received CAN FD Message (cleared on read)"]
pub struct RBRS_R(crate::FieldReader<bool, bool>);
impl RBRS_R {
    #[inline(always)]
    pub(crate) fn new(bits: bool) -> Self {
        RBRS_R(crate::FieldReader::new(bits))
    }
}
impl core::ops::Deref for RBRS_R {
    type Target = crate::FieldReader<bool, bool>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
#[doc = "Field `REDL` reader - Received a CAN FD Message (cleared on read)"]
pub struct REDL_R(crate::FieldReader<bool, bool>);
impl REDL_R {
    #[inline(always)]
    pub(crate) fn new(bits: bool) -> Self {
        REDL_R(crate::FieldReader::new(bits))
    }
}
impl core::ops::Deref for REDL_R {
    type Target = crate::FieldReader<bool, bool>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl R {
    #[doc = "Bits 0:2 - Last Error Code (set to 111 on read)"]
    #[inline(always)]
    pub fn lec(&self) -> LEC_R {
        LEC_R::new((self.bits & 0x07) as u8)
    }
    #[doc = "Bits 3:4 - Activity"]
    #[inline(always)]
    pub fn act(&self) -> ACT_R {
        ACT_R::new(((self.bits >> 3) & 0x03) as u8)
    }
    #[doc = "Bit 5 - Error Passive"]
    #[inline(always)]
    pub fn ep(&self) -> EP_R {
        EP_R::new(((self.bits >> 5) & 0x01) != 0)
    }
    #[doc = "Bit 6 - Warning Status"]
    #[inline(always)]
    pub fn ew(&self) -> EW_R {
        EW_R::new(((self.bits >> 6) & 0x01) != 0)
    }
    #[doc = "Bit 7 - Bus_Off Status"]
    #[inline(always)]
    pub fn bo(&self) -> BO_R {
        BO_R::new(((self.bits >> 7) & 0x01) != 0)
    }
    #[doc = "Bits 8:10 - Fast Last Error Code (set to 111 on read)"]
    #[inline(always)]
    pub fn flec(&self) -> FLEC_R {
        FLEC_R::new(((self.bits >> 8) & 0x07) as u8)
    }
    #[doc = "Bit 11 - ESI Flag of Last Received CAN FD Message (cleared on read)"]
    #[inline(always)]
    pub fn resi(&self) -> RESI_R {
        RESI_R::new(((self.bits >> 11) & 0x01) != 0)
    }
    #[doc = "Bit 12 - BRS Flag of Last Received CAN FD Message (cleared on read)"]
    #[inline(always)]
    pub fn rbrs(&self) -> RBRS_R {
        RBRS_R::new(((self.bits >> 12) & 0x01) != 0)
    }
    #[doc = "Bit 13 - Received a CAN FD Message (cleared on read)"]
    #[inline(always)]
    pub fn redl(&self) -> REDL_R {
        REDL_R::new(((self.bits >> 13) & 0x01) != 0)
    }
}
#[doc = "Protocol 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 [mcan_psr](index.html) module"]
pub struct MCAN_PSR_SPEC;
impl crate::RegisterSpec for MCAN_PSR_SPEC {
    type Ux = u32;
}
#[doc = "`read()` method returns [mcan_psr::R](R) reader structure"]
impl crate::Readable for MCAN_PSR_SPEC {
    type Reader = R;
}
#[doc = "`reset()` method sets MCAN_PSR to value 0"]
impl crate::Resettable for MCAN_PSR_SPEC {
    #[inline(always)]
    fn reset_value() -> Self::Ux {
        0
    }
}