/******************************************************************************* * Function Name : I2C_FCLKConfig * Description : Configures frequency bits according to RCLK frequency. * the selected I2C must be disabled * Input : I2Cx ( I2C0 or I2C1 ) * Return : None. *******************************************************************************/ void I2C_FCLKConfig (I2C_TypeDef *I2Cx) { u32 FCLK=0; /* Get the FCLK frequency using the RCCU library */ FCLK = RCCU_FrequencyValue ( RCCU_FCLK ); /* Test the value of the FCLK and affect FR0,FR1&FR2 of the OAR2 register */ if (FCLK > 5000000) { if (FCLK <10000000) I2Cx->OAR2 |= 0x00; else if (FCLK <16670000) I2Cx->OAR2 |= 0x20; else if (FCLK < 26670000) I2Cx->OAR2 |= 0x40; else if (FCLK <40000000) I2Cx->OAR2 |= 0x60; else if (FCLK < 53330000) I2Cx->OAR2 |= 0x80; else if (FCLK < 66000000) I2Cx->OAR2 |= 0xA0; else if (FCLK <80000000) I2Cx->OAR2 |= 0xC0; else if (FCLK <100000000) I2Cx->OAR2 |= 0xE0; } }
/******************************************************************************* * Function Name : WDG_PeriodValueConfig * Description : Set the prescaler and counter reload value * Input : Amount of time (us) needed * Return : None *******************************************************************************/ void WDG_PeriodValueConfig ( u32 Time ) { unsigned int a; unsigned long n, b; n = Time * (RCCU_FrequencyValue(RCCU_PCLK) / 1000000); FindFactors(n, &a, &b); WDG->PR = a - 1; WDG->VR = b - 1; }
/******************************************************************************* * Function Name : ADC12_PrescalerConfig * Description : This function is used to configure the ADC sampling * frequency by setting the prescaler register. * Input : - Adc12_clk: specifies the sampling frequency in Hz. * Output : None. * Return : None. *******************************************************************************/ void ADC12_PrescalerConfig(u32 Adc12_clk) { u32 temp = 0; temp = (vu16)((RCCU_FrequencyValue(RCCU_PCLK2)*10) / (Adc12_clk * 512 * 8)); /* Configure the ADC12_CPR register with the nearest prescaler value */ if(temp - ((temp/10)*10) < 5) { ADC12->CPR = (u16)(temp/10); } else { ADC12->CPR = (u16)((temp/10)+1); } }
/******************************************************************************* * Function Name : RCCU_PLL1Config * Description : Configures the PLL1 division and multiplication factors. * Input : - New_Mul: the PLL1 multiplication factor it can be: * RCCU_PLL1_Mul_12, RCCU_PLL1_Mul_16,RCCU_PLL1_Mul_20, * RCCU_PLL1_Mul_24 * - New_Div: the PLL1 division factor it can be: * RCCU_Div_1, RCCU_Div_2, RCCU_Div_3, RCCU_Div_4,RCCU_Div_5, * RCCU_Div_6, RCCU_Div_7 * Output : None. * Return : None. *******************************************************************************/ void RCCU_PLL1Config (RCCU_PLL1_Mul New_Mul, RCCU_PLL_Div New_Div) { /* Turn off the PLL1 by setting bits DX[2:0] */ RCCU->PLL1CR = 0x0007; /* Set the PLL1 multiplication factor */ RCCU->PLL1CR = New_Mul << RCCU_MX_Index; /* Set the PLL1 division factor */ RCCU->PLL1CR |= New_Div; /* Set the PLL1 FREF_RANGE bit according to the PLL1 input frequency */ if (RCCU_FrequencyValue(RCCU_CLK2) > 3000000) { RCCU->PLL1CR |= RCCU_FREFRANGE_Mask; } /* Set the CK2_16 Bit in the CFR to allow PLL1 to be selected */ RCCU->CFR |= RCCU_CK2_16_Mask; }
/******************************************************************************* * Function Name : I2C_SpeedConfig * Description : Selects I2C clock speed and configures its corresponding mode. * Input : I2Cx ( I2C0 or I2C1 ) * Clock: I2C expected clock in Hertz. * Return : None. *******************************************************************************/ void I2C_SpeedConfig (I2C_TypeDef *I2Cx, u32 Clock) { u32 FCLK=0; u16 result=0; /* Get the FCLK frequency using the RCCU library */ FCLK = RCCU_FrequencyValue ( RCCU_FCLK ); /* Test on speed mode */ /* Update the CCR and ECCR are updated */ if (Clock <=100000) /* Standard mode selected */ { result = ((FCLK / Clock) - 7)/2; /* Clear FM/SM bit */ I2Cx->CCR=result &0x7f; } else if (Clock <=400000) { /* Fast mode selected */ result = ((FCLK/Clock)-9)/3; /* set FM/SM bit */ I2Cx->CCR=result |0x80; } I2Cx->ECCR= result >>7; }
/******************************************************************************* * Function Name : ADC12_PrescalerConfig * Description : This routine is used to configure the prescaler register * Input : Adc12_clk: Sampling frequency in Hz. * Return : None. *******************************************************************************/ void ADC12_PrescalerConfig(u32 Adc12_clk) { /* Update the Prescaler Register */ ADC12->CPR = (vu16) (RCCU_FrequencyValue(RCCU_PCLK)/(Adc12_clk*512*8)); }
/******************************************************************************* * Function Name : UART_BaudRateConfig * Description : This function configures the baud rate of the selected UART. * Input 1 : UARTx (x can be 0,1, 2 or 3) the desired UART * Input 2 : The baudrate value * Output : None * Return : None *******************************************************************************/ void UART_BaudRateConfig(UART_TypeDef *UARTx, u32 BaudRate) { UARTx->BR = (u16)(RCCU_FrequencyValue(RCCU_FCLK)/(16UL * BaudRate)); }