#[doc = "Register `TRIM_CNTR2` reader"]
pub struct R(crate::R<TRIM_CNTR2_SPEC>);
impl core::ops::Deref for R {
    type Target = crate::R<TRIM_CNTR2_SPEC>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl core::convert::From<crate::R<TRIM_CNTR2_SPEC>> for R {
    fn from(reader: crate::R<TRIM_CNTR2_SPEC>) -> Self {
        R(reader)
    }
}
#[doc = "Register `TRIM_CNTR2` writer"]
pub struct W(crate::W<TRIM_CNTR2_SPEC>);
impl core::ops::Deref for W {
    type Target = crate::W<TRIM_CNTR2_SPEC>;
    #[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 core::convert::From<crate::W<TRIM_CNTR2_SPEC>> for W {
    fn from(writer: crate::W<TRIM_CNTR2_SPEC>) -> Self {
        W(writer)
    }
}
#[doc = "Field `COUNTER` reader - Up-counter clocked on DDFT1 (ddft_pin\\[1\\]). When TRIM_CNTR1.COUNT_DONE==1 counter stopped and can be read by SW. The expected final value is related to the ratio of clock frequencies used for the two counters and the value loaded into counter 1: TST_TRIM_CNTR2.COUNTER=(F_cntr2/F_cntr1)*(TST_TRIM_CNTR1.COUNTER-1)"]
pub struct COUNTER_R(crate::FieldReader<u16, u16>);
impl COUNTER_R {
    pub(crate) fn new(bits: u16) -> Self {
        COUNTER_R(crate::FieldReader::new(bits))
    }
}
impl core::ops::Deref for COUNTER_R {
    type Target = crate::FieldReader<u16, u16>;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl R {
    #[doc = "Bits 0:15 - Up-counter clocked on DDFT1 (ddft_pin\\[1\\]). When TRIM_CNTR1.COUNT_DONE==1 counter stopped and can be read by SW. The expected final value is related to the ratio of clock frequencies used for the two counters and the value loaded into counter 1: TST_TRIM_CNTR2.COUNTER=(F_cntr2/F_cntr1)*(TST_TRIM_CNTR1.COUNTER-1)"]
    #[inline(always)]
    pub fn counter(&self) -> COUNTER_R {
        COUNTER_R::new((self.bits & 0xffff) as u16)
    }
}
impl W {
    #[doc = "Writes raw bits to the register."]
    pub unsafe fn bits(&mut self, bits: u32) -> &mut Self {
        self.0.bits(bits);
        self
    }
}
#[doc = "IMO trim up-counter (ddft)\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 [trim_cntr2](index.html) module"]
pub struct TRIM_CNTR2_SPEC;
impl crate::RegisterSpec for TRIM_CNTR2_SPEC {
    type Ux = u32;
}
#[doc = "`read()` method returns [trim_cntr2::R](R) reader structure"]
impl crate::Readable for TRIM_CNTR2_SPEC {
    type Reader = R;
}
#[doc = "`write(|w| ..)` method takes [trim_cntr2::W](W) writer structure"]
impl crate::Writable for TRIM_CNTR2_SPEC {
    type Writer = W;
}
#[doc = "`reset()` method sets TRIM_CNTR2 to value 0"]
impl crate::Resettable for TRIM_CNTR2_SPEC {
    #[inline(always)]
    fn reset_value() -> Self::Ux {
        0
    }
}
