CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
文档中心 > GR551x外设示例用户手册/ 应用示例概述 Copy URL

应用示例概述

SDK中所有外设示例路径:SDK_Folder\projects\peripheral\

以ADC示例为例,双击打开adc.uvprojx工程文件,在Keil中的目录结构如图 1所示:

图 1 工程目录结构

主要的文件说明如表 5所示:

表 5 外设示例主要文件说明
Group 文件 描述

user_app

main.c

Main()入口函数,对应模块的初始化代码和执行代码

gr55xx_hal_msp.c

外设初始化,对应模块的GPIO、中断、DMA配置

gr55xx_it.c

中断入口,对应模块与相关联模块的中断入口函数

GR5515_SK.h

硬件宏定义,对应模块的常用GPIO等硬件宏定义

  • gr55xx_hal_msp.c

    该文件主要实现了ADC模块中GPIO、中断等硬件的初始化与反初始化。

    hal_adc_msp_init():GPIO、中断等硬件初始化函数。

    1. 调用NVIC_ClearPendingIRQ()与hal_nvic_enable_irq()接口清除DMA Pending中断并使能DMA中断。
    2. 调用hal_msio_init()接口将ADC_P_INPUT_PIN(MSIO_PIN_0)、ADC_N_INPUT_PIN(MSIO_PIN_1)引脚初始化为模拟输入引脚。
    3. 调用hal_dma_ini()接口初始化DMA模块。

    代码如下所示:

    void hal_adc_msp_init(adc_handle_t *hadc)
    {
        msio_init_t msio_config = MSIO_DEFAULT_CONFIG;
        
        NVIC_ClearPendingIRQ(DMA_IRQn);
        hal_nvic_enable_irq(DMA_IRQn);
        
        /* Config input GPIO */
        msio_config.pin  = ADC_P_INPUT_PIN | ADC_N_INPUT_PIN;
        msio_config.mode = MSIO_MODE_ANALOG;
        hal_msio_init(&msio_config);
        
        /* Configure the DMA handler for Transmission process */
        hadc->p_dma = &s_dma_handle;
        s_dma_handle.p_parent = hadc;
        hadc->p_dma->channel           = DMA_Channel0;
        hadc->p_dma->init.src_request   = DMA_REQUEST_SNSADC;
        hadc->p_dma->init.direction     = DMA_PERIPH_TO_MEMORY;
        hadc->p_dma->init.src_increment = DMA_SRC_NO_CHANGE;
        hadc->p_dma->init.dst_increment = DMA_DST_INCREMENT;
        hadc->p_dma->init.src_data_alignment = DMA_SDATAALIGN_WORD;
        hadc->p_dma->init.dst_data_alignment = DMA_DDATAALIGN_WORD;
        hadc->p_dma->init.mode          = DMA_NORMAL;
        hadc->p_dma->init.priority      = DMA_PRIORITY_LOW;
        
        hal_dma_init(hadc->p_dma);
    }
    

    hal_adc_msp_deinit():GPIO、中断等硬件反初始化函数。

    1. 调用hal_msio_deinit()接口将ADC_P_INPUT_PIN(MSIO_PIN_0)、ADC_N_INPUT_PIN(MSIO_PIN_1)引脚恢复为普通引脚状态;
    2. 调用hal_dma_deinit()反初始化DMA。

    代码如下所示:

    void hal_adc_msp_deinit(adc_handle_t *hadc)
    {
        hal_msio_deinit(ADC_P_INPUT_PIN | ADC_N_INPUT_PIN);
        hal_dma_deinit(hadc->p_dma);
    }
    
  • gr55xx_it.c

    该文件主要实现了ADC模块与其他相关联模块的中断入口处理函数。

    DMA_IRQHandler():DMA中断入口处理函数,运行结果与状态通过用户回调函数hal_adc_conv_cplt_callback()返回,用户在此回调函数内可自定义操作。

    代码如下所示:

    void DMA_IRQHandler(void)
    {
        hal_dma_irq_handler(g_adc_handle.p_dma);
    }
    __WEAK void hal_adc_conv_cplt_callback(adc_handle_t *p_adc)
    {
    }
    

扫描关注

打开微信,使用“扫一扫”即可关注。