用户工程底层配置

备注

使用底层初始化和配置相关API需要在链接器中正确关联静态库 lowlevel,并在用户程序(.c)中 包含头文件 lowlevel.h

本章节介绍用户工程代码需要根据实际运行场景进行配置的底层外设的设置方法(API), 一般推荐将 对应代码置于 ./src/app.c 下属 app_init() 函数中。以下为典型的 app_init() 函数范例:

__attribute__((aligned(4), optimize("Os"))) void app_init(void)
{
  /* 可选:设置系统时钟和NOR控制器时钟 */
  /* 配置和使能OSC_CORE时钟@100MHz */
  clock_osc_core_set(OSC_Core_Frequency_100MHz);
  clock_osc_core_enable();
  /* 使用OSC_CORE时钟1分频作为系统时钟源,即 System Clock = 100MHz *
  clock_sysclk_set(Sysclk_Sel_Osc_Core, Clock_Source_Div_1);
  /* 使用系统时钟2分频作为NOR控制器时钟,即 Norc Clock = 50MHz */
  clock_norclk_set(Clock_Source_Div_2);

  /* 必要:设置IOVCC电压 */
  sys_set_iovcc(__SYS_IOVCC_3v2);

  /* 可选:ADC初始化 */
  adc_sys_init(__ADC_VMIC_3v0, __ADC_Samplerate_16khz, __ADC_Gain_44db, Disable);

}

系统时钟和NOR控制器时钟

重要

扩展阅读:时钟源

  • 用户根据需要调用 clock_sysclk_set() 对系统时钟(System Clock)频率进行设置,从而确定CPU/SRAM/DMA的工作速度。根据用户对系统时钟频率的需求,用户可能需要首先配置和开启上游高频时钟源。

  • 用户根据需要调用 clock_norclk_set() 对NOR Flash控制器速度进行设置,其来自系统时钟的直接分频。NOR速度不超过50MHz即可满足大多数场景需求。

  • 若用户不调用 clock_sysclk_set() ,系统时钟由SDK默认配置为OSC_AUDIO时钟,即49.152MHz。

  • 若用户不调用 clock_norclk_set() ,Nor Flash速度由SDK默认配置为系统时钟2分频。

API链接:

IOVCC电压

重要

扩展阅读:电源管理单元 (PMU)

  • 用户需要根据实际方案的供电电压,调用 sys_set_iovcc() 对IOVCC进行设置,推荐配置如下:

../_images/kiwi-iovcc-vmic-setting.png

关闭IOVCC的方法:调用 pmu_iovcc_disable()

ADC配置

工程中若需要使用adc,必须调用 adc_sys_init() 对adc初始化。如使用gpadc或使用ADC采集mic音频。


API说明

enum __sys_iovcc_t

iovcc电压范围

  • __SYS_IOVCC_2v0: vmic电压2.0V

  • __SYS_IOVCC_2v2: vmic电压2.2V

  • __SYS_IOVCC_2v4: vmic电压2.4V

  • __SYS_IOVCC_2v6: vmic电压2.6V

  • __SYS_IOVCC_2v8: vmic电压2.8V

  • __SYS_IOVCC_3v0: vmic电压3.0V

  • __SYS_IOVCC_3v2: vmic电压3.2V

  • __SYS_IOVCC_3v4: vmic电压3.4V

enum __adc_vimc_t

vmic电压范围

  • __ADC_VMIC_2v0: vmic电压2.0V

  • __ADC_VMIC_2v2: vmic电压2.2V

  • __ADC_VMIC_2v4: vmic电压2.4V

  • __ADC_VMIC_2v6: vmic电压2.6V

  • __ADC_VMIC_2v8: vmic电压2.8V

  • __ADC_VMIC_3v0: vmic电压3.0V

  • __ADC_VMIC_3v2: vmic电压3.2V

  • __ADC_VMIC_3v4: vmic电压3.4V

enum __adc_samplerate_t

adc采样率

  • __ADC_Samplerate_8khz: adc采样率8khz

  • __ADC_Samplerate_16khz: adc采样率16khz

  • __ADC_Samplerate_24khz: adc采样率24khz

  • __ADC_Samplerate_32khz: adc采样率32khz

  • __ADC_Samplerate_48khz: adc采样率48khz

enum __adc_gain_t

adc主通道增益

  • __ADC_Gain_0db: adc增益为0

  • __ADC_Gain_17db: adc增益为17db

  • __ADC_Gain_20db: adc增益为20db

  • __ADC_Gain_24db: adc增益为24db

  • __ADC_Gain_28db: adc增益为28db

  • __ADC_Gain_32db: adc增益为32db

  • __ADC_Gain_36db: adc增益为36db

  • __ADC_Gain_40db: adc增益为40db

  • __ADC_Gain_44db: adc增益为44db

void adc_sys_init(__adc_vimc_t vmic, __adc_samplerate_t samplerate_khz, __adc_gain_t gain, soc_enable_t gpadc_en)

adc初始化

参数
  • vmic – 指定vmic电压,__adc_vimc_t中选择。

  • samplerate_khz – 指定主通道采样率,在__adc_samplerate_t中选择。

  • gain – mic增益,__adc_gain_t中选择。

  • gpadc_en – 次通道GPADC使能。Disable或Enable。

Note

不使用mic采集音频,只使用gpadc,对mic采样率和增益无要求

void adc_sys_set_samplerate(__adc_samplerate_t samplerate_khz)

修改adc通道采样率

参数
  • samplerate_khz – 修改采样率,在__adc_samplerate_t中选择。

void adc_sys_set_gain(__adc_gain_t gain)

adc主通道增益选择

参数
  • gain – 修改增益,在__adc_gain_t中选择。

int32_t sys_set_iovcc(__sys_iovcc_t iovcc)

调整iovcc电压

参数
  • iovcc – iovcc电压挡位,选参:__sys_iovcc_t

返回

0

void sys_set_vmic(__adc_vimc_t vmic)

调整iovcc电压

参数
  • vmic – 调整vmic电压,__adc_vimc_t中选择。

返回

0

void sys_get_vcc()

获取vcc电压

返回

vcc上电压,单位毫伏(mV)

Note

调用改函数前必须先调用adc_sys_init(),确保adc初始化,否则函数会卡死。

void adc_diff_mic_pin_init(void)

初始化差分MIC的相关引脚(GPIO24~26),并对外部电容进行充电。

返回

无。

void adc_diff_mic_pin_deinit(void)

去初始化差分MIC的相关引脚(GPIO24~26)。

返回

无。

void adc_single_end_mic_pin_init(void)

初始化单端MIC的相关引脚(GPIO24~25),并对外部电容进行充电。

返回

无。

void adc_single_end_mic_pin_deinit(void)

去初始化单端MIC的相关引脚。

返回

无。