官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 130|回复: 1

第18课 第12节 第07:06 添加了进入等待中断模式,这里看了几遍理解不了

[复制链接]

8

主题

28

帖子

180

积分

验证会员

积分
180
发表于 2019-6-4 21:31:09 | 显示全部楼层 |阅读模式
      在这块,加入了一行代码(见代码中红色字体),在ADC中断函数中,进行16次ADC后进入等待中断模式。这里不理解加入这句代码的意义。联系前后文看了几遍,也没有懂,总是感觉加上这句代码是多余的呀。麻烦老师给解答一下,感谢~
void Isr_Adc(void)
{
        int x = ADCDAT0;
        int y = ADCDAT1;

        static int adc_cnt = 0;
        static int adc_x = 0;
        static int adc_y = 0;

        if (!(x & (1<<15))) /* 如果仍然按下才打印 */
        {
#if 0               
                x &= 0x3ff;
                y &= 0x3ff;
               
                //printf("x = %08d, y = %08d\n\r", x, y);
                report_ts_xy(x, y, 1);

                /* 启动定时器以再次读取数据 */
                ts_timer_enable();
#endif
                /* 第1次启动ADC后:
                 *   a. 要连续启动N次, 获得N个数据, 求平均值并上报
                 *   b. 得到N次数据后, 再启动TIMER
                 */
                adc_x += (x & 0x3ff);
                adc_y += (y & 0x3ff);
       
                test_x_array[adc_cnt] = (x & 0x3ff);
                test_y_array[adc_cnt] = (y & 0x3ff);
               
                adc_cnt++;

                if (adc_cnt == 16)
                {
                        adc_x >>= 4;
                        adc_y >>= 4;
                        report_ts_xy(adc_x, adc_y, 1);

                        adc_cnt = 0;
                        adc_x = 0;
                        adc_y = 0;
                       
                        /* 启动定时器以再次读取数据 */
                /* 先设置TS进入"等待中断"模式 */
                        enter_wait_pen_up_mode();
                        ts_timer_enable();
                }
                else
                {
                        /* 再次启动ADC */
                        /* 进入"自动测量"模式 */
                        enter_auto_measure_mode();
                       
                        /* 启动ADC */
                        ADCCON |= (1<<0);
                }
               
        }
        else
        {
                adc_cnt = 0;
                adc_x = 0;
                adc_y = 0;

                ts_timer_disable();
                enter_wait_pen_down_mode();
                report_ts_xy(0, 0, 0);
        }

        enter_wait_pen_up_mode();
}



回复

使用道具 举报

8

主题

1571

帖子

4848

积分

版主

Rank: 7Rank: 7Rank: 7

积分
4848
发表于 2019-6-9 19:25:29 | 显示全部楼层
获取到16次按下的坐标,就等待抬起事件呀
我是百问网www.100ask.org答疑助手,有关技术问题请与我联系。
韦东山视频开发板购买店铺:https://100ask.taobao.com/
微信公众平台:baiwenkeji
回复 支持 反对

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2019-11-17 19:00 , Processed in 0.077672 second(s), 10 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表