历史上的今天
返回首页

历史上的今天

今天是:2025年07月19日(星期六)

2020年07月19日 | S3C2440电阻触摸屏驱动设计

2020-07-19 来源:eefocus

实验:当触笔点击在触摸屏上时,SecureCRT上显示触点的X,Y坐标;


目的:测试电阻触摸屏驱动程序;


开发板:S3C2440


/*

*版权所有(C)2015,ZJU

*

*文件名称:ts.c

*内容摘要:关于触摸屏的配置

*其它说明:开发板型号: TX2440

*    电阻屏

*当前版本:V1.0

*作    者:Frank

*完成日期:2015.12.22

*

*/

 

#define  ADCCON (*(volatile unsigned int *)0x58000000) //ADC control register

#define  ADCTSC (*(volatile unsigned int *)0x58000004) //ADC Touch Screen Control Register

#define  ADCDLY (*(volatile unsigned int *)0x58000008) //ADC Start or interval delay register

#define  ADCDATA0 (*(volatile unsigned int *)0x5800000C) //ADC conversion data register

#define  ADCDATA1 (*(volatile unsigned int *)0x58000010) //ADC conversion data register

 

/*interrupt register*/

#define  SRCPND (*(volatile unsigned long *)0x4A000000)

#define  INTMSK (*(volatile unsigned long *)0x4A000008)

#define  INTPND (*(volatile unsigned long *)0x4A000010)

#define  INTOFFSET (*(volatile unsigned long *)0x4A000014)

#define  SUBSRCPND (*(volatile unsigned long *)0x4A000018)

#define  INTSUBMSK (*(volatile unsigned long *)0x4A00001C)

 

 

int xdata=0;

int ydata=0;

 

 

/*******************************************************************

*函数名称:Ts_Init()

*功能描述:触摸屏工作初始化

*其他说明:配置ADC为触摸屏工作模式

*创建日期:2015.12.22

*******************************************************************/

void Ts_Init(void)

{

/*1、设置AD转换时钟*/

ADCCON = (1 << 14) | (49 << 6); //AD转换频率=PCLK/(Val + 1),此处设为 1MHz

/*2、设置中断屏蔽位*/

INTMSK = ~(1 << 31);

INTSUBMSK = ~(1 << 9);

/*3、进入等待中断的模式*/

ADCTSC = 0xd3;

/***清除CPSR寄存器中的第7位I(IRQ disable),因为在start.S中关闭了中断****/

//这一步的目的是开启总中断

__asm__(

"mrs r0, cpsrn"

"bic r0, r0, #0x80n"

"msr cpsr_c, r0n"

:

:

);

}

 

 

/*******************************************************************

*函数名称:Ts_Handler()

*功能描述:触摸屏中断处理

*其他说明:按下触摸屏后的中断处理

*创建日期:2015.12.22

*******************************************************************/

void Ts_Handler(void)

{

/*1、启动XY坐标自动转换*/

ADCTSC = (1 << 2);

ADCCON |= (1 << 0);

/*2、等待转换完成*/

while(!(ADCCON & (1 << 15)));

/*3、获取坐标*/

xdata = ADCDATA0 & 0x3ff;

ydata = ADCDATA1 & 0x3ff;

 

/*4、清除按下中断*/

SUBSRCPND |= (1 << 9);

SRCPND = (1 << 31);

INTPND = (1 << 31);

/*5、进入等待弹起中断*/

ADCTSC = 0xd3;

ADCTSC |= (1 << 8);

while(1)

{

if (SUBSRCPND & (1 << 9))

break;

}

/*6、清除弹起中断*/

SUBSRCPND |= (1 << 9);

SRCPND = (1 << 31);

INTPND = (1 << 31);

//对读取到的X,Y坐标进行处理

printf("X is %d, Y is %dn", xdata, ydata);

printf("nr");

/*7、再次进入等待按下中断的状态*/

ADCTSC = 0xd3;

 

}

 

 


中断处理文件interrupt.c中触摸屏中断函数的调用程序:

/*******************************************************************

*函数名称:handle_int()

*功能描述:中断处理函数

*其他说明:

*******************************************************************/

void handle_int()

{

/*判断产生中断的中断源*/

unsigned long value = *(INTOFFSET);

 

switch (value)

{

case 31 :

Ts_Handler(); //触摸屏中断

break;

default :

break;

}

}

推荐阅读

史海拾趣

Defense Supply Center Columbus公司的发展小趣事

在电子行业,产品质量是企业生存和发展的关键。Defense Supply Center Columbus公司始终将质量管理放在首位,建立起一套完善的质量管理体系。公司严格按照国际标准进行生产和检测,确保每一件产品都符合质量要求。同时,公司还注重员工的培训和教育,提高员工的质量意识和操作技能。这些措施的实施,使得公司的产品质量得到了显著提升,赢得了客户的广泛赞誉。

东科半导体(DK)公司的发展小趣事

东科半导体(DK)公司一直将技术创新作为发展的核心驱动力。公司投入大量资金和资源用于研发,先后开发出AC/DC、同步整流、第三代半导体氮化镓芯片等先进技术。其中,东科半导体的同步整流芯片研发成功,其独特的两引脚封装技术为全球首创,为公司赢得了行业内的独家竞争优势。这一技术的成功应用,不仅提升了公司产品的性能,也进一步巩固了东科在电源管理芯片市场的领先地位。

ATO SOLUTION公司的发展小趣事

在电子行业的激烈竞争中,ATO SOLUTION公司通过一项创新性的技术突破,成功引领了市场的新潮流。该公司研发出了一款高效能的半导体芯片,极大地提升了电子设备的性能和能效比。这一技术的问世,迅速获得了行业内外的广泛关注和认可,为公司赢得了大量合作伙伴和客户,奠定了市场领先地位。

Corsair Memory Inc公司的发展小趣事

随着公司的发展,Corsair Memory Inc不仅局限于内存产品的生产,还积极扩大业务范围。其中,收购SCUF Gaming是Corsair在扩展业务版图上的重要一步。这一收购使Corsair得以进入游戏外设市场,进一步丰富了其产品线,也为其带来了更多的增长机会。

深圳杜因特(DOINGTER)公司的发展小趣事

经过数年的技术研发和产品迭代,杜因特成功开发出多款高性能的MOS场效应管产品,这些产品广泛应用于开关电源、液晶电视、充电器等多个领域。随着产品质量的不断提升和市场份额的逐步扩大,杜因特逐渐在电子行业树立了良好的品牌形象。

BOPLA公司的发展小趣事

在国内市场取得一定成绩后,BOPLA开始将目光投向海外市场。通过参加国际电子展会、与海外客户建立合作关系等方式,公司成功将产品打入国际市场。同时,BOPLA还积极调整产品策略,根据不同国家和地区的市场需求,推出定制化的电子元件产品,进一步扩大了市场份额。

问答坊 | AI 解惑

有在吴江华冠通讯工作的朋友吗?

请问这里有在吴江华冠工作的朋友吗? 有问题想请教, 谢谢!…

查看全部问答>

S3c610 Codec移植的工作经验总结[bootloader级]

1. S3C6410与WM9713的I2S,AC97,PCM相比较: 1.I2S,AC97,PCM是不同的,各是各的,三者时序不同,要双方通信,必须要是 同一种时序,要么均是I2S,要么均是AC97,要么均是PCM 2.S3C6410的I2S,AC97,PCM复用同一组Pin脚,但同一时间只能用一种类型 ...…

查看全部问答>

不同时钟域的数据传输问题

单片机读写CPLD的时钟、SDRAM的时钟、还有像素时钟都是不同的 ,这个问题怎么处理?…

查看全部问答>

关于mini2440 mmu

前几天拿到一个mini2440,板子很精致。400M的主频,在跑uCos2的时候,发现速度很慢,可是却不知道为什么。怀疑是cache没有利用起来,可是我对于MMU也不是很明白,有没有点建议? void MMU_Init(void) {     int i,j;     / ...…

查看全部问答>

中九破解

1231111111111111111111111111111111…

查看全部问答>

C#在wince下的双缓冲如何实现?

用GDI绘图,非常闪砾,想用双缓冲实现,可发现网上搜到的双缓冲例子中用到的类,在wince下都没有,请问有人做过双缓冲绘图吗?如何实现,希望可以给出关键代码,谢谢…

查看全部问答>

Altera的EPCS是否存在校验码

对于FPGA芯片,在上电的时候从EPCS内加载配置文件的信息,我想知道数据从EPCS传输到FPGA的过程中,是否存在冗余校验,就像422,485等通信过程中存在的校验。或者,我想为FPGA的*.pof文件内是否存有数据的冗余校验信息。谢谢…

查看全部问答>

FirmwareLib的应用及C++工程建立过程杂谈

Firmware Lib的应用及C++工程建立过程杂谈Firmware Lib下在地址:http://www.st.com/stonline/products/support/micro/files/um0427.zipFirmware Lib用户手册下载地址:http://www.st.com/stonline/products/literature/um/134 ...…

查看全部问答>

【求助】timer_a如何设置进入定时器溢出中断

在增计数模式下设置了: CCR0 = 0x0fff; TACTL = TASSEL1 + MC1 + TAIE CCTL0 = CCIE; GIE 也置位了, 在TAR计数到0xffff时不能进中断!…

查看全部问答>