亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? s3c2410x_touch.cpp

?? MagicARM2410的BSP包,增加了AD,CAN,PCCARD驅動,串口驅動3個
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (c) 2002. Samsung Electronics, co. ltd  All rights reserved.

Module Name:  

Abstract:

    Platform dependent TOUCH initialization functions

rev:
    2002.4.27	: S3C2410 port (Hoyjoon Kim)

Notes: 
--*/


#include <windows.h>
#include <types.h>
#include <memory.h>
#include <nkintr.h>
#include <tchddsi.h>
#include <nkintr.h>

#include <s3c2410x.h>

#define PUBLIC		
#define PRIVATE							static

// OS Timer 3 is used to sample points while the pen is down.
// Timer frequency is 1/2 * PCLK with 0 prescale value.
//
#define TIMER3_DIVIDER                  2
#define TIMER3_PRESCALE                 0

//#define	TSP_SAMPLE_NUM				4 
#define	TSP_SAMPLE_NUM					3

#define TSP_SAMPLE_RATE_LOW				100
#define TSP_SAMPLE_RATE_HIGH			100

#define ADCPRS							21

#define TOUCH_MAX_X						1000
#define TOUCH_MIN_X						30
#define TOUCH_MAX_Y						980
#define TOUCH_MIN_Y						30

#define	FILTER_LIMIT					9


#define TSP_MINX						30							// modified for MagicARM2410
#define TSP_MINY						80

#define TSP_MAXX						925
#define TSP_MAXY						960

#define TSP_CHANGE						15
#define TSP_INVALIDLIMIT				40


//#define TSP_LCDX						(LCD_XSIZE_TFT * 4)
//#define TSP_LCDY						(LCD_YSIZE_TFT * 4)

#define LCD_XSIZE_TFT_USER				(640)	
#define LCD_YSIZE_TFT_USER				(480)

#define TSP_LCDX						(LCD_XSIZE_TFT_USER * 4)	// modified for MagicARM2410
#define TSP_LCDY						(LCD_YSIZE_TFT_USER * 4)


DWORD gIntrTouch        = SYSINTR_NOP;
DWORD gIntrTouchChanged = SYSINTR_NOP;


volatile unsigned short xbuf[10], ybuf[10];


// Default S3C2410x PCLK frequency.  We try to obtain the actual value from
// the OAL (via an IOCTL) during initialization.  FCLK is typically 203MHz
// and the typical PCLK divisor is 4.
//
UINT32 g_s3c2410_pclk       = (203000000 / 4);

// Timer 3 clock frequency.
//
UINT32 g_timer3_freq        = 0;

// Number of Timer 3 ticks in a pen-down sampling interval.
//
UINT32 g_timer3_sampleticks = 0;

extern "C" const int MIN_CAL_COUNT   = 1;

PRIVATE INT TSP_CurRate = TSP_SAMPLE_RATE_HIGH;
//PRIVATE INT TSP_CurRate = 0;


PRIVATE volatile S3C2410X_IOPORT_REG * v_pIOPregs;
PRIVATE volatile S3C2410X_ADC_REG * v_pADCregs;
PRIVATE volatile S3C2410X_INTR_REG * v_pINTregs;
PRIVATE volatile S3C2410X_PWM_REG * v_pPWMregs;

PRIVATE BOOL     bTSP_DownFlag;

VOID    TSP_VirtualFree(VOID);
BOOL    TSP_VirtualAlloc(VOID);

PRIVATE PVOID
TSP_RegAlloc(PVOID addr, INT sz)
{
    PVOID reg;

    reg = (PVOID)VirtualAlloc(0, sz, MEM_RESERVE, PAGE_NOACCESS);

    if (reg)
    {
        if (!VirtualCopy(reg, (PVOID)((UINT32)addr >> 8), sz, PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE ))
        {
            VirtualFree(reg, 0, MEM_RELEASE);
            reg = NULL;
        }
    }

    return (reg);
}


