#[doc = "Reader of register DEVCMDSTAT"]
pub type R = crate::R<u32, super::DEVCMDSTAT>;
#[doc = "Writer for register DEVCMDSTAT"]
pub type W = crate::W<u32, super::DEVCMDSTAT>;
#[doc = "Register DEVCMDSTAT `reset()`'s with value 0x0800"]
impl crate::ResetValue for super::DEVCMDSTAT {
type Type = u32;
#[inline(always)]
fn reset_value() -> Self::Type {
0x0800
}
}
#[doc = "Reader of field `DEV_ADDR`"]
pub type DEV_ADDR_R = crate::R<u8, u8>;
#[doc = "Write proxy for field `DEV_ADDR`"]
pub struct DEV_ADDR_W<'a> {
w: &'a mut W,
}
impl<'a> DEV_ADDR_W<'a> {
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub unsafe fn bits(self, value: u8) -> &'a mut W {
self.w.bits = (self.w.bits & !0x7f) | ((value as u32) & 0x7f);
self.w
}
}
#[doc = "Reader of field `DEV_EN`"]
pub type DEV_EN_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `DEV_EN`"]
pub struct DEV_EN_W<'a> {
w: &'a mut W,
}
impl<'a> DEV_EN_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 << 7)) | (((value as u32) & 0x01) << 7);
self.w
}
}
#[doc = "Reader of field `SETUP`"]
pub type SETUP_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `SETUP`"]
pub struct SETUP_W<'a> {
w: &'a mut W,
}
impl<'a> SETUP_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 = "Possible values of the field `FORCE_NEEDCLK`"]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum FORCE_NEEDCLK_A {
#[doc = "USB_NEEDCLK has normal function."]
NORMAL,
#[doc = "USB_NEEDCLK always 1. Clock will not be stopped in case of suspend."]
ALWAYS_ON,
}
impl From<FORCE_NEEDCLK_A> for bool {
#[inline(always)]
fn from(variant: FORCE_NEEDCLK_A) -> Self {
match variant {
FORCE_NEEDCLK_A::NORMAL => false,
FORCE_NEEDCLK_A::ALWAYS_ON => true,
}
}
}
#[doc = "Reader of field `FORCE_NEEDCLK`"]
pub type FORCE_NEEDCLK_R = crate::R<bool, FORCE_NEEDCLK_A>;
impl FORCE_NEEDCLK_R {
#[doc = r"Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> FORCE_NEEDCLK_A {
match self.bits {
false => FORCE_NEEDCLK_A::NORMAL,
true => FORCE_NEEDCLK_A::ALWAYS_ON,
}
}
#[doc = "Checks if the value of the field is `NORMAL`"]
#[inline(always)]
pub fn is_normal(&self) -> bool {
*self == FORCE_NEEDCLK_A::NORMAL
}
#[doc = "Checks if the value of the field is `ALWAYS_ON`"]
#[inline(always)]
pub fn is_always_on(&self) -> bool {
*self == FORCE_NEEDCLK_A::ALWAYS_ON
}
}
#[doc = "Write proxy for field `FORCE_NEEDCLK`"]
pub struct FORCE_NEEDCLK_W<'a> {
w: &'a mut W,
}
impl<'a> FORCE_NEEDCLK_W<'a> {
#[doc = r"Writes `variant` to the field"]
#[inline(always)]
pub fn variant(self, variant: FORCE_NEEDCLK_A) -> &'a mut W {
{
self.bit(variant.into())
}
}
#[doc = "USB_NEEDCLK has normal function."]
#[inline(always)]
pub fn normal(self) -> &'a mut W {
self.variant(FORCE_NEEDCLK_A::NORMAL)
}
#[doc = "USB_NEEDCLK always 1. Clock will not be stopped in case of suspend."]
#[inline(always)]
pub fn always_on(self) -> &'a mut W {
self.variant(FORCE_NEEDCLK_A::ALWAYS_ON)
}
#[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 = "Possible values of the field `LPM_SUP`"]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum LPM_SUP_A {
#[doc = "LPM not supported."]
NO,
#[doc = "LPM supported."]
YES,
}
impl From<LPM_SUP_A> for bool {
#[inline(always)]
fn from(variant: LPM_SUP_A) -> Self {
match variant {
LPM_SUP_A::NO => false,
LPM_SUP_A::YES => true,
}
}
}
#[doc = "Reader of field `LPM_SUP`"]
pub type LPM_SUP_R = crate::R<bool, LPM_SUP_A>;
impl LPM_SUP_R {
#[doc = r"Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> LPM_SUP_A {
match self.bits {
false => LPM_SUP_A::NO,
true => LPM_SUP_A::YES,
}
}
#[doc = "Checks if the value of the field is `NO`"]
#[inline(always)]
pub fn is_no(&self) -> bool {
*self == LPM_SUP_A::NO
}
#[doc = "Checks if the value of the field is `YES`"]
#[inline(always)]
pub fn is_yes(&self) -> bool {
*self == LPM_SUP_A::YES
}
}
#[doc = "Write proxy for field `LPM_SUP`"]
pub struct LPM_SUP_W<'a> {
w: &'a mut W,
}
impl<'a> LPM_SUP_W<'a> {
#[doc = r"Writes `variant` to the field"]
#[inline(always)]
pub fn variant(self, variant: LPM_SUP_A) -> &'a mut W {
{
self.bit(variant.into())
}
}
#[doc = "LPM not supported."]
#[inline(always)]
pub fn no(self) -> &'a mut W {
self.variant(LPM_SUP_A::NO)
}
#[doc = "LPM supported."]
#[inline(always)]
pub fn yes(self) -> &'a mut W {
self.variant(LPM_SUP_A::YES)
}
#[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 = "Possible values of the field `INTONNAK_AO`"]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum INTONNAK_AO_A {
#[doc = "Only acknowledged packets generate an interrupt"]
DISABLED,
#[doc = "Both acknowledged and NAKed packets generate interrupts."]
ENABLED,
}
impl From<INTONNAK_AO_A> for bool {
#[inline(always)]
fn from(variant: INTONNAK_AO_A) -> Self {
match variant {
INTONNAK_AO_A::DISABLED => false,
INTONNAK_AO_A::ENABLED => true,
}
}
}
#[doc = "Reader of field `INTONNAK_AO`"]
pub type INTONNAK_AO_R = crate::R<bool, INTONNAK_AO_A>;
impl INTONNAK_AO_R {
#[doc = r"Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> INTONNAK_AO_A {
match self.bits {
false => INTONNAK_AO_A::DISABLED,
true => INTONNAK_AO_A::ENABLED,
}
}
#[doc = "Checks if the value of the field is `DISABLED`"]
#[inline(always)]
pub fn is_disabled(&self) -> bool {
*self == INTONNAK_AO_A::DISABLED
}
#[doc = "Checks if the value of the field is `ENABLED`"]
#[inline(always)]
pub fn is_enabled(&self) -> bool {
*self == INTONNAK_AO_A::ENABLED
}
}
#[doc = "Write proxy for field `INTONNAK_AO`"]
pub struct INTONNAK_AO_W<'a> {
w: &'a mut W,
}
impl<'a> INTONNAK_AO_W<'a> {
#[doc = r"Writes `variant` to the field"]
#[inline(always)]
pub fn variant(self, variant: INTONNAK_AO_A) -> &'a mut W {
{
self.bit(variant.into())
}
}
#[doc = "Only acknowledged packets generate an interrupt"]
#[inline(always)]
pub fn disabled(self) -> &'a mut W {
self.variant(INTONNAK_AO_A::DISABLED)
}
#[doc = "Both acknowledged and NAKed packets generate interrupts."]
#[inline(always)]
pub fn enabled(self) -> &'a mut W {
self.variant(INTONNAK_AO_A::ENABLED)
}
#[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 = "Possible values of the field `INTONNAK_AI`"]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum INTONNAK_AI_A {
#[doc = "Only acknowledged packets generate an interrupt"]
DISABLED,
#[doc = "Both acknowledged and NAKed packets generate interrupts."]
ENABLED,
}
impl From<INTONNAK_AI_A> for bool {
#[inline(always)]
fn from(variant: INTONNAK_AI_A) -> Self {
match variant {
INTONNAK_AI_A::DISABLED => false,
INTONNAK_AI_A::ENABLED => true,
}
}
}
#[doc = "Reader of field `INTONNAK_AI`"]
pub type INTONNAK_AI_R = crate::R<bool, INTONNAK_AI_A>;
impl INTONNAK_AI_R {
#[doc = r"Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> INTONNAK_AI_A {
match self.bits {
false => INTONNAK_AI_A::DISABLED,
true => INTONNAK_AI_A::ENABLED,
}
}
#[doc = "Checks if the value of the field is `DISABLED`"]
#[inline(always)]
pub fn is_disabled(&self) -> bool {
*self == INTONNAK_AI_A::DISABLED
}
#[doc = "Checks if the value of the field is `ENABLED`"]
#[inline(always)]
pub fn is_enabled(&self) -> bool {
*self == INTONNAK_AI_A::ENABLED
}
}
#[doc = "Write proxy for field `INTONNAK_AI`"]
pub struct INTONNAK_AI_W<'a> {
w: &'a mut W,
}
impl<'a> INTONNAK_AI_W<'a> {
#[doc = r"Writes `variant` to the field"]
#[inline(always)]
pub fn variant(self, variant: INTONNAK_AI_A) -> &'a mut W {
{
self.bit(variant.into())
}
}
#[doc = "Only acknowledged packets generate an interrupt"]
#[inline(always)]
pub fn disabled(self) -> &'a mut W {
self.variant(INTONNAK_AI_A::DISABLED)
}
#[doc = "Both acknowledged and NAKed packets generate interrupts."]
#[inline(always)]
pub fn enabled(self) -> &'a mut W {
self.variant(INTONNAK_AI_A::ENABLED)
}
#[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 = "Possible values of the field `INTONNAK_CO`"]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum INTONNAK_CO_A {
#[doc = "Only acknowledged packets generate an interrupt"]
DISABLED,
#[doc = "Both acknowledged and NAKed packets generate interrupts."]
ENABLED,
}
impl From<INTONNAK_CO_A> for bool {
#[inline(always)]
fn from(variant: INTONNAK_CO_A) -> Self {
match variant {
INTONNAK_CO_A::DISABLED => false,
INTONNAK_CO_A::ENABLED => true,
}
}
}
#[doc = "Reader of field `INTONNAK_CO`"]
pub type INTONNAK_CO_R = crate::R<bool, INTONNAK_CO_A>;
impl INTONNAK_CO_R {
#[doc = r"Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> INTONNAK_CO_A {
match self.bits {
false => INTONNAK_CO_A::DISABLED,
true => INTONNAK_CO_A::ENABLED,
}
}
#[doc = "Checks if the value of the field is `DISABLED`"]
#[inline(always)]
pub fn is_disabled(&self) -> bool {
*self == INTONNAK_CO_A::DISABLED
}
#[doc = "Checks if the value of the field is `ENABLED`"]
#[inline(always)]
pub fn is_enabled(&self) -> bool {
*self == INTONNAK_CO_A::ENABLED
}
}
#[doc = "Write proxy for field `INTONNAK_CO`"]
pub struct INTONNAK_CO_W<'a> {
w: &'a mut W,
}
impl<'a> INTONNAK_CO_W<'a> {
#[doc = r"Writes `variant` to the field"]
#[inline(always)]
pub fn variant(self, variant: INTONNAK_CO_A) -> &'a mut W {
{
self.bit(variant.into())
}
}
#[doc = "Only acknowledged packets generate an interrupt"]
#[inline(always)]
pub fn disabled(self) -> &'a mut W {
self.variant(INTONNAK_CO_A::DISABLED)
}
#[doc = "Both acknowledged and NAKed packets generate interrupts."]
#[inline(always)]
pub fn enabled(self) -> &'a mut W {
self.variant(INTONNAK_CO_A::ENABLED)
}
#[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 << 14)) | (((value as u32) & 0x01) << 14);
self.w
}
}
#[doc = "Possible values of the field `INTONNAK_CI`"]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum INTONNAK_CI_A {
#[doc = "Only acknowledged packets generate an interrupt"]
DISABLED,
#[doc = "Both acknowledged and NAKed packets generate interrupts."]
ENABLED,
}
impl From<INTONNAK_CI_A> for bool {
#[inline(always)]
fn from(variant: INTONNAK_CI_A) -> Self {
match variant {
INTONNAK_CI_A::DISABLED => false,
INTONNAK_CI_A::ENABLED => true,
}
}
}
#[doc = "Reader of field `INTONNAK_CI`"]
pub type INTONNAK_CI_R = crate::R<bool, INTONNAK_CI_A>;
impl INTONNAK_CI_R {
#[doc = r"Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> INTONNAK_CI_A {
match self.bits {
false => INTONNAK_CI_A::DISABLED,
true => INTONNAK_CI_A::ENABLED,
}
}
#[doc = "Checks if the value of the field is `DISABLED`"]
#[inline(always)]
pub fn is_disabled(&self) -> bool {
*self == INTONNAK_CI_A::DISABLED
}
#[doc = "Checks if the value of the field is `ENABLED`"]
#[inline(always)]
pub fn is_enabled(&self) -> bool {
*self == INTONNAK_CI_A::ENABLED
}
}
#[doc = "Write proxy for field `INTONNAK_CI`"]
pub struct INTONNAK_CI_W<'a> {
w: &'a mut W,
}
impl<'a> INTONNAK_CI_W<'a> {
#[doc = r"Writes `variant` to the field"]
#[inline(always)]
pub fn variant(self, variant: INTONNAK_CI_A) -> &'a mut W {
{
self.bit(variant.into())
}
}
#[doc = "Only acknowledged packets generate an interrupt"]
#[inline(always)]
pub fn disabled(self) -> &'a mut W {
self.variant(INTONNAK_CI_A::DISABLED)
}
#[doc = "Both acknowledged and NAKed packets generate interrupts."]
#[inline(always)]
pub fn enabled(self) -> &'a mut W {
self.variant(INTONNAK_CI_A::ENABLED)
}
#[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 = "Reader of field `DCON`"]
pub type DCON_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `DCON`"]
pub struct DCON_W<'a> {
w: &'a mut W,
}
impl<'a> DCON_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 << 16)) | (((value as u32) & 0x01) << 16);
self.w
}
}
#[doc = "Reader of field `DSUS`"]
pub type DSUS_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `DSUS`"]
pub struct DSUS_W<'a> {
w: &'a mut W,
}
impl<'a> DSUS_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 << 17)) | (((value as u32) & 0x01) << 17);
self.w
}
}
#[doc = "Reader of field `LPM_SUS`"]
pub type LPM_SUS_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `LPM_SUS`"]
pub struct LPM_SUS_W<'a> {
w: &'a mut W,
}
impl<'a> LPM_SUS_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 << 19)) | (((value as u32) & 0x01) << 19);
self.w
}
}
#[doc = "Reader of field `LPM_REWP`"]
pub type LPM_REWP_R = crate::R<bool, bool>;
#[doc = "Reader of field `DCON_C`"]
pub type DCON_C_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `DCON_C`"]
pub struct DCON_C_W<'a> {
w: &'a mut W,
}
impl<'a> DCON_C_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 << 24)) | (((value as u32) & 0x01) << 24);
self.w
}
}
#[doc = "Reader of field `DSUS_C`"]
pub type DSUS_C_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `DSUS_C`"]
pub struct DSUS_C_W<'a> {
w: &'a mut W,
}
impl<'a> DSUS_C_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 << 25)) | (((value as u32) & 0x01) << 25);
self.w
}
}
#[doc = "Reader of field `DRES_C`"]
pub type DRES_C_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `DRES_C`"]
pub struct DRES_C_W<'a> {
w: &'a mut W,
}
impl<'a> DRES_C_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 << 26)) | (((value as u32) & 0x01) << 26);
self.w
}
}
#[doc = "Reader of field `VBUSDEBOUNCED`"]
pub type VBUSDEBOUNCED_R = crate::R<bool, bool>;
impl R {
#[doc = "Bits 0:6 - USB device address. After bus reset, the address is reset to 0x00. If the enable bit is set, the device will respond on packets for function address DEV_ADDR. When receiving a SetAddress Control Request from the USB host, software must program the new address before completing the status phase of the SetAddress Control Request."]
#[inline(always)]
pub fn dev_addr(&self) -> DEV_ADDR_R {
DEV_ADDR_R::new((self.bits & 0x7f) as u8)
}
#[doc = "Bit 7 - USB device enable. If this bit is set, the HW will start responding on packets for function address DEV_ADDR."]
#[inline(always)]
pub fn dev_en(&self) -> DEV_EN_R {
DEV_EN_R::new(((self.bits >> 7) & 0x01) != 0)
}
#[doc = "Bit 8 - SETUP token received. If a SETUP token is received and acknowledged by the device, this bit is set. As long as this bit is set all received IN and OUT tokens will be NAKed by HW. SW must clear this bit by writing a one. If this bit is zero, HW will handle the tokens to the CTRL EP0 as indicated by the CTRL EP0 IN and OUT data information programmed by SW."]
#[inline(always)]
pub fn setup(&self) -> SETUP_R {
SETUP_R::new(((self.bits >> 8) & 0x01) != 0)
}
#[doc = "Bit 9 - Forces the NEEDCLK output to always be on:"]
#[inline(always)]
pub fn force_needclk(&self) -> FORCE_NEEDCLK_R {
FORCE_NEEDCLK_R::new(((self.bits >> 9) & 0x01) != 0)
}
#[doc = "Bit 11 - LPM Supported:"]
#[inline(always)]
pub fn lpm_sup(&self) -> LPM_SUP_R {
LPM_SUP_R::new(((self.bits >> 11) & 0x01) != 0)
}
#[doc = "Bit 12 - Interrupt on NAK for interrupt and bulk OUT EP"]
#[inline(always)]
pub fn intonnak_ao(&self) -> INTONNAK_AO_R {
INTONNAK_AO_R::new(((self.bits >> 12) & 0x01) != 0)
}
#[doc = "Bit 13 - Interrupt on NAK for interrupt and bulk IN EP"]
#[inline(always)]
pub fn intonnak_ai(&self) -> INTONNAK_AI_R {
INTONNAK_AI_R::new(((self.bits >> 13) & 0x01) != 0)
}
#[doc = "Bit 14 - Interrupt on NAK for control OUT EP"]
#[inline(always)]
pub fn intonnak_co(&self) -> INTONNAK_CO_R {
INTONNAK_CO_R::new(((self.bits >> 14) & 0x01) != 0)
}
#[doc = "Bit 15 - Interrupt on NAK for control IN EP"]
#[inline(always)]
pub fn intonnak_ci(&self) -> INTONNAK_CI_R {
INTONNAK_CI_R::new(((self.bits >> 15) & 0x01) != 0)
}
#[doc = "Bit 16 - Device status - connect. The connect bit must be set by SW to indicate that the device must signal a connect. The pull-up resistor on USB_DP will be enabled when this bit is set and the VBUSDEBOUNCED bit is one."]
#[inline(always)]
pub fn dcon(&self) -> DCON_R {
DCON_R::new(((self.bits >> 16) & 0x01) != 0)
}
#[doc = "Bit 17 - Device status - suspend. The suspend bit indicates the current suspend state. It is set to 1 when the device hasn't seen any activity on its upstream port for more than 3 milliseconds. It is reset to 0 on any activity. When the device is suspended (Suspend bit DSUS = 1) and the software writes a 0 to it, the device will generate a remote wake-up. This will only happen when the device is connected (Connect bit = 1). When the device is not connected or not suspended, a writing a 0 has no effect. Writing a 1 never has an effect."]
#[inline(always)]
pub fn dsus(&self) -> DSUS_R {
DSUS_R::new(((self.bits >> 17) & 0x01) != 0)
}
#[doc = "Bit 19 - Device status - LPM Suspend. This bit represents the current LPM suspend state. It is set to 1 by HW when the device has acknowledged the LPM request from the USB host and the Token Retry Time of 10 ms has elapsed. When the device is in the LPM suspended state (LPM suspend bit = 1) and the software writes a zero to this bit, the device will generate a remote walk-up. Software can only write a zero to this bit when the LPM_REWP bit is set to 1. HW resets this bit when it receives a host initiated resume. HW only updates the LPM_SUS bit when the LPM_SUPP bit is equal to one."]
#[inline(always)]
pub fn lpm_sus(&self) -> LPM_SUS_R {
LPM_SUS_R::new(((self.bits >> 19) & 0x01) != 0)
}
#[doc = "Bit 20 - LPM Remote Wake-up Enabled by USB host. HW sets this bit to one when the bRemoteWake bit in the LPM extended token is set to 1. HW will reset this bit to 0 when it receives the host initiated LPM resume, when a remote wake-up is sent by the device or when a USB bus reset is received. Software can use this bit to check if the remote wake-up feature is enabled by the host for the LPM transaction."]
#[inline(always)]
pub fn lpm_rewp(&self) -> LPM_REWP_R {
LPM_REWP_R::new(((self.bits >> 20) & 0x01) != 0)
}
#[doc = "Bit 24 - Device status - connect change. The Connect Change bit is set when the device's pull-up resistor is disconnected because VBus disappeared. The bit is reset by writing a one to it."]
#[inline(always)]
pub fn dcon_c(&self) -> DCON_C_R {
DCON_C_R::new(((self.bits >> 24) & 0x01) != 0)
}
#[doc = "Bit 25 - Device status - suspend change. The suspend change bit is set to 1 when the suspend bit toggles. The suspend bit can toggle because: - The device goes in the suspended state - The device is disconnected - The device receives resume signaling on its upstream port. The bit is reset by writing a one to it."]
#[inline(always)]
pub fn dsus_c(&self) -> DSUS_C_R {
DSUS_C_R::new(((self.bits >> 25) & 0x01) != 0)
}
#[doc = "Bit 26 - Device status - reset change. This bit is set when the device received a bus reset. On a bus reset the device will automatically go to the default state (unconfigured and responding to address 0). The bit is reset by writing a one to it."]
#[inline(always)]
pub fn dres_c(&self) -> DRES_C_R {
DRES_C_R::new(((self.bits >> 26) & 0x01) != 0)
}
#[doc = "Bit 28 - This bit indicates if Vbus is detected or not. The bit raises immediately when Vbus becomes high. It drops to zero if Vbus is low for at least 3 ms. If this bit is high and the DCon bit is set, the HW will enable the pull-up resistor to signal a connect."]
#[inline(always)]
pub fn vbusdebounced(&self) -> VBUSDEBOUNCED_R {
VBUSDEBOUNCED_R::new(((self.bits >> 28) & 0x01) != 0)
}
}
impl W {
#[doc = "Bits 0:6 - USB device address. After bus reset, the address is reset to 0x00. If the enable bit is set, the device will respond on packets for function address DEV_ADDR. When receiving a SetAddress Control Request from the USB host, software must program the new address before completing the status phase of the SetAddress Control Request."]
#[inline(always)]
pub fn dev_addr(&mut self) -> DEV_ADDR_W {
DEV_ADDR_W { w: self }
}
#[doc = "Bit 7 - USB device enable. If this bit is set, the HW will start responding on packets for function address DEV_ADDR."]
#[inline(always)]
pub fn dev_en(&mut self) -> DEV_EN_W {
DEV_EN_W { w: self }
}
#[doc = "Bit 8 - SETUP token received. If a SETUP token is received and acknowledged by the device, this bit is set. As long as this bit is set all received IN and OUT tokens will be NAKed by HW. SW must clear this bit by writing a one. If this bit is zero, HW will handle the tokens to the CTRL EP0 as indicated by the CTRL EP0 IN and OUT data information programmed by SW."]
#[inline(always)]
pub fn setup(&mut self) -> SETUP_W {
SETUP_W { w: self }
}
#[doc = "Bit 9 - Forces the NEEDCLK output to always be on:"]
#[inline(always)]
pub fn force_needclk(&mut self) -> FORCE_NEEDCLK_W {
FORCE_NEEDCLK_W { w: self }
}
#[doc = "Bit 11 - LPM Supported:"]
#[inline(always)]
pub fn lpm_sup(&mut self) -> LPM_SUP_W {
LPM_SUP_W { w: self }
}
#[doc = "Bit 12 - Interrupt on NAK for interrupt and bulk OUT EP"]
#[inline(always)]
pub fn intonnak_ao(&mut self) -> INTONNAK_AO_W {
INTONNAK_AO_W { w: self }
}
#[doc = "Bit 13 - Interrupt on NAK for interrupt and bulk IN EP"]
#[inline(always)]
pub fn intonnak_ai(&mut self) -> INTONNAK_AI_W {
INTONNAK_AI_W { w: self }
}
#[doc = "Bit 14 - Interrupt on NAK for control OUT EP"]
#[inline(always)]
pub fn intonnak_co(&mut self) -> INTONNAK_CO_W {
INTONNAK_CO_W { w: self }
}
#[doc = "Bit 15 - Interrupt on NAK for control IN EP"]
#[inline(always)]
pub fn intonnak_ci(&mut self) -> INTONNAK_CI_W {
INTONNAK_CI_W { w: self }
}
#[doc = "Bit 16 - Device status - connect. The connect bit must be set by SW to indicate that the device must signal a connect. The pull-up resistor on USB_DP will be enabled when this bit is set and the VBUSDEBOUNCED bit is one."]
#[inline(always)]
pub fn dcon(&mut self) -> DCON_W {
DCON_W { w: self }
}
#[doc = "Bit 17 - Device status - suspend. The suspend bit indicates the current suspend state. It is set to 1 when the device hasn't seen any activity on its upstream port for more than 3 milliseconds. It is reset to 0 on any activity. When the device is suspended (Suspend bit DSUS = 1) and the software writes a 0 to it, the device will generate a remote wake-up. This will only happen when the device is connected (Connect bit = 1). When the device is not connected or not suspended, a writing a 0 has no effect. Writing a 1 never has an effect."]
#[inline(always)]
pub fn dsus(&mut self) -> DSUS_W {
DSUS_W { w: self }
}
#[doc = "Bit 19 - Device status - LPM Suspend. This bit represents the current LPM suspend state. It is set to 1 by HW when the device has acknowledged the LPM request from the USB host and the Token Retry Time of 10 ms has elapsed. When the device is in the LPM suspended state (LPM suspend bit = 1) and the software writes a zero to this bit, the device will generate a remote walk-up. Software can only write a zero to this bit when the LPM_REWP bit is set to 1. HW resets this bit when it receives a host initiated resume. HW only updates the LPM_SUS bit when the LPM_SUPP bit is equal to one."]
#[inline(always)]
pub fn lpm_sus(&mut self) -> LPM_SUS_W {
LPM_SUS_W { w: self }
}
#[doc = "Bit 24 - Device status - connect change. The Connect Change bit is set when the device's pull-up resistor is disconnected because VBus disappeared. The bit is reset by writing a one to it."]
#[inline(always)]
pub fn dcon_c(&mut self) -> DCON_C_W {
DCON_C_W { w: self }
}
#[doc = "Bit 25 - Device status - suspend change. The suspend change bit is set to 1 when the suspend bit toggles. The suspend bit can toggle because: - The device goes in the suspended state - The device is disconnected - The device receives resume signaling on its upstream port. The bit is reset by writing a one to it."]
#[inline(always)]
pub fn dsus_c(&mut self) -> DSUS_C_W {
DSUS_C_W { w: self }
}
#[doc = "Bit 26 - Device status - reset change. This bit is set when the device received a bus reset. On a bus reset the device will automatically go to the default state (unconfigured and responding to address 0). The bit is reset by writing a one to it."]
#[inline(always)]
pub fn dres_c(&mut self) -> DRES_C_W {
DRES_C_W { w: self }
}
}