54 #define RCC_PLL_CTRL_Reset_Value ((uint32_t)0x00000000)
55 #define RCC_PLL_OD_Reset_Value ((uint32_t)0x00000000)
56 #define RCC_PLL_NR_Reset_Value ((uint32_t)0x00000000)
57 #define RCC_PLL_NF_Reset_Value ((uint32_t)0x00000000)
77 uint32_t RCC_WaitClkChange(RCC_SysClk_TypeDef RCC_SysClk)
147 uint32_t pll_div = 0;
148 uint32_t f_ref = 1000000;
164 if (NT_COMMON_REG->USB_CTRL_bit.FSEL)
166 f_in = (uint32_t)(24000000);
170 f_in = (uint32_t)(12000000);
175 f_in = (uint32_t)(60000000);
179 f_in = (uint32_t)(25000000);
182 if (SysFreq >= 100000000)
186 else if ((SysFreq >= 50000000))
193 pll_div = (50000000/SysFreq + 1)/2 - 1;
194 pll_div_cmd = ENABLE;
198 if (pll_div_cmd == DISABLE)
200 nf = ((SysFreq/1000000) * ((uint32_t)no + 1) * nr )/(f_in/1000000);
204 nf = ((SysFreq/1000000) * ((uint32_t)no + 1) * nr * 2*(pll_div+1) )/(f_in/1000000);
216 while(pll_stable_wait)
221 if (pll_div_cmd == DISABLE)
270 NT_COMMON_REG->PLL_CTRL_bit.REFSEL = ((uint32_t)(RCC_PLLInit_Struct->
RCC_PLLRef));
271 NT_COMMON_REG->PLL_CTRL_bit.PLL_DIV = RCC_PLLInit_Struct->
RCC_PLLDiv;
272 NT_COMMON_REG->PLL_OD = ((uint32_t)(RCC_PLLInit_Struct->
RCC_PLLNO));
273 NT_COMMON_REG->PLL_NF = RCC_PLLInit_Struct->
RCC_PLLNF - 2;
274 NT_COMMON_REG->PLL_NR = RCC_PLLInit_Struct->
RCC_PLLNR - 2;
318 if (State == DISABLE)
320 NT_COMMON_REG->PLL_CTRL_bit.PD = 0;
322 else if (State == ENABLE)
324 NT_COMMON_REG->PLL_CTRL_bit.PD = 1;
350 NT_COMMON_REG->APB_CLK |= RCC_PeriphClk;
352 else if (State == DISABLE)
354 NT_COMMON_REG->APB_CLK &= ~RCC_PeriphClk;
373 NT_COMMON_REG->SYS_CLK = ((uint32_t)RCC_SysClk);
396 return((
RCC_SysClk_TypeDef)((NT_COMMON_REG->SYS_CLK)>>COMMON_REG_SYS_CLK_CURR_SRC_Pos));
414 NT_COMMON_REG->USB_CTRL &= ~((1<<COMMON_REG_USB_CTRL_FSEL_Pos) | (1<<COMMON_REG_USB_CTRL_CLKSEL_Pos));
415 NT_COMMON_REG->USB_CTRL |= (RCC_USBFreq<<COMMON_REG_USB_CTRL_FSEL_Pos) | (RCC_USBClk<<COMMON_REG_USB_CTRL_CLKSEL_Pos);
432 NT_COMMON_REG->USB_CTRL_bit.CLKEN = 1;
434 else if (State == DISABLE)
436 NT_COMMON_REG->USB_CTRL_bit.CLKEN = 0;
456 if (UARTx == NT_UART0)
458 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_UART0_Pos;
460 else if (UARTx == NT_UART1)
462 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_UART1_Pos;
464 else if (UARTx == NT_UART2)
466 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_UART2_Pos;
470 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_UART3_Pos;
473 NT_COMMON_REG->UART_SPI_CLK_SEL &= ~(3<<offset);
474 NT_COMMON_REG->UART_SPI_CLK_SEL |= (RCC_UARTClk<<offset);
497 if (UARTx == NT_UART0)
499 offset = COMMON_REG_UART_CLK_DIVEN_UART0_Pos;
501 else if (UARTx == NT_UART1)
503 offset = COMMON_REG_UART_CLK_DIVEN_UART1_Pos;
505 else if (UARTx == NT_UART2)
507 offset = COMMON_REG_UART_CLK_DIVEN_UART2_Pos;
511 offset = COMMON_REG_UART_CLK_DIVEN_UART3_Pos;
514 NT_COMMON_REG->UART_CLK &= ~(0x7F << offset);
515 NT_COMMON_REG->UART_CLK |= (DivVal << (offset+1)) | (DivState << offset);
534 if (UARTx == NT_UART0)
536 offset = COMMON_REG_UART_CLK_CLKEN_UART0_Pos;
538 else if (UARTx == NT_UART1)
540 offset = COMMON_REG_UART_CLK_CLKEN_UART1_Pos;
542 else if (UARTx == NT_UART2)
544 offset = COMMON_REG_UART_CLK_CLKEN_UART2_Pos;
548 offset = COMMON_REG_UART_CLK_CLKEN_UART3_Pos;
553 NT_COMMON_REG->UART_CLK |= (1 << offset);
555 else if (State == DISABLE)
557 NT_COMMON_REG->UART_CLK &= ~(1 << offset);
579 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_SPI0_Pos;
581 else if (SPIx == NT_SPI1)
583 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_SPI1_Pos;
585 else if (SPIx == NT_SPI2)
587 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_SPI2_Pos;
591 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_SPI3_Pos;
594 NT_COMMON_REG->UART_SPI_CLK_SEL &= ~(3<<offset);
595 NT_COMMON_REG->UART_SPI_CLK_SEL |= (RCC_SPIClk<<offset);
621 offset = COMMON_REG_SPI_CLK_DIVEN_SPI0_Pos;
623 else if (SPIx == NT_SPI1)
625 offset = COMMON_REG_SPI_CLK_DIVEN_SPI1_Pos;
627 else if (SPIx == NT_SPI2)
629 offset = COMMON_REG_SPI_CLK_DIVEN_SPI2_Pos;
633 offset = COMMON_REG_SPI_CLK_DIVEN_SPI3_Pos;
636 NT_COMMON_REG->SPI_CLK &= ~(0x7F << offset);
637 NT_COMMON_REG->SPI_CLK |= (DivVal << (offset+1)) | (DivState << offset);
658 offset = COMMON_REG_SPI_CLK_CLKEN_SPI0_Pos;
660 else if (SPIx == NT_SPI1)
662 offset = COMMON_REG_SPI_CLK_CLKEN_SPI1_Pos;
664 else if (SPIx == NT_SPI2)
666 offset = COMMON_REG_SPI_CLK_CLKEN_SPI2_Pos;
670 offset = COMMON_REG_SPI_CLK_CLKEN_SPI3_Pos;
675 NT_COMMON_REG->SPI_CLK |= (1 << offset);
677 else if (State == DISABLE)
679 NT_COMMON_REG->SPI_CLK &= ~(1 << offset);
698 volatile uint32_t* ctrl_reg;
707 offset = COMMON_REG_ADC_CTRL0_DIVEN_ADC0_Pos;
708 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
712 offset = COMMON_REG_ADC_CTRL0_DIVEN_ADC1_Pos;
713 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
717 offset = COMMON_REG_ADC_CTRL0_DIVEN_ADC2_Pos;
718 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
722 offset = COMMON_REG_ADC_CTRL0_DIVEN_ADC3_Pos;
723 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
727 offset = COMMON_REG_ADC_CTRL1_DIVEN_ADC4_Pos;
728 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
732 offset = COMMON_REG_ADC_CTRL1_DIVEN_ADC5_Pos;
733 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
737 offset = COMMON_REG_ADC_CTRL1_DIVEN_ADC6_Pos;
738 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
742 offset = COMMON_REG_ADC_CTRL1_DIVEN_ADC7_Pos;
743 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
747 offset = COMMON_REG_ADC_CTRL2_DIVEN_ADC8_Pos;
748 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
752 offset = COMMON_REG_ADC_CTRL2_DIVEN_ADC9_Pos;
753 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
757 offset = COMMON_REG_ADC_CTRL2_DIVEN_ADC10_Pos;
758 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
762 offset = COMMON_REG_ADC_CTRL2_DIVEN_ADC11_Pos;
763 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
766 *ctrl_reg &= ~(0x7F << offset);
767 *ctrl_reg |= (DivVal << (offset+1)) | (DivState << offset);
782 volatile uint32_t* ctrl_reg;
790 offset = COMMON_REG_ADC_CTRL0_CLKEN_ADC0_Pos;
791 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
795 offset = COMMON_REG_ADC_CTRL0_CLKEN_ADC1_Pos;
796 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
800 offset = COMMON_REG_ADC_CTRL0_CLKEN_ADC2_Pos;
801 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
805 offset = COMMON_REG_ADC_CTRL0_CLKEN_ADC3_Pos;
806 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
810 offset = COMMON_REG_ADC_CTRL1_CLKEN_ADC4_Pos;
811 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
815 offset = COMMON_REG_ADC_CTRL1_CLKEN_ADC5_Pos;
816 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
820 offset = COMMON_REG_ADC_CTRL1_CLKEN_ADC6_Pos;
821 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
825 offset = COMMON_REG_ADC_CTRL1_CLKEN_ADC7_Pos;
826 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
830 offset = COMMON_REG_ADC_CTRL2_CLKEN_ADC8_Pos;
831 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
835 offset = COMMON_REG_ADC_CTRL2_CLKEN_ADC9_Pos;
836 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
840 offset = COMMON_REG_ADC_CTRL2_CLKEN_ADC10_Pos;
841 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
845 offset = COMMON_REG_ADC_CTRL2_CLKEN_ADC11_Pos;
846 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
851 *ctrl_reg |= (1 << offset);
853 else if (State == DISABLE)
855 *ctrl_reg &= ~(1 << offset);
871 volatile uint32_t* ctrl_reg;
880 ctrl_reg = &(NT_COMMON_REG->PER_RST0);
884 ctrl_reg = &(NT_COMMON_REG->PER_RST1);
890 *ctrl_reg |= (1<<(RCC_PeriphRst-offset));
892 else if (State == DISABLE)
894 *ctrl_reg &= ~(1<<(RCC_PeriphRst-offset));
RCC_UARTClk_TypeDef
Выбор источника тактирования для UART.
void RCC_PLLPowerDownCmd(FunctionalState State)
Управление режимом PowerDown PLL.
OperationStatus RCC_SysClkSel(RCC_SysClk_TypeDef RCC_SysClk)
Выбор источника для системного тактового сигнала.
void RCC_SPIClkCmd(NT_SPI_TypeDef *SPIx, FunctionalState State)
Включение тактирования SPI.
RCC_PLLRef_TypeDef
Выбор источника опорного сигнала PLL.
void RCC_ADCClkDivConfig(RCC_ADCClk_TypeDef RCC_ADCClk, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного ADC.
#define IS_RCC_PLL_REF(PLL_REF)
Макрос проверки аргументов типа RCC_PLLRef_TypeDef.
#define IS_RCC_PLL_NR(PLL_NR)
Макрос проверки значения опорного делителя PLL на попадание в допустимый диапазон.
RCC_ADCClk_TypeDef
Выбор модуля ADC для настройки его тактового сигнала.
#define IS_RCC_SYS_FREQ(SYS_FREQ)
Макрос проверки значения желаемой частоты при автонастройке в допустимый диапазон.
Файл содержит все прототипы функций для RCC (Reset & Clock Control).
#define IS_RCC_PLL_NO(PLL_NO)
Макрос проверки аргументов типа RCC_PLLNO_TypeDef.
#define RCC_PLL_OD_Reset_Value
#define IS_RCC_PLL_NF(PLL_NF)
Макрос проверки значения делителя ОС PLL на попадание в допустимый диапазон.
FunctionalState
Описывает логическое состояние периферии. Используется для операций включения/выключения периферийных...
GPIO_AltFunc_TypeDef GPIO_AltFunc
#define IS_SPI_ALL_PERIPH(PERIPH)
Макрос проверки аргументов типа NT_SPI_TypeDef.
#define IS_RCC_PLLDIV(PLLDIV)
Макрос проверки значения выходного делителя PLL на попадание в допустимый диапазон.
void GPIO_Init(NT_GPIO_TypeDef *GPIOx, GPIO_Init_TypeDef *GPIO_InitStruct)
Инициализирует модуль GPIOx согласно параметрам структуры GPIO_InitStruct.
void RCC_UARTClkSel(NT_UART_TypeDef *UARTx, RCC_UARTClk_TypeDef RCC_UARTClk)
Настройка источника тактового сигнала для выбранного UART.
#define RCC_CLK_PLL_STABLE_TIMEOUT
void GPIO_StructInit(GPIO_Init_TypeDef *GPIO_InitStruct)
Заполнение каждого члена структуры GPIO_InitStruct значениями по умолчанию.
#define IS_RCC_ADC_CLK(ADC_CLK)
Макрос проверки аргументов типа RCC_ADCClk_TypeDef.
void RCC_PeriphClkCmd(RCC_PeriphClk_TypeDef RCC_PeriphClk, FunctionalState State)
Включение тактирования выбранного блока периферии.
#define IS_RCC_USB_CLK(USB_CLK)
Макрос проверки аргументов типа RCC_USBClk_TypeDef.
#define IS_UART_ALL_PERIPH(PERIPH)
Макрос проверки аргументов типа NT_UART_TypeDef.
Структура инициализации PLL.
#define IS_RCC_SPI_CLK(SPI_CLK)
Макрос проверки аргументов типа RCC_SPIClk_TypeDef.
void RCC_ADCClkCmd(RCC_ADCClk_TypeDef RCC_ADCClk, FunctionalState State)
Включение тактирования ADC.
#define RCC_PLL_NF_Reset_Value
#define IS_RCC_USB_FREQ(USB_FREQ)
Макрос проверки аргументов типа RCC_USBFreq_TypeDef.
RCC_USBClk_TypeDef
Выбор источника тактирования для USB.
void RCC_SPIClkSel(NT_SPI_TypeDef *SPIx, RCC_SPIClk_TypeDef RCC_SPIClk)
Настройка источника тактового сигнала для выбранного SPI.
RCC_PLLNO_TypeDef
Выходной делитель NO.
void RCC_PLLDeInit()
Устанавливает все регистры PLL значениями по умолчанию.
#define IS_RCC_SYS_CLK(SYS_CLK)
Макрос проверки аргументов типа RCC_SysClk_TypeDef.
RCC_SPIClk_TypeDef
Выбор источника тактирования для SPI.
void RCC_UARTClkCmd(NT_UART_TypeDef *UARTx, FunctionalState State)
Включение тактирования UART.
void RCC_SysClkDiv2Out(FunctionalState State)
Включение генерации тактового сигнала с частой равной половине системной на выводе H[0]...
uint32_t RCC_WaitClkChange(RCC_SysClk_TypeDef RCC_SysClk)
Процедура ожидания смены источника тактового сигнала
#define IS_RCC_PERIPH_CLK(PERIPH_CLK)
Макрос проверки аргументов типа RCC_PeriphClk_TypeDef.
void RCC_SPIClkDivConfig(NT_SPI_TypeDef *SPIx, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного SPI.
GPIO_Out_TypeDef GPIO_Out
#define IS_RCC_PERIPH_RST(PERIPH_RST)
Макрос проверки аргументов типа RCC_PeriphRst_TypeDef.
Структура инициализации GPIO.
void RCC_UARTClkDivConfig(NT_UART_TypeDef *UARTx, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного UART.
RCC_PLLNO_TypeDef RCC_PLLNO
#define IS_RCC_CLK_DIV(CLK_DIV)
Макрос проверки значения делителя тактового сигнала на попадание в допустимый диапазон.
OperationStatus
Описывает коды возврата для функций при выполнении какой-либо операции.
RCC_USBFreq_TypeDef
Выбор фиксированной частоты на входе CLK_USB.
#define IS_RCC_UART_CLK(UART_CLK)
Макрос проверки аргументов типа RCC_UARTClk_TypeDef.
GPIO_Mode_TypeDef GPIO_Mode
RCC_PLLRef_TypeDef RCC_PLLRef
RCC_SysClk_TypeDef RCC_SysClkStatus()
Текущий источник системного тактового сигнала.
#define IS_FUNCTIONAL_STATE(STATE)
Макрос проверки аргументов типа FunctionalState.
RCC_PeriphRst_TypeDef
Управление сбросом периферийных блоков
void RCC_USBClkConfig(RCC_USBClk_TypeDef RCC_USBClk, RCC_USBFreq_TypeDef RCC_USBFreq)
Настройка источника тактового сигнала для USB.
GPIO_Dir_TypeDef GPIO_Dir
OperationStatus RCC_PLLAutoConfig(RCC_PLLRef_TypeDef RCC_PLLRef, uint32_t SysFreq)
Автоматическая конфигурация PLL для получения желаемой системной частоты.
void RCC_PLLInit(RCC_PLLInit_TypeDef *RCC_PLLInit_Struct)
Инициализирует PLL согласно параметрам структуры RCC_PLLInit_Struct.
#define RCC_CLK_CHANGE_TIMEOUT
RCC_PeriphClk_TypeDef
Управление тактированием периферийных блоков
#define EXT_OSC_VALUE
Определение частоты используемого внешнего тактового генератора.
void RCC_PLLStructInit(RCC_PLLInit_TypeDef *RCC_PLLInit_Struct)
Заполнение каждого члена структуры RCC_PLLInit_Struct значениями по умолчанию.
RCC_SysClk_TypeDef
Выбор источника системной частоты.
#define RCC_PLL_NR_Reset_Value
#define RCC_PLL_CTRL_Reset_Value
void RCC_PeriphRstCmd(RCC_PeriphRst_TypeDef RCC_PeriphRst, FunctionalState State)
Вывод из состояния сброса периферийных блоков.
void RCC_USBClkCmd(FunctionalState State)
Включение тактирования USB.