PRIVATE BOOL
TSP_VirtualAlloc(VOID)
{
    BOOL r = FALSE;

    RETAILMSG(0,(TEXT("::: TSP_VirtualAlloc()\r\n")));

    do
    {
        v_pIOPregs = (volatile S3C2410X_IOPORT_REG *)TSP_RegAlloc((PVOID)S3C2410X_BASE_REG_PA_IOPORT, sizeof(S3C2410X_IOPORT_REG));
        if (v_pIOPregs == NULL)
        {
            ERRORMSG(1,(TEXT("For IOPreg: VirtualAlloc failed!\r\n")));
            break;
        }

        v_pADCregs = (volatile S3C2410X_ADC_REG *)TSP_RegAlloc((PVOID)S3C2410X_BASE_REG_PA_ADC, sizeof(S3C2410X_ADC_REG));
        if (v_pADCregs == NULL)
        {
            ERRORMSG(1,(TEXT("For ADCreg: VirtualAlloc failed!\r\n")));
            break;
        }

        v_pINTregs = (volatile S3C2410X_INTR_REG *)TSP_RegAlloc((PVOID)S3C2410X_BASE_REG_PA_INTR, sizeof(S3C2410X_INTR_REG));
        if (v_pADCregs == NULL)
        {
            ERRORMSG(1,(TEXT("For INTregs: VirtualAlloc failed!\r\n")));
            break;
        }

        v_pPWMregs = (volatile S3C2410X_PWM_REG *)TSP_RegAlloc((PVOID)S3C2410X_BASE_REG_PA_PWM, sizeof(S3C2410X_PWM_REG));
        if (v_pPWMregs == NULL)
        {
            ERRORMSG(1,(TEXT("For PWMregs: VirtualAlloc failed!\r\n")));
            break;
        }

        r = TRUE;
    } while (0);

    if (!r)
    {
        TSP_VirtualFree();

        RETAILMSG(0,(TEXT("::: TSP_VirtualAlloc() - Fail\r\n")));
    }
    else
    {
        RETAILMSG(0,(TEXT("::: TSP_VirtualAlloc() - Success\r\n")));
    }


    return (r);
}

PRIVATE void
TSP_VirtualFree(VOID)
{
    RETAILMSG(0,(TEXT("::: TSP_VirtualFree()\r\n")));

    if (v_pIOPregs)
    {
        VirtualFree((PVOID)v_pIOPregs, 0, MEM_RELEASE);
        v_pIOPregs = NULL;
    }
    if (v_pADCregs)
    {
        VirtualFree((PVOID)v_pADCregs, 0, MEM_RELEASE);
        v_pADCregs = NULL;
    }
    if (v_pINTregs)
    {
        VirtualFree((PVOID)v_pINTregs, 0, MEM_RELEASE);
        v_pINTregs = NULL;
    }
    if (v_pPWMregs)
    {
        VirtualFree((PVOID)v_pPWMregs, 0, MEM_RELEASE);
        v_pPWMregs = NULL;
    }
}

PRIVATE VOID
TSP_SampleStart(VOID)
{
    DWORD tmp;

    tmp = v_pPWMregs->TCON & (~(0xf << 16));

    v_pPWMregs->TCON = tmp | (2 << 16);     /* update TCVNTB3, stop					*/
    v_pPWMregs->TCON = tmp | (9 << 16);     /* interval mode,  start				*/
}

PRIVATE VOID
TSP_SampleStop(VOID)
{
    v_pPWMregs->TCON &= ~(1 << 16);         /* Timer3, stop							*/
}


PRIVATE VOID
TSP_PowerOn(VOID)
{
    RETAILMSG(0,(TEXT("::: TSP_PowerOn()\r\n")));

    /* Use TSXM, TSXP, TSYM, TSYP			*/
    v_pIOPregs->GPGCON |=  ((0x3 << 30) | (0x3 << 28) | (0x3 << 26) | (0x3 << 24));

    //v_pADCregs->ADCDLY = 50000; 
	v_pADCregs->ADCDLY = 2000; 

    v_pADCregs->ADCCON =    (1      << 14) |    /* A/D Converter Enable					*/
                            (ADCPRS <<  6) |    /* Prescaler Setting					*/
                            (7      <<  3) |    /* Analog Input Channel : 0				*/ 
                            (0      <<  2) |    /* Normal Operation Mode				*/
                            (0      <<  1) |    /* Disable Read Start					*/
                            (0      <<  0);     /* No Operation							*/

    v_pADCregs->ADCTSC =    (0      <<  8) |    /* UD_Sen								*/
                            (1      <<  7) |    /* YMON  1 (YM = GND)					*/
                            (1      <<  6) |    /* nYPON 1 (YP Connected AIN[n])		*/
                            (0      <<  5) |    /* XMON  0 (XM = Z)						*/
                            (1      <<  4) |    /* nXPON 1 (XP = AIN[7])				*/
                            (0      <<  3) |    /* Pull Up Disable						*/
                            (0      <<  2) |    /* Normal ADC Conversion Mode			*/
                            (3      <<  0);     /* Waiting Interrupt					*/


    v_pINTregs->INTSUBMSK  &= ~(1<<IRQ_SUB_TC);

    //v_pPWMregs->TCFG1  &= ~(0xf << 12);     /* Timer3's Divider Value				*/
    //v_pPWMregs->TCFG1  |=  (0   << 12);     /* 1/2									*/
    //v_pPWMregs->TCNTB3  = g_timer3_sampleticks;       /* Interrupt Frequency					*/

    v_pPWMregs->TCFG1  &= ~(0xf << 12);     /* Timer3's Divider Value				*/
    v_pPWMregs->TCFG1  |=  (1   << 12);     /* 1/4									*/

#define		TOUCH_TIMER_DIVIDER		4

	v_pPWMregs->TCNTB3 = (10 * (g_s3c2410_pclk / (((v_pPWMregs->TCFG0 >> 8) & 0xFF) + 1) / TOUCH_TIMER_DIVIDER)) / 1000;
	//RETAILMSG(1, (TEXT("v_pPWMregs->TCNTB3 is: 0x%x\r\n"), v_pPWMregs->TCNTB3));	
}

PRIVATE VOID
TSP_PowerOff(VOID)
{
    RETAILMSG(0,(TEXT("::: TSP_PowerOff()\r\n")));

    v_pINTregs->INTSUBMSK |= (1<<IRQ_SUB_TC);
}

PRIVATE BOOL
TSP_CalibrationPointGet(TPDC_CALIBRATION_POINT *pTCP)
{

    INT32   cDisplayWidth  = pTCP->cDisplayWidth;
    INT32   cDisplayHeight = pTCP->cDisplayHeight;

    int CalibrationRadiusX = cDisplayWidth  / 20;
    int CalibrationRadiusY = cDisplayHeight / 20;

    switch (pTCP -> PointNumber)
    {
    case    0:
        pTCP->CalibrationX = cDisplayWidth  / 2;
        pTCP->CalibrationY = cDisplayHeight / 2;
        break;

    case    1:
        pTCP->CalibrationX = CalibrationRadiusX * 2;
        pTCP->CalibrationY = CalibrationRadiusY * 2;
        break;

    case    2:
        pTCP->CalibrationX = CalibrationRadiusX * 2;
        pTCP->CalibrationY = cDisplayHeight - CalibrationRadiusY * 2;
        break;

    case    3:
        pTCP->CalibrationX = cDisplayWidth  - CalibrationRadiusX * 2;
        pTCP->CalibrationY = cDisplayHeight - CalibrationRadiusY * 2;
        break;

    case    4:
        pTCP->CalibrationX = cDisplayWidth - CalibrationRadiusX * 2;
        pTCP->CalibrationY = CalibrationRadiusY * 2;
        break;

    default:
        pTCP->CalibrationX = cDisplayWidth  / 2;
        pTCP->CalibrationY = cDisplayHeight / 2;

        SetLastError(ERROR_INVALID_PARAMETER);
        return (FALSE);
    }

#if 0
    RETAILMSG(1, (TEXT("::: TSP_CalibrationPointGet()\r\n")));
    RETAILMSG(1, (TEXT("cDisplayWidth        : %4X\r\n"), cDisplayWidth     ));
    RETAILMSG(1, (TEXT("cDisplayHeight       : %4X\r\n"), cDisplayHeight    ));
    RETAILMSG(1, (TEXT("CalibrationRadiusX   : %4d\r\n"), CalibrationRadiusX));
    RETAILMSG(1, (TEXT("CalibrationRadiusY   : %4d\r\n"), CalibrationRadiusY));
    RETAILMSG(1, (TEXT("pTCP -> PointNumber  : %4d\r\n"), pTCP->PointNumber));
    RETAILMSG(1, (TEXT("pTCP -> CalibrationX : %4d\r\n"), pTCP->CalibrationX));
    RETAILMSG(1, (TEXT("pTCP -> CalibrationY : %4d\r\n"), pTCP->CalibrationY));

	RETAILMSG(1, (TEXT("TSP_LCDX : %d\r\n"), TSP_LCDX));
	RETAILMSG(1, (TEXT("TSP_LCDY : %d\r\n"), TSP_LCDY));
#endif

    return (TRUE);
}

PRIVATE void
TSP_TransXY(INT *px, INT *py)
{
	RETAILMSG(1, (TEXT("before change: px : %d\r\n"), *px));
	RETAILMSG(1, (TEXT("before change: py : %d\r\n"), *py));

    *px = (*px - TSP_MINX) * TSP_LCDX / (TSP_MAXX - TSP_MINX);
    *py = (*py - TSP_MINY) * TSP_LCDY / (TSP_MAXY - TSP_MINY);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品素人视频| 国产成人av一区二区三区在线| 奇米色777欧美一区二区| 麻豆91精品91久久久的内涵| 国产成人aaaa| 91麻豆精品国产91久久久久久久久 | 日一区二区三区| 成人国产精品免费观看动漫| 日韩欧美精品在线| 一区二区三区在线观看网站| 国产不卡高清在线观看视频| 日韩亚洲欧美中文三级| 亚洲免费成人av| 成人av电影在线| 国产亚洲精品aa| 国产一区二区三区香蕉| 日韩欧美在线123| 日本中文字幕一区| 91久久一区二区| 亚洲女人小视频在线观看| caoporn国产一区二区| 久久久久久综合| 国产美女久久久久| 久久综合色综合88| 蜜臀av国产精品久久久久| 7777精品伊人久久久大香线蕉超级流畅| 国产精品无圣光一区二区| 国产精品综合二区| 久久久久国产精品免费免费搜索| 美国欧美日韩国产在线播放| 欧美丰满一区二区免费视频 | 色播五月激情综合网| 中文字幕日韩一区| 成人激情av网| 亚洲色大成网站www久久九九| 不卡在线观看av| 中文字幕一区二区视频| 99久久免费国产| 亚洲视频香蕉人妖| 欧美综合亚洲图片综合区| 亚洲一区二区三区美女| 欧美高清视频一二三区 | 中文字幕一区二区在线观看| 99久久99久久综合| 中文字幕日韩av资源站| 在线观看亚洲a| 日韩电影免费一区| 精品伦理精品一区| caoporn国产一区二区| 亚洲美女少妇撒尿| 欧美日韩综合在线免费观看| 七七婷婷婷婷精品国产| 久久综合久久综合久久综合| 粉嫩aⅴ一区二区三区四区| 国产精品久久福利| 色哟哟欧美精品| 日本不卡一区二区三区高清视频| 久久久久久久av麻豆果冻| 99视频热这里只有精品免费| 亚洲免费看黄网站| 日韩视频免费观看高清完整版 | 91日韩一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 欧美日韩国产经典色站一区二区三区| 奇米精品一区二区三区四区| 日本一区二区三区视频视频| 在线免费精品视频| 精品一区二区久久| 亚洲日本乱码在线观看| 日韩三级视频在线观看| 国产91综合网| 日韩福利电影在线| 欧美高清一级片在线观看| 91福利在线播放| 国产在线播放一区二区三区| 亚洲视频在线观看一区| 精品动漫一区二区三区在线观看| 99久久99精品久久久久久| 久久精品国产成人一区二区三区| 中文字幕精品一区二区精品绿巨人| 色噜噜狠狠色综合中国| 国产成人精品亚洲午夜麻豆| 一区二区三区中文字幕精品精品| 日韩三级视频在线观看| 色嗨嗨av一区二区三区| 国产69精品久久久久777| 丝袜诱惑亚洲看片| 最新不卡av在线| 日韩亚洲欧美在线| 欧美日韩一区二区三区不卡| 国产成人一级电影| 久久99久久久欧美国产| 亚洲国产乱码最新视频 | 精品久久久久av影院 | 久久亚洲二区三区| 337p亚洲精品色噜噜噜| 一本到不卡免费一区二区| 粉嫩高潮美女一区二区三区 | 日韩精品一区二区三区在线播放| 在线观看成人小视频| 成人黄色在线网站| 风流少妇一区二区| 国内国产精品久久| 奇米影视一区二区三区小说| 天天影视涩香欲综合网| 亚洲乱码国产乱码精品精的特点 | 麻豆专区一区二区三区四区五区| 亚洲综合久久久久| 伊人开心综合网| 亚洲欧美日韩国产成人精品影院 | 国产日韩欧美一区二区三区综合| 欧美一区二区三区四区在线观看| 欧美久久一二三四区| 91精品国产综合久久精品性色| 欧美日韩精品欧美日韩精品一| 欧美日韩久久久| 欧美日韩综合色| 91精品国产综合久久久久久久| 日韩一区国产二区欧美三区| 日韩欧美三级在线| 久久免费看少妇高潮| 久久先锋资源网| 亚洲视频一区二区在线| 一区二区三区高清不卡| 亚洲成人av一区二区三区| 日韩高清中文字幕一区| 韩国av一区二区三区在线观看| 国精品**一区二区三区在线蜜桃| 国产一区在线看| 成人黄页毛片网站| 欧美熟乱第一页| 欧美一区二区成人6969| 国产日韩欧美精品一区| 国产精品色在线观看| 亚洲伊人伊色伊影伊综合网| 三级影片在线观看欧美日韩一区二区| 伦理电影国产精品| 高潮精品一区videoshd| 在线精品视频免费播放| 欧美一级欧美一级在线播放| 国产亚洲综合av| 亚洲综合精品久久| 久久99国产精品免费网站| 精品美女被调教视频大全网站| 欧美网站大全在线观看| 欧美电影精品一区二区| 国产午夜精品福利| 久久噜噜亚洲综合| 亚洲精品国产无天堂网2021| 一区二区在线观看不卡| 亚洲第一电影网| 久久精品国产99久久6| 97精品超碰一区二区三区| 欧美日韩综合在线免费观看| 欧美一区二区三区人| 亚洲欧美偷拍另类a∨色屁股| 国产激情精品久久久第一区二区| 亚洲人成在线播放网站岛国| 青青草原综合久久大伊人精品 | 日韩视频中午一区| 国产精品国产三级国产aⅴ无密码| 亚洲国产cao| 不卡的av电影| 日韩视频免费观看高清完整版在线观看 | 国产一区二区三区av电影 | 亚洲五月六月丁香激情| 精品亚洲porn| 亚洲香肠在线观看| 国内精品嫩模私拍在线| 国产欧美视频在线观看| 亚洲男同1069视频| 91麻豆精品国产无毒不卡在线观看| 欧美精品一区二区久久婷婷| 亚洲影视在线播放| 欧美三级日本三级少妇99| 制服丝袜亚洲播放| 亚洲精品乱码久久久久久黑人| 91小视频免费观看| 日韩欧美高清一区| 亚洲人成网站精品片在线观看| 奇米精品一区二区三区在线观看| 91免费版pro下载短视频| 久久久www成人免费无遮挡大片| 日韩精品一区第一页| 一本到不卡免费一区二区| 国产精品欧美久久久久一区二区| 精品写真视频在线观看| 色婷婷精品久久二区二区蜜臂av| 亚洲免费av在线| 日韩三区在线观看| 日韩欧美国产综合在线一区二区三区| 一片黄亚洲嫩模| 欧美一级电影网站| 国产成+人+日韩+欧美+亚洲| 亚洲天堂免费在线观看视频| 在线观看一区二区视频| 日韩成人免费电影| 国产色产综合色产在线视频| 粉嫩av亚洲一区二区图片| 亚洲一区日韩精品中文字幕|