diff --git a/arch/arm/src/sama5/chip/sam_pmc.h b/arch/arm/src/sama5/chip/sam_pmc.h index feb796d7f65..449abc489ff 100644 --- a/arch/arm/src/sama5/chip/sam_pmc.h +++ b/arch/arm/src/sama5/chip/sam_pmc.h @@ -420,6 +420,7 @@ #define PMC_PCR_CMD (1 << 12) /* Bit 12: Command */ #ifdef ATSAMA5D3 +# define SAMA5_HAVE_PMC_PCR 1 /* Supports conditional compilation */ # define PMC_PCR_DIV_SHIFT (16) /* Bits 16-17: Divisor Value */ # define PMC_PCR_DIV_MASK (3 << PMC_PCR_DIV_SHIFT) # define PMC_PCR_DIV1 (0 << PMC_PCR_DIV_SHIFT) /* Peripheral clock is MCK */ diff --git a/arch/arm/src/sama5/sam_twi.c b/arch/arm/src/sama5/sam_twi.c index a2899729a70..9d3e2f72c90 100644 --- a/arch/arm/src/sama5/sam_twi.c +++ b/arch/arm/src/sama5/sam_twi.c @@ -1167,8 +1167,9 @@ static void twi_hw_initialize(struct twi_dev_s *priv, unsigned int pid, /* Determine the maximum valid frequency setting */ mck = BOARD_MCK_FREQUENCY; - DEBUGASSERT((mck >> 3) <= TWI_MAX_FREQUENCY); +#ifdef SAMA5_HAVE_PMC_PCR_DIV + DEBUGASSERT((mck >> 3) <= TWI_MAX_FREQUENCY); if (mck <= TWI_MAX_FREQUENCY) { priv->frequency = mck; @@ -1190,6 +1191,14 @@ static void twi_hw_initialize(struct twi_dev_s *priv, unsigned int pid, regval = PMC_PCR_DIV8; } +#else + /* No DIV field in the PCR register */ + + priv->frequency = mck; + regval = 0; + +#endif /* SAMA5_HAVE_PMC_PCR_DIV */ + /* Set the TWI peripheral input clock to the maximum, valid frequency */ regval |= PMC_PCR_PID(pid) | PMC_PCR_CMD | PMC_PCR_EN;