board.c 4.2 KB
Newer Older
1 2 3 4 5 6 7
/*
 * Copyright (c) 2006-2018, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
1
1 已提交
8
 * 2021-08-27     Jiao         first version
9
 */
1
1 已提交
10

11 12 13 14
#include "board.h"

FL_ErrorStatus FL_UART_GPIO_Init(UART_Type *UARTx)
{
1
1 已提交
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
    FL_ErrorStatus status = FL_FAIL;
    FL_GPIO_InitTypeDef    GPIO_InitStruct;
    if (UARTx ==  UART0)
    {
        GPIO_InitStruct.pin = FL_GPIO_PIN_13;
        GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
        GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
        GPIO_InitStruct.pull = FL_DISABLE;
        GPIO_InitStruct.remapPin = FL_DISABLE;

        status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);

        GPIO_InitStruct.pin = FL_GPIO_PIN_14;
        GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
        GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
        GPIO_InitStruct.pull = FL_DISABLE;
        GPIO_InitStruct.remapPin = FL_DISABLE;

        status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
    else if (UARTx ==  UART1)
    {
        GPIO_InitStruct.pin = FL_GPIO_PIN_13;
        GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
        GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
        GPIO_InitStruct.pull = FL_DISABLE;
        GPIO_InitStruct.remapPin = FL_DISABLE;

        status = FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

        GPIO_InitStruct.pin = FL_GPIO_PIN_14;
        GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
        GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
        GPIO_InitStruct.pull = FL_DISABLE;
        GPIO_InitStruct.remapPin = FL_DISABLE;

        status = FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    }
    else if (UARTx ==  UART4)
    {
        GPIO_InitStruct.pin = FL_GPIO_PIN_0;
        GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
        GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
        GPIO_InitStruct.pull = FL_DISABLE;
        GPIO_InitStruct.remapPin = FL_DISABLE;

        status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);

        GPIO_InitStruct.pin = FL_GPIO_PIN_1;
        GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
        GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
        GPIO_InitStruct.pull = FL_DISABLE;
        GPIO_InitStruct.remapPin = FL_DISABLE;

        status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
    return status;
72 73 74 75 76 77 78 79 80 81 82 83
}



static void RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLL_R, uint32_t PLL_DB, uint32_t PLL_O)
{
    MODIFY_REG(RCC->PLLCR, RCC_PLLCR_DB_Msk | RCC_PLLCR_REFPRSC_Msk | RCC_PLLCR_OSEL_Msk | RCC_PLLCR_INSEL_Msk,
               (PLL_DB << RCC_PLLCR_DB_Pos) | PLL_R | PLL_O | Source);
}

static void RCHFInit(uint32_t clock)
{
1
1 已提交
84
    switch (clock)
85
    {
1
1 已提交
86 87 88
    case FL_RCC_RCHF_FREQUENCY_8MHZ:
        FL_RCC_RCHF_WriteTrimValue(RCHF8M_TRIM);
        break;
89

1
1 已提交
90 91 92
    case FL_RCC_RCHF_FREQUENCY_16MHZ:
        FL_RCC_RCHF_WriteTrimValue(RCHF16M_TRIM);
        break;
93

1
1 已提交
94 95 96
    case FL_RCC_RCHF_FREQUENCY_24MHZ:
        FL_RCC_RCHF_WriteTrimValue(RCHF24M_TRIM);
        break;
97

1
1 已提交
98 99 100
    default:
        FL_RCC_RCHF_WriteTrimValue(RCHF8M_TRIM);
        break;
101 102 103 104 105 106 107 108 109
    }

    FL_RCC_RCHF_SetFrequency(clock);
}

void SelRCHFToPLL(uint32_t rchf, uint32_t clock)
{
    uint32_t div = FL_RCC_PLL_PSC_DIV8;

1
1 已提交
110 111 112 113
    if (clock > 64)
    {
        return;
    }
114 115 116

    RCHFInit(rchf);

1
1 已提交
117
    switch (rchf)
118
    {
1
1 已提交
119 120 121
    case FL_RCC_RCHF_FREQUENCY_16MHZ:
        div = FL_RCC_PLL_PSC_DIV16;
        break;
122

1
1 已提交
123 124 125
    case FL_RCC_RCHF_FREQUENCY_24MHZ:
        div = FL_RCC_PLL_PSC_DIV24;
        break;
126

1
1 已提交
127 128
    default:
        break;
129 130
    }

1
1 已提交
131
    if (clock <= 24)
132 133 134 135 136
    {
        FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);
    }

    else
1
1 已提交
137 138
    {
        if ((clock > 24) && (clock <= 48))
139 140 141 142 143 144 145 146
        {
            FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
        }

        else
        {
            FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
        }
1
1 已提交
147
    }
148 149 150 151

    RCC_PLL_ConfigDomain_SYS(FL_RCC_PLL_CLK_SOURCE_RCHF, div, clock, FL_RCC_PLL_OUTPUT_X1);
    FL_RCC_PLL_Enable();

1
1 已提交
152
    while (FL_RCC_IsActiveFlag_PLLReady() != FL_SET);
153 154 155 156 157 158

    FL_RCC_SetAHBPrescaler(FL_RCC_AHBCLK_PSC_DIV1);
    FL_RCC_SetAPB1Prescaler(FL_RCC_APB1CLK_PSC_DIV1);
    FL_RCC_SetAPB2Prescaler(FL_RCC_APB2CLK_PSC_DIV1);
    FL_RCC_SetSystemClockSource(FL_RCC_SYSTEM_CLK_SOURCE_PLL);
}