跳转至

8002使用外部晶振配置说明*

1. 找到需要修改的板级*

  • 以8002b_dev板级示例
    • 找到lvp_tws/boards/nationalchip/grus_gx8002b_dev_1v/clock_board.c,只需配置这个文件就能使用外部晶振。

2. 修改配置步骤*

  • 以下修改都是在lvp_tws/boards/nationalchip/grus_gx8002b_dev_1v/clock_board.c文件中修改

2.1 修改时钟源*

  • 高亮的两行第二个参数配置为1,其他的不修改,就配置好了外部时钟源
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    /******************* CLOCK SOURCE CONFIG *******************/
    static GX_CLOCK_SOURCE_TABLE clk_src_xtal_table[] = {
    /*       id            source      source0            source1     */
        {CLOCK_SOURCE_32K_PLL     , 0}, /* CLOCK_SOURCE_OSC_32K    | CLOCK_SOURCE_XTAL_32K */
        {CLOCK_SOURCE_1M_INPUT    , 0}, /* CLOCK_SOURCE_PDM_IN     | CLOCK_SOURCE_PWM_IN   */
        {CLOCK_SOURCE_1M          , 0}, /* CLOCK_SOURCE_OSC_1M     | CLOCK_SOURCE_1M_INPUT */
        {CLOCK_SOURCE_OSC_PLL     , 0}, /* CLOCK_SOURCE_32K_PLL    | CLOCK_SOURCE_1M       */
    
        {CLOCK_SOURCE_PIN_IN      , 1}, /* CLOCK_SOURCE_AUDIO_MCLK | CLOCK_SOURCE_PWM_IN   */
        {CLOCK_SOURCE_24M         , 1}, /* CLOCK_SOURCE_OSC_24M    | CLOCK_SOURCE_PIN_IN   */
        {CLOCK_SOURCE_PLL_DTO     , 0}, /* CLOCK_SOURCE_OSC_PLL    | CLOCK_SOURCE_PIN_IN   */
    
        {CLOCK_SOURCE_1M_12M      , 1}, /* CLOCK_SOURCE_OSC_24M    | CLOCK_SOURCE_1M       */
        {CLOCK_SOURCE_24M_PLL     , 0}, /* CLOCK_SOURCE_24M        | CLOCK_SOURCE_PLL_DTO  */
        {CLOCK_SOURCE_32K         , 0}, /* CLOCK_SOURCE_OSC_32K    | CLOCK_SOURCE_XTAL_32K */
    };
    
    /******************* CLOCK SOURCE CONFIG *******************/
    static GX_CLOCK_SOURCE_TABLE clk_src_osc_table[] = {
    /*       id            source      source0            source1     */
        {CLOCK_SOURCE_32K_PLL     , 1}, /* CLOCK_SOURCE_OSC_32K    | CLOCK_SOURCE_XTAL_32K */
        {CLOCK_SOURCE_1M_INPUT    , 0}, /* CLOCK_SOURCE_PDM_IN     | CLOCK_SOURCE_PWM_IN   */
        {CLOCK_SOURCE_1M          , 0}, /* CLOCK_SOURCE_OSC_1M     | CLOCK_SOURCE_1M_INPUT */
        {CLOCK_SOURCE_OSC_PLL     , 0}, /* CLOCK_SOURCE_32K_PLL    | CLOCK_SOURCE_1M       */
    
        {CLOCK_SOURCE_PIN_IN      , 0}, /* CLOCK_SOURCE_AUDIO_MCLK | CLOCK_SOURCE_PWM_IN   */
        {CLOCK_SOURCE_24M         , 0}, /* CLOCK_SOURCE_OSC_24M    | CLOCK_SOURCE_PIN_IN   */
        {CLOCK_SOURCE_PLL_DTO     , 0}, /* CLOCK_SOURCE_OSC_PLL    | CLOCK_SOURCE_PIN_IN   */
    
        {CLOCK_SOURCE_1M_12M      , 1}, /* CLOCK_SOURCE_OSC_24M/2  | CLOCK_SOURCE_1M       */
        {CLOCK_SOURCE_24M_PLL     , 1}, /* CLOCK_SOURCE_24M        | CLOCK_SOURCE_PLL_DTO  */
        {CLOCK_SOURCE_32K         , 1}, /* CLOCK_SOURCE_OSC_32K    | CLOCK_SOURCE_XTAL_32K */
    };
    

2.2 使能时钟*

  • 需要使能外部晶振,找到clk_init接口
  • 在接口开始的地方加上使能外部晶振的代码(如第一处高亮部分),将关闭外部晶振的代码屏蔽(如第二处高亮的部分

注意

使能和关闭的代码的位置不要变,如示例修改,使能的代码必须放在最前面

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void clk_init(void)
{
    //open 32k xtal
    *(volatile int*)0xa0005084 |= (1<<0);   // 使能外部晶振
    GX_START_MODE start_mode = gx_pmu_get_start_mode();

    ...
    ...

    _clk_mod_normal_init();

    _clk_pmu_normal_div_dto();

    _clk_mcu_normal_div_dto();

    if (start_mode == GX_START_MODE_SRAM) {
        for (int module = CLOCK_MODULE_AUDIO_PLAY; module < CLOCK_MODULE_MAX; module++)
            gx_clock_set_module_enable(module, (s_clk_mod_gate >> module) & 0x1);
    }

    gx_clock_set_module_enable(CLOCK_MODULE_HW_I2C, 1);
    //close 32k xtal
    // *(volatile int*)0xa0005084 &= ~(1<<0);   // 把关闭时钟的代码屏蔽

    //close 24M osc
    *(volatile int*)0xa0005060 &= ~(1<<1);

    // flash power down
    //*(volatile int*)0xa000003c = 1;

#ifdef CONFIG_ENABLE_BYPASS_CORE_LDO
    gx_analog_set_ldo_dig_ctrl(LDO_SW_CTRL_BYPASS);

#else

    ...
    ...
}