历史上的今天
返回首页

历史上的今天

今天是:2024年09月30日(星期一)

正在发生

2021年09月30日 | S3C2440裸机------触摸屏_定时候程序优化

2021-09-30 来源:eefocus

我们前面的触摸屏代码中,当我们短按一次会有一个数据输出,但是当我们长按或者滑动时并没有数据输出,我们用定时器使触摸屏支持长按,在按下时我们启动定时器,定时器间隔一段时间中断一次,然后在中断函数里面再去测量触点的XY坐标。


我们前面的定时器代码是直接在定时器中断函数里面点灯,我们应该用一个数组去做处理,当定时器中断发生时分别进入不同的函数做不同的处理。


1. timer.c

 

#include "s3c2440_soc.h"

 

#define TIMER_NUM  32

#define NULL  ((void *)0)

 

typedef void(*timer_func)(void);

 

typedef struct timer_desc {

char *name;

timer_func fp;

}timer_desc, *p_timer_desc;

 

timer_desc timer_array[TIMER_NUM];

 

 

int register_timer(char *name, timer_func fp)

{

int i;

for (i = 0; i < TIMER_NUM; i++)

{

if (!timer_array[i].fp)

{

timer_array[i].name = name;

timer_array[i].fp   = fp;

return 0;

}

}

return -1;

}

 

void unregister_timer(char *name)

{

int i;

for (i = 0; i < TIMER_NUM; i++)

{

if (!strcmp(timer_array[i].name, name))

{

timer_array[i].name = NULL;

timer_array[i].fp   = NULL;

return 0;

}

}

return -1;

}

 

 

void timer_irq(void)

{

int i;

for (i = 0; i < TIMER_NUM; i++)

{

if (timer_array[i].fp)

{

timer_array[i].fp();

}

}

}

 

 

void timer_init(void)

{

/* 设置TIMER0的时钟 */

/* Timer clk = PCLK / {prescaler value+1} / {divider value} 

             = 50000000/(49+1)/16

             = 62500

*/

TCFG0 = 49;  /* Prescaler 0 = 49, 用于timer0,1 */

TCFG1 &= ~0xf;

TCFG1 |= 3;  /* MUX0 : 1/16 */

 

/* 设置TIMER0的初值 */

TCNTB0 = 625;  /* 10Ms中断一次 */

 

/* 加载初值, 启动timer0 */

TCON |= (1<<1);   /* Update from TCNTB0 & TCMPB0 */

 

/* 设置为自动加载并启动 */

TCON &= ~(1<<1);

TCON |= (1<<0) | (1<<3);  /* bit0: start, bit3: auto reload */

 

/* 设置中断 */

register_irq(10, timer_irq);

}


2. led.c

 

#include "s3c2440_soc.h"

 

void delay(volatile int d)

{

while (d--);

}

 

 

/* 每10ms该函数被调用一次 

 * 每500ms操作一下LED实现计数

 */

void led_timer_irq(void)

{

/* 点灯计数 */

static int timer_num = 0;

static int cnt = 0;

int tmp;

 

timer_num++;

if (timer_num < 50)

return;

timer_num = 0;

 

cnt++;

 

tmp = ~cnt;

tmp &= 7;

GPFDAT &= ~(7<<4);

GPFDAT |= (tmp<<4);

}

 

int led_init(void)

{

/* 设置GPFCON让GPF4/5/6配置为输出引脚 */

GPFCON &= ~((3<<8) | (3<<10) | (3<<12));

GPFCON |=  ((1<<8) | (1<<10) | (1<<12));

 

register_timer("led", led_timer_irq);

}

 

int led_test(void)

{

int val = 0;  /* val: 0b000, 0b111 */

int tmp;

 

/* 设置GPFCON让GPF4/5/6配置为输出引脚 */

GPFCON &= ~((3<<8) | (3<<10) | (3<<12));

GPFCON |=  ((1<<8) | (1<<10) | (1<<12));

 

/* 循环点亮 */

while (1)

{

tmp = ~val;

tmp &= 7;

GPFDAT &= ~(7<<4);

GPFDAT |= (tmp<<4);

delay(100000);

val++;

if (val == 8)

val =0;

}

 

return 0;

}

推荐阅读

史海拾趣

AEMC Instruments公司的发展小趣事

随着电子行业的不断发展,AEMC Instruments公司不断追求技术创新和产品升级。公司投入大量资源进行研发,成功推出了接地电阻测试仪(包括新型革命性塔测试系统)和绝缘电阻测试仪等新型产品。这些产品不仅提高了测试的准确性和效率,还满足了市场对高品质电气测试仪器的需求。同时,公司还不断完善现有产品线,推出了钳形表、变压器变比计、谐波功率计等一系列电气测试仪器,进一步巩固了其在行业内的领先地位。

HANA Micron公司的发展小趣事

除了工业检测仪表外,Hama在家用视听设备领域也取得了显著成就。公司推出的哈曼卡顿音响系列,以其卓越的音质表现和时尚的外观设计,迅速成为消费者心中的首选品牌。这些家用视听设备不仅为消费者带来了高品质的视听享受,也进一步丰富了Hama的产品线,提升了公司的市场竞争力。随着消费者对高品质生活的追求日益增强,Hama的家用视听设备业务有望继续保持快速增长。

BOCA公司的发展小趣事

随着技术的不断进步,BOCA公司意识到单一产品线的局限性。为了拓宽市场,公司决定进军消费电子领域。BOCA通过与知名品牌合作,推出了一系列搭载其先进技术的电子产品,如智能手机、平板电脑等。这些产品凭借其卓越的性能和独特的设计,迅速在市场上获得了良好的口碑,为BOCA带来了丰厚的利润。

Exel Microelectronics Inc公司的发展小趣事

在XXXX年,Exel Microsystems Inc公司成功进入国际市场。公司凭借优质的产品和服务,赢得了国外客户的认可和信任。为了更好地服务国际市场,Exel还在多个国家和地区设立了分支机构和研发中心。这一市场拓展的成功不仅为公司带来了更多的商业机会,也提升了公司的国际知名度和影响力。

Electronic Sensor + Resistor GmbH公司的发展小趣事

品质是ESR公司的生命线。公司始终坚持“质量第一、用户至上”的原则,建立了完善的质量管理体系和严格的质量控制流程。从原材料采购、生产加工到成品检验等各个环节都实行严格的质量控制措施,确保每一件产品都符合高品质标准。

此外,ESR公司还建立了完善的售后服务体系,为用户提供及时、专业的技术支持和解决方案。这种对品质的执着追求和对用户的真诚服务赢得了客户的广泛赞誉和信赖。

Amidon Associates Inc公司的发展小趣事

在ESR公司的发展历程中,技术突破是推动其不断前进的重要动力。公司投入大量资源用于研发,不断推出具有创新性和竞争力的新产品。其中,一款基于纳米技术的微型传感器成为市场上的明星产品,其高精度、低功耗和快速响应的特性受到了用户的广泛好评。

此外,ESR公司还注重与高校和研究机构的合作,共同开展前沿技术的研发。这种产学研合作模式不仅为公司带来了源源不断的技术创新,也为公司培养了一批高素质的研发人才。

问答坊 | AI 解惑

浅谈PIC8位单片机中的RAM和汇编程序的关系

 由于Microchip推出的PIC系列8位单片机是朝着超小型、低功耗、低成本方向发展的,这些产品无功能堆积而以多品种方式来满足各种应用层次的要求,所以PIC 8位单片机的型号特别多,正因为如此,给初学者带来学习上的不便,易使初学者在阅读单片机 ...…

查看全部问答>

高速公路收费站系统监控解决方案

高速公路视频监控系统一般分为收费监控和道路监控两部分。收费监控系统主要是对收费站的车道、收费广场、收费亭的收费情况,对收费车道通过的车辆类型、收费员的操作过程以及收费过程中的突发事件和特殊事件进行观察和记录,实施有效的监督。道路监 ...…

查看全部问答>

一般电器常用的十六种检查方法

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 一、 面板压缩法 利用电器面板、操作台或机外露出的各个开关、旋钮的作用做检查,大概判断故障发生的部位。比如:电视伴音时有时无,调音量旋钮,出现“喀拉”声同时伴音时有时无,由此 ...…

查看全部问答>

wince5 响应右键时事 cannot execute program

    添加相应的头文件和库 但执行时           if(::SHRecognizeGesture(&shrg) == GN_CONTEXTMENU)//长按键消息                 { } 在这条语句出现了& ...…

查看全部问答>

关于 wince 启动速度,在线等;

    现在采用的三星的 K9FXX  1G byte 的nand, XIPKERNAL.NB0 < 2M   NK.NB0 = 20MB, 启动的时间居然要 10s 左右,load XIPKERNAL.NB0 到 RAM 中, 从跳到OS 入口到 Explorer 出来需要6~7s, 先在想问一下,multi b ...…

查看全部问答>

请教关于调试BUG问题!

产品:PDA设备,CPU:PXA270 起因:电源管理中,PDA有两种供电模式:1,电池;  2.外部电源或USB供电       当当前PDA是电池供电时,在CE系统的桌面的下方(任务栏上)无图标,在控制面板的电源管理中显示是电池 ...…

查看全部问答>

电脑问题

我的电脑最近出现了问题,弹出一个屏幕.不知道是怎么回事引起的, a problem has been detected and windows has been shut down to proevent  damage to you computer,if this is the first time you\'ve seen this stop error screen,re ...…

查看全部问答>

FPGA中如何求倒数

      我先要做的是一个定点实数的倒数运算,我用16bit的数表示范围为1.0~15.0的实数,用4bit表示整数,11bit表示小数我的思路是先把1.0~15.0做倒数, 然后扩大2048倍(右移11位), 但是如果我要精确运算的话,要从 ...…

查看全部问答>

特别菜的问题

我学DSP也有两个月了 之前我一直在用别人的例程 但是有好多不明白的地方 因为C语言的功底不是很好 所以很吃力 我想问大家:    程序中的那些头文件都需要自己编吗   CCS自带头文件了吗   如何找到头文件 &n ...…

查看全部问答>

最早获得ARM授权的公司

提到ARM大家都能如数家珍的列出几个公司来:NXP, Samsung等。提到TI的ARM,很多人会惊讶地说TI还在做ARM呀?!是的TI在做ARM,而且TI做ARM已经不是新鲜事了,TI最早获得ARM的授权已经是1993年的事了“1993    * 为 Cirrus Logic 和 ...…

查看全部问答>