⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 touch_screen.c

📁 os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm
💻 C
字号:
/* *	ApOS (Another Project software for s3c2410) *	 *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License version 2 as *	published by the Free Software Foundation. *			 *						Copyright caiyuqing * */#include "../include/s3c2410/s3c2410.h"#include "../include/s3c2410/touch_screen.h"#include "../include/s3c2410/cpu.h"#include "../include/s3c2410/lcd.h"#include "../include/kernel/irq.h"#include "../include/kernel/gui.h"#define ITERATION 5extern irq_ptr irq_rotunie[32];void touchsrc_interrupt_routine(struct cpu_registers *regs);struct touchsrc_ctrl_object touchsrc_ctrl_object;unsigned int x_pos,y_pos;unsigned int pos_init=0;struct point p;void touchscreen_ctrl_obj_init(struct touchsrc_ctrl_object *tsco){	tsco->adc_con	=&rADCCON;	tsco->adc_tsc	=&rADCTSC;	tsco->adc_dly	=&rADCDLY;	tsco->adc_dat0	=&rADCDAT0;	tsco->adc_dat1	=&rADCDAT1;}void touchsrc_delay(unsigned short delay_val){	*touchsrc_ctrl_object.adc_dly	=delay_val;}void touchsrc_set_prescaler(unsigned short pres_val){	unsigned short adc_con	=*touchsrc_ctrl_object.adc_con;	adc_con	&=~(0x000F<<6);	adc_con	=(1<<14)|(pres_val<<6)|(0<<3)|(0<<2)|(0<<1)|(0);	*touchsrc_ctrl_object.adc_con	=adc_con;}void touchsrc_con_init(){	touchsrc_delay(8000);	*touchsrc_ctrl_object.adc_con=(1<<14)|(49<<6)|(0<<3)|(0<<2)|(0<<1)|(0);	*touchsrc_ctrl_object.adc_tsc=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);	irq_rotunie[INT_ADC]=touchsrc_interrupt_routine;}void wait_interrupt_mode(){	*touchsrc_ctrl_object.adc_tsc=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);}void auto_conversion_mode(){	*touchsrc_ctrl_object.adc_tsc=(1<<7)|(1<<6)|(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0);}void conversion(){	*touchsrc_ctrl_object.adc_con|=0x01;	while(*touchsrc_ctrl_object.adc_con & 0x1);       //Check if Enable_start is low	while(!(0x8000&*touchsrc_ctrl_object.adc_con));   //Check ECFLG}void touchsrc_interrupt_routine(struct cpu_registers *regs){	unsigned int i;	irq_sub_mask(SUB_INT_TC,IRQ_MASK);	irq_sub_mask(SUB_INT_ADC,IRQ_MASK);	auto_conversion_mode();	conversion();	        if(pos_init<1)        {        	p.x = (0x3ff&*touchsrc_ctrl_object.adc_dat0);		p.y = (0x3ff&*touchsrc_ctrl_object.adc_dat1);		pos_init++;		printk("X, Y Position is (%04d , %04d)\n", p.x,p.y);		        }	else	{		x_pos = (0x3ff&*touchsrc_ctrl_object.adc_dat0);		y_pos = (0x3ff&*touchsrc_ctrl_object.adc_dat1);		printk("X, Y Position is (%04d , %04d)\n", x_pos,y_pos);			}	wait_interrupt_mode();			clean_sub_src_pnd(SUB_INT_TC);			clean_sub_src_pnd(SUB_INT_ADC);		clean_src_pnd(INT_ADC);		clean_int_pnd(INT_ADC);		irq_sub_mask(SUB_INT_TC,IRQ_UNMASK);		irq_sub_mask(SUB_INT_ADC,IRQ_UNMASK);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -