基于BL606P-DVK音视频开发板的实战案例

音视频及家电

724人已加入

描述

本文是关于开发者 乘简 基于BL606P-DVK开发板实战开发的系列文章中的第五篇,主要介绍了CAN扩展模块收发测试!

01 硬件部分

BL606P的按键板上有5个按键,但只用到了1个GPIO16,其原理采用的是ADC采集的方法实现的,但不支持同时按住两个及以上键的功能!

代码如下:

main.c

#include 
#include 
#include 
#include 
#include "app_main.h"
#include "bl606p_adckeys.h"

int main(int argc, char *argv[])
{
    uint16_t t=0;
    
    board_yoc_init();
    adckey_Init();
       
    printf("
app start core clock %d........
", soc_get_cur_cpu_freq());

    while(1)

    {
    t=GetKey();
    
    if(t!=KEY_NO){
    LOGD("INFO", "/* %d */
", t);
    }
    }
 
    codec_output_init();
    codec_input_init();
    codec_loop_init();
    return 0;
}

bl606p_adckeys.h

#ifndef _BL606P_ADCKEYS_H_
#define _BL606P_ADCKEYS_H_

#include 
#include 
#include 


#define K4    0
#define K3    1
#define K6    4
#define K5    6
#define K7    8
#define KEY_NO    10

void adckey_Init();
uint16_t GetKey();

#endif
bl606p_adckeys.c
#include "bl606p_adckeys.h"

adc_dev_t adc;

void adckey_Init()
{
    csi_pin_set_mux(GPIO_PIN_16, GPIO16_ADC_CH8);
    adc.port = 8;
    adc.config.sampling_cycle = 100;
    hal_adc_init(&adc);
}

uint16_t GetKey()
{
    #define KEYCS 10//持续按多久算有效按键,这里如果改成5的话,则有个按键9也是有效按键了,改成10则无问题
    
    uint32_t value;
    uint16_t k=0;
    static uint16_t bk=KEY_NO,i=0;
    
    hal_adc_value_get(&adc, &value, HAL_WAIT_FOREVER);
    k = (value & 0xffff)/1000;
    
    if(kKEYCS)i=KEYCS;//在按键松开之前,防止计数溢出
    }
    }
    else bk=KEY_NO;
    
    return KEY_NO;
}

下载的时候,需要把GPIO16的跳线帽插回去,程序下载完后,把路线帽插到右边,串口输出中才会出现正确的结果,但有时即使还原了跳线帽也无法下载程序,所以要按住BOOT键不放,再按一下RST键,再松开BOOT键才能正常下载程序。

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分