221|1

22

帖子

0

资源

一粒金砂(中级)

[国民技术N32WB452测评]三.硬件触控调试及DVP采集图像 [复制链接]

本帖最后由 Eurasia32 于 2022-7-31 00:06 编辑
  1. TSC(触摸传感器控制)                
    1. N32WB452所带TSC支持电容式触控功能,最大支持18通道,各通道课单独使能。在该开发板上带有四个触控按键,为TSC Channel 16-19,分别对应PC10-12和PD2。             
    2. 在开发板所附SDK中提供了底层驱动,用户开发时只需关注顶层函数的调用与实现即可。
    3. 触控的主要实现流程如下:
      1. 定义并实现回调函数(tsc_alg_isr_callback())
      2. 使用tsc_alg_need_sramsize()函数获取SRAM资源大小以及BUF
      3. 定义并实现初始化函数,其中包括TIMER,通道列表等的初始化,以及tsc_alg_init()函数与tsc_alg_start()函数的调用
      4. 当有触摸时调用回调函数,实现其中定义功能
    4. 运行例程: \examples\TSC\TSC_Lib_demo
      1. 回调函数实现:
        int32_t tsc_alg_isr_callback(tsc_alg_type type, uint32_t event, uint32_t chn, uint32_t value)
        {
        //    uint32_t wakeup_type;
            uint8_t cnt = 0;
        
            if (type == TSC_ALG_BUTTON_TYPE)
            {
                if (event == TSC_PRESS_KEY_NORMAL) {//正常按键操作
                    for (cnt = 0; cnt < 4; cnt++)
                    {
                        if (chn == gtsc_list[cnt].chn)
                        {
                            log_debug("Key [%x] press %d\r\n", gtsc_list[cnt].chn, value);
                            if (value)
                            {
                                GPIO_SetBits(LedPort[cnt],LedPin[cnt]);
                            }
                            else
                            {
                                GPIO_ResetBits(LedPort[cnt],LedPin[cnt]);
                            }
                        }
                    }
                }
            }
            return TSC_SUCCESS;
        }
         
      2. 初始化函数定义及实现(包括获取sram大小):
        int32_t app_touch_init(void)
        {
            int32_t ret;
            uint32_t totals_chn, size;
            TSC_AlgInitTypeDef TSC_AlgStructure = {0};
        
            //获取总通道数
            totals_chn = sizeof(gtsc_list) / sizeof(gtsc_list[0]);
        
            //打印触控算法版本
            log_info("tsc version = %s.\r\n", tsc_alg_get_version());
        
            //判断通道数所需要的SRAM资源是否足够
            size = tsc_alg_need_sramsize(totals_chn);
            if(!size)
            {
                log_error("Get ram size error!\r\n");
                return TSC_SOURCE_NOT_ENOUGH_ERR;
            }
            else if(sizeof(TscKey.sram) < size)
            {
                log_error("Sram is too small,(%d)chn need ram %d,but support size is %d\r\n",totals_chn, size, sizeof(TscKey.sram));
                return TSC_SOURCE_NOT_ENOUGH_ERR;
            }
            else 
            {
                log_info("tsc_alg_need_sramsize ok:size=%d\r\n",size);
            }
        
            //初始化触控模块及BUF
            TSC_AlgStructure.TIMx               = TIM2;
            TSC_AlgStructure.DMAyChx            = DMA1_CH5;
            TSC_AlgStructure.DMARemapEnable     = 1;
            TSC_AlgStructure.pTScChannelList    = (TSC_AlgInitThreValue*)gtsc_list;
            TSC_AlgStructure.AutoCalibrateTimer = 1000;                //覆盖物的自动校准时间1000ms
            TSC_AlgStructure.ResistDisturbLev   = TSC_RESIST_DIS_LEV0; //抗干扰等级。装配成品后建议加亚克力,并配置为TSC_RESIST_DIS_LEV1
            TSC_AlgStructure.pTscSramAddr       = (uint8_t*)(TscKey.sram);
            TSC_AlgStructure.TscSramSize        = sizeof(TscKey.sram);
        #ifdef THRE_TOUCHDATA_DEBUG //监控模式下设定log缓存空间
            TSC_AlgStructure.LogBuf             = (uint16_t*)(TscKey.LogBuf);
            TSC_AlgStructure.LogBufSize         = sizeof(TscKey.LogBuf) / sizeof(TscKey.LogBuf[0]);
        #endif
            TSC_AlgStructure.Stop2Data             = (uint8_t *)gTscStop2Data;
            TSC_AlgStructure.Stop2DataSize         = sizeof(gTscStop2Data);
            ret                                 = tsc_alg_init(&TSC_AlgStructure);
            if (ret != TSC_SUCCESS)
            {
                log_error( "tsc_alg_init errcode = %x.\r\n", ret);
                return ret;
            } else {
                log_info("tsc_alg_init ok.\r\n");
            }
        
            //启动触控开始工作
            ret = tsc_alg_start();
            if (ret != TSC_SUCCESS)
            {
                log_error( "errcode = %x.\r\n", ret);
                return ret;
            } 
            else 
            {
                log_info("tsc_alg_start ok.\r\n");
            }
        
            return ret;
        }

         

      3. 编译并运行后,从串口调试助手可以看到运行结果,同时观察开发板上LED亮灭情况可以得知对应关系如下:T3-D1,T4-D10,T5-D11,T6-D12,串口助手情况如下图:

        image-20220730235607-1.png

        image-20220730235607-2.png

        由此看出该例程运行正常。

         

  2. DVP
    1. 该开发板提供了一个DVP接口,可以用于外接摄像头。
    2. 例程: \examples\DVP\Camera
      1. 该例程实现了驱动GC0803摄像头并通过DMA控制器传输读取数据,由于手头暂时没有LCD屏幕,故仅观察串口调试助手,正常工作时每隔约1s会将采集一次摄像头数据并输出提示信息。

        编译并运行后,打开串口调试助手,可以看到如下界面:

        image-20220731000516-1.png  

        说明摄像头运行正常。

  3. 总结

                本次测试共测试了该开发板的TSC与DVP,均成功地运行了相关例程,下次测试将主要着眼于通过LCD显示DVP采集图片,并使用触控功能实现控制输出图像色彩等功能。   

 


回复

6895

帖子

0

资源

五彩晶圆(中级)

开发板提供有DVP接口,挂个外接摄像头不错

 


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表