2440裸机程序——触摸屏测试程序

发布者:SerendipityLove最新更新时间:2022-01-26 来源: eefocus关键字:裸机程序  触摸屏 手机看文章 扫描二维码
随时随地手机看文章

工程当中需要添加 S3C2440A.s ;2440lib.c;main.c;touchpanel.c这四个程序。


主程序:


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

* File name: main.c

* Author: ZXL 

* Description: 通过中断方式,返回触摸屏上某触点的X,Y坐标,并用串口打印出来

* History: 2013.5.10

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


#include "def.h"

#include "option.h"

#include "2440addr.h"     

#include "2440lib.h"


/*  

void dely(U32 tt) //本程序使用中断方式查询,故不需要延时函数

{

   U32 i;

   for(;tt>0;tt--)

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

}

*/


void init()

{

U32 i;

U8 key;

U32 mpll_val=0;

    i = 2 ; 

switch ( i ) //设置2440的时钟频率

{

case 0:  //200

key = 12;

mpll_val = (92<<12)|(4<<4)|(1);

break;

case 1:  //300

key = 13;

mpll_val = (67<<12)|(1<<4)|(1);

break;

case 2:  //400

key = 14;

mpll_val = (92<<12)|(1<<4)|(1);

break;

case 3:  //440!!!

key = 14;

mpll_val = (102<<12)|(1<<4)|(1);

break;

default:

key = 14;

mpll_val = (92<<12)|(1<<4)|(1);

break;

}

//MDIV=92,PDIV=1,SDIV=1 通过配置MPLLCON,MPLL确定,即FCLK=400MHZ确定

ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);

ChangeClockDivider(key, 12);   //FCLK:HCLK:PCLK = 1:1/4:1/8 =400M:100M:50M

    

Port_Init();

  

Uart_Init(0,115200);

    Uart_Select(0);   

Uart_Printf("n ADC Test!!!n"); 

}  

   

int main(int argc, char **argv)

{

init();  //系统频率、端口、串口初始化

    touchpanel_init(); //触摸屏初始化    

    while(1);

return 0;   

}








触摸屏程序:




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

* File name: touchpanel.c

* Author: ZXL 

* Description: 通过中断方式,返回触摸屏上某触点的X,Y坐标,并用串口打印出来

* History: 2013.5.10

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



#include "def.h"

#include "option.h"

#include "2440addr.h"     

#include "2440lib.h" 

#define ADC_FREQ 2500000 //AD转换频率选为2.5MHZ 

U32  preScaler; //设置AD为多少分频  

U32  count = 0;

U32  xdata,ydata;

   

/*  

void delay(int times) //本程序使用中断方式查询,故不需要延时函数

{

    int i,j;

    for(i=0;i       for(j=0;j<400;j++);

}

*/



void __irq ADC_Auto_ISR()

{   

    U32 saveAdcdly;

    /**************** stylus down ************************/

    /*检测子中断源,判断是否是触摸屏(INT_TC)中断,且触摸笔按下*/

    if(rSUBSRCPND & (BIT_SUB_TC))   //检查是否完成了中断位ADC

    {

if( !(rADCDAT0&0x8000))    Uart_Printf("n触摸笔按下!n");

else              Uart_Printf("n触摸笔提起!n"); 

    }

    

    rADCTSC |= (1<<3)|(1<<2); /*XP上拉无效,自动连续X,Y坐标转换*/

    saveAdcdly=rADCDLY;

    rADCDLY=40000;     //正常转换模式延时 (1/50M)*40000=0.8ms


rADCCON |= 0x1;                /*设置AD开始转换*/

    while(rADCCON & 0x1); //检查AD转换是否已经开始       

while(!(rADCCON & 0x8000));  //等待AD转换结束 

while(!(rSRCPND & 0x80000000));  //检查AD中断标志位是否产生中断请求  


xdata=(rADCDAT0&0x3ff);  /*获取X,Y坐标*/

    ydata=(rADCDAT1&0x3ff);

    

    ClearSubPending(BIT_SUB_TC);   //清中断

    //ClearPending(BIT_ADC);

    rSRCPND = 0x80000000;

rINTPND = 0x80000000;   



    EnableSubIrq(BIT_SUB_TC);  //使能中断

    //EnableIrq(BIT_ADC);

    rINTMSK = 0x7fffffff;  



    /**************** stylus up **************************/

/*设置触摸屏为等待中断模式,等待触摸笔抬起*/

    rADCTSC =0xd3;     //设置为等待中断模式  Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En

rADCTSC=rADCTSC|(1<<8);  //检查光标提起中断信号


while(1)  //检查抬笔状态

{

if(rSUBSRCPND & (BIT_SUB_TC)) //抬笔时再次触发中断

{

Uart_Printf("触摸笔提起!n");

break; 

}

Uart_Printf("count=%3d , XP=%4d, YP=%4dn", count++, xdata, ydata);  


rADCDLY=saveAdcdly;  

    rADCTSC =0xd3;    /*设置触摸屏为等待中断模式,等待下次触摸笔按下*/

    

ClearSubPending(BIT_SUB_TC);    //清中断

    //ClearPending(BIT_ADC);

    rSRCPND = 0x80000000;

rINTPND = 0x80000000;



    EnableSubIrq(BIT_SUB_TC); //使能中断

    //EnableIrq(BIT_ADC);

    rINTMSK = 0x7fffffff;

}



void touchpanel_init()   /*触摸屏初始化*/

{   

    rADCDLY=50000;                  //正常转换模式延迟 (1/3.6864M)*50000=13.56ms



preScaler = ADC_FREQ;   /*设置分频时钟*/

Uart_Printf("n AD转换频率为:%dHZn",preScaler);

preScaler = 50000000/ADC_FREQ - 1; //PCLK=50M  设置AD分频系数,最大频率为2.5MHz

Uart_Printf("n AD分频系数PRSCVL为:%dn",preScaler);    

    rADCCON = (1<<14)|(preScaler<<6); //ADCPRS En,PRSCVL  

/*设置触摸屏为等待中断模式,等待触摸笔被按下*/

    rADCTSC=0xd3;   //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En

    Uart_Printf("n ADC touch screen test!n");

   

    ClearSubPending(BIT_SUB_TC);      /*清中断*/

    //ClearPending(BIT_ADC);

    rSRCPND = 0x80000000;  

rINTPND = 0x80000000; 



    EnableSubIrq(BIT_SUB_TC); //使能中断

    //EnableIrq(BIT_ADC);

    rINTMSK = 0x7fffffff;



    pISR_ADC = (U32)ADC_Auto_ISR;  //将中断执行函数如入地址赋给INT_TC中断

}


关键字:裸机程序  触摸屏 引用地址:2440裸机程序——触摸屏测试程序

上一篇:2440裸机程序——AD转换实验
下一篇:2440裸机程序——串口收发数据

推荐阅读最新更新时间:2024-11-16 20:49

触摸屏在S3C2410上的应用实例
摘要:给出S3C2410上触摸屏的实现原理、硬件结构和软件程序;对软件进行优化,改进软件滤波的实现方法。其算法使用C语言实现,可移植到任何操作系统的触摸屏驱动程序中。 关键词:触摸屏 S3C2410 滤波 引言 随着个人数字助理(PDA)、瘦容户机等的普及,触摸屏作为终端与用户交互的媒介,在我们的生活中使用得越来普遍。触摸屏分为电阻式、电容式、声表面波式和红外线扫描式等类型,使用得最多的是4线电阻式触摸屏。 本文以三星公司ARM9内核芯片S3C2410触摸屏接口为基础,通过外接4线电阻式触摸屏构成硬件基础。在此基础上,开发了触摸屏面图板程序。 1 触摸屏原理 S3C2410接4线电阻式触摸屏的电路原理如图1所示。整个触
[应用]
制作 micro2440开机Logo for Linux
第一步需要我们做的是完善Linux的LCD驱动,这部分网上的资料很多,而且可以参考友善的手册,这里就不再赘述了。 下面我们需要做的是制作logo 根据友善提供的资料 方法一: 开机图片, 它对应的文件其实就是 linux-2.6.29/drivers/video/logo/linux_logo_clut224.ppm 该文件是一个特殊格式的图像文件,有很多方法可以把普通的图片转换为 logo 文件, 最常用的就是netpbm 工具组。 “netpbm”是一组命令行的工具,它可以转换很多格式的图片,在此以png 格式为例 介绍一下如何把普通的PNG 文件转换为我们需要的Linux LOGO 图片: 假定我们要转换的文件名为 linu
[单片机]
基于C8051F021和ADS7846的触摸屏系统设计
  0 引言   随着现代电子产品设计技术的不断发展,电子产品的设计,尤其是人机交互界面的设计越来越趋向于人性化。触摸屏凭借其独特的操作特性,应用日益广泛,它配合微控制器使用,能使嵌入式设备或手持式设备具有更加良好的人机交互界面,操作更加方便快捷。本文给出了一个基于C8051F021单片机和ADS7846 触摸屏控制器的触摸屏控制系统的设计方法。   1 触摸屏工作原理   触摸屏有电阻式、电容式、红外线式、表面声波式等多种。其中电阻式触摸屏是目前应用较为广泛的一种,可分为四线、五线、七线等几类。其中四线制电阻式触摸屏采用的是四线电阻模拟量技术,即两个阻性层工作时,每层均加有5 V恒定电压,一个竖直方向,一个水平方向,含四根
[单片机]
触摸屏在工控自动化系统中的应用
引言   捻线机是玻璃纤维生产线上的关键设备之一,捻线机的平稳运转以及适应生产工艺的多样化是生产线的必要条件,工控自动化是满足这些条件的必要保障。因此,控制系统是玻璃纤维捻线机关键技术的重要环节之一。传统的生产设备由于老化或者自动化程度较低,不能满足行业发展的需要,必须对其进行技术改造。   用PLC做控制系统核心,成本低、稳定性高,程序编写和调试也比较方便。但PLC在人机对话、故障判断、在线修改等方面有些不便,需要对编程非常熟悉的专业人员进行操作。并且,想要直观地了解生产过程和监控信号的动态变化必须选择一个上位机来配合PLC,才能组成较好的自动控制系统。因此,本系统采用触摸屏与PLC通信,共同组成生产过程的自动控制系统。
[工业控制]
<font color='red'>触摸屏</font>在工控自动化系统中的应用
DSP芯片与触摸屏的接口控制
    摘要: 简述了液晶触屏控制产品的工作原理以及用于触摸屏控制的专用芯征ADS7843的工作原理。无线数字扩频通信平台是无线扩频通信的一种开放式平台,在此基础上增加液晶触摸屏控制,可实现文字和图形的编辑无线传送,使该产品用途更加广泛。     关键词: 电阻式触摸屏  DSP  ADS7843 以DSP(数字信号处理)芯征和FPGA(现场可编程逻辑门阵列)为核心的无线数字扩频通信平台是无线扩频通信的一个开放式平台,可用于无线接入、无线图像和音频传送、移动INTERNET、精确区域定位LPS、智能遥控探测等高科技领域。我们在此基础上增加了液晶显示和触摸控制,从而实现文字和图形信息的编辑和无线传送,使该产品用
[工业控制]
以S3C2440为核心的嵌入式温室环境监测系统设计
温室生产作为高效、高科技含量的大规模生产方式已经成为世界农业的发展趋势。温室设施的自动监测和控制技术可以为农作物创造良好的生长环境,节约人力成本,提高农作物的产量,因此需要开发与温室相关的自动化技术,以降低运行成本、提高效率、实现环境的精确控制。我国目前的温室没施综合监测水平不高,控制能力比较差,带有综合环境自动调节的高科技温室主要从国外引进。笔者开发了以S3C2 440为核心的嵌入式环境监测系统可以完成温室环境参数的监测和收集,同时通过输出机构实时控制温室环境以达到温室监测和控制智能化的目的,具有精度高,智能控制等优点。 软件工程领域最重要的、具有划时代意义成果之一的就是统一建模语言UML(Unified Modeling
[单片机]
以S3C<font color='red'>2440</font>为核心的嵌入式温室环境监测系统设计
【ARM】s3c2440之gpio按键控制
功能 通过GPIO,实现按键1点亮LED1,按键2点亮LED2…… 说明 1)因为2440的按键只涉及行,所以在扫描按键时比2410简单了很多 2)在进行移位操作之前,必须进行数据寄存器的初始化,否则会出错(硬件特性) 源码 /***************************************************************************** *****函数名:main() *****功 能:通过GPIO,实现按键1点亮LED1,按键2点亮LED2 *****说 明: *********************************************************
[单片机]
TQ2440按键中断
有几点需要注意: 1、需要调用MMU函数,实现内存的映射; 2、在中断触发跳入中断处理函数后,首先要清除SRCPND和INTPND相应的位,如果用到次级中断源,如这里用到了EINT4_7中的EINT4,就要清除EINTPEND相应的位。一般来说,应该先清除次级中断源相应的位,再清除中断源,否则中断源会发生多次中断。在完成清除后再进行具体的处理。 #include def.h #include option.h #include 2440addr.h #include 2440lib.h #include 2440slib.h #include mmu.h #define LED1 (1 5) //must be (
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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