[国嵌攻略][063][电阻屏驱动程序设计]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | /******************************************************************** *名称:touchscreen.c *作者:D *时间:2015.11.23 *功能: * 触摸屏驱动,由于MINI2440采用一线触控,而非四线电阻触控所以触摸屏 * 驱动无法使用。 ********************************************************************/ /******************************************************************** *宏定义 ********************************************************************/ #define INTMSK ( (*(volatile unsigned long *)0X4A000008) ) //中断掩码寄存器 #define INTSUBMSK ( (*(volatile unsigned long *)0X4A00001C) ) //子中断掩码寄存器 #define ADCCON ( (*(volatile unsigned long *)0x58000000) ) //ADC控制寄存器 #define ADCTSC ( (*(volatile unsigned long *)0x58000004) ) //ADC触摸屏控制寄存器 #define ADCDAT0 ( (*(volatile unsigned long *)0x5800000C) ) //ADC0转换数据寄存器 #define ADCDAT1 ( (*(volatile unsigned long *)0x58000010) ) //ADC1转换数据寄存器 #define SUBSRCPND ( (*(volatile unsigned long *)0X4A000018) ) //子中断掩码寄存器 #define SRCPND ( (*(volatile unsigned long *)0X4A000000) ) //中断源请求寄存器 #define INTPND ( (*(volatile unsigned long *)0X4A000010) ) //中断请求寄存器 /******************************************************************** *名称:init_touchscreen *参数: * none *返回: * none *功能:初始化触摸屏 *********************************************************************/ void init_touchscreen(){ //设置ADC转换频率 ADCCON = (1<<14)|(49<<6); //PRSCEN[14]:1, PRSCVL[13:6]:49 ADC_Freqeuncy=PCLK/(PRSCVL+1) PCLK=50MHz ADC_Freqeuncy=1MHz //等待按下中断 ADCTSC = (0<<8)|(1<<7)|(1<<6)|(1<<4)|(0x3<<0); //UD_SEN[8]:0, YM_SEN[7]:1, YP_SEN[6]:1, XM_SEN[5]:0, XP_SEN[4]:1, PULL_UP[3]:0, AUTO_PST[2]:0, XY_PST[1:0]:0b11 //设置子中断掩码 INTSUBMSK &= ~(1<<9); //INT_TC[9]:0 //设置中断掩码 INTMSK &= ~(1<<31); //INT_ADC[31]:0 } /******************************************************************** *名称:touchscreen_irq *参数: * none *返回: * none *功能:触摸屏中断服务 *********************************************************************/ void touchscreen_irq(){ int x, y; if ( !(ADCTSC&(1<<8)) ){ //如果是触摸屏按下,UD_SEN[8]:0 //设置触摸屏自动转换 ADCTSC = (1<<2); //AUTO_PST[2]:1 //启动ADC转换 ADCCON |= (1<<0); //ENABLE_START[0]:1 //等待ADC转换结束 while ( !(ADCCON&(1<<15)) ); //ECFLG[15] //获取坐标 x = ADCDAT0&(0x3FF<<0); //XPDATA[9:0] y = ADCDAT1&(0x3FF<<0); //YPDATA[9:0] //清除子中断请求 SUBSRCPND |= (1<<9); //INT_TC[9]:0 //清除中断源请求 SRCPND |= (1<<31); //INT_ADC[31]:0 //清除中断请求 INTPND |= (1<<31); //INT_ADC[31]:0 //等待弹起中断 ADCTSC = (1<<8)|(1<<7)|(1<<6)|(1<<4)|(0x3<<0); //UD_SEN[8]:1, XY_PST[1:0]:0b11 } else { //如果是触摸屏弹起,UD_SEN[8]:1 //清除子中断请求 SUBSRCPND |= (1<<9); //INT_TC[9]:0 //清除中断源请求 SRCPND |= (1<<31); //INT_ADC[31]:0 //清除中断请求 INTPND |= (1<<31); //INT_ADC[31]:0 //等待按下中断 ADCTSC = (0<<8)|(1<<7)|(1<<6)|(1<<4)|(0x3<<0); //UD_SEN[8]:0, XY_PST[1:0]:0b11 } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术