应用示例概述
SDK中所有外设示例路径:SDK_Folder\projects\peripheral\。
以ADC示例为例,双击打开adc.uvprojx工程文件,在Keil中的目录结构如图 1所示:
主要的文件说明如表 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、中断等硬件初始化函数。
- 调用NVIC_ClearPendingIRQ()与hal_nvic_enable_irq()接口清除DMA Pending中断并使能DMA中断。
- 调用hal_msio_init()接口将ADC_P_INPUT_PIN(MSIO_PIN_0)、ADC_N_INPUT_PIN(MSIO_PIN_1)引脚初始化为模拟输入引脚。
- 调用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、中断等硬件反初始化函数。
- 调用hal_msio_deinit()接口将ADC_P_INPUT_PIN(MSIO_PIN_0)、ADC_N_INPUT_PIN(MSIO_PIN_1)引脚恢复为普通引脚状态;
- 调用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) { }