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

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

?? tsadcc.c

?? tft and touch program for at91sam9263ek,編程環境為keil
?? C
字號:
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#include <board.h>

#ifdef AT91C_BASE_TSADC

#include <utility/trace.h>
#include <utility/assert.h>

//------------------------------------------------------------------------------
//         Local variables
//------------------------------------------------------------------------------

/// TSADC clock frequency in Hz.
static unsigned int lAdcclk = 0;

//------------------------------------------------------------------------------
//         Global functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Sets the operating mode of the TSADCC peripheral. The mode value can be
/// one of the following:
/// - AT91C_TSADC_TSAMOD_ADC_ONLY_MODE
/// - AT91C_TSADC_TSAMOD_TS_ONLY_MODE
/// \param mode  Desired mode for the TSADCC.
//------------------------------------------------------------------------------
void TSADCC_SetOperatingMode(unsigned int mode)
{
    SANITY_CHECK(  (mode == AT91C_TSADC_TSAMOD_ADC_ONLY_MODE)
                 | (mode == AT91C_TSADC_TSAMOD_TS_ONLY_MODE));
                 
    AT91C_BASE_TSADC->TSADC_MR = (AT91C_BASE_TSADC->TSADC_MR
                                  & ~AT91C_TSADC_TSAMOD)
                                 | mode;
}

//------------------------------------------------------------------------------
/// Enables or disables the low resolution precision on the TSADC.
/// \param enable  If true, low resolution (8 bit) is used; otherwise the TSADC
///                will use a 10-bit resolution.
//------------------------------------------------------------------------------
void TSADCC_SetLowResolution(unsigned char enable)
{
    if (enable) {
    
        AT91C_BASE_TSADC->TSADC_MR |= AT91C_TSADC_LOWRES;
    }
    else {
    
        AT91C_BASE_TSADC->TSADC_MR &= ~AT91C_TSADC_LOWRES;
    }
}

//------------------------------------------------------------------------------
/// Enables or disable SLEEP mode on the TSADC.
/// \param enable  If true, the TSADC is put into sleep mode; in normal mode
///                otherwise.
//------------------------------------------------------------------------------
void TSADCC_SetSleepMode(unsigned char enable)
{
    if (enable) {
    
        AT91C_BASE_TSADC->TSADC_MR |= AT91C_TSADC_SLEEP;
    }
    else {
    
        AT91C_BASE_TSADC->TSADC_MR &= ~AT91C_TSADC_SLEEP;
    }
}

//------------------------------------------------------------------------------
/// Enables or disables pen detection on the TSADC.
/// \param enable  If true, pen detection is enabled; otherwise it is disabled.
//------------------------------------------------------------------------------
void TSADCC_SetPenDetect(unsigned char enable)
{
    if (enable) {
    
        AT91C_BASE_TSADC->TSADC_MR |= AT91C_TSADC_PENDET;
    }
    else {
        
        AT91C_BASE_TSADC->TSADC_MR &= ~AT91C_TSADC_PENDET;
    }
}

//------------------------------------------------------------------------------
/// Sets the TSADC clock to the desired frequency. The prescaler is calculated
/// by this function so the resulting frequency is equal or inferior to the
/// desired one.
/// \param adcclk  Desired ADC clock frequency in Hz.
/// \param mck  Master clock frequency in Hz.
//------------------------------------------------------------------------------
void TSADCC_SetAdcFrequency(unsigned int adcclk, unsigned int mck)
{
    unsigned int prescal;
    
    // Formula for PRESCAL is:
    // PRESCAL = (MCK / (2 * ADCCLK)) + 1
    // First, we do the division, multiplied by 10 to get higher precision
    // If the last digit is not zero, we round up to avoid generating a higher
    // than required frequency.
    prescal = (mck * 5) / adcclk;
    if ((prescal % 10) > 0) {
    
        prescal = (prescal / 10);
    }
    else {
    
        SANITY_CHECK((prescal / 10) != 0);
        prescal = (prescal / 10) - 1;
    }
    SANITY_CHECK((prescal & ~0x3F) == 0);
    
    AT91C_BASE_TSADC->TSADC_MR = (  AT91C_BASE_TSADC->TSADC_MR
                                  & ~AT91C_TSADC_PRESCAL)
                                 | (prescal << 8);
                                 
    // Save clock frequency for further timing calculations
    lAdcclk = adcclk;
}

//------------------------------------------------------------------------------
/// Sets the TSADC startup time. This function relies on the ADCCLK frequency
/// that has been set using TSADCC_SetAdcFrequency(), so it must have been
/// called first.
/// \param time  Startup time in 祍econds.
//------------------------------------------------------------------------------
void TSADCC_SetStartupTime(unsigned int time)
{
    unsigned int startup;
    
    SANITY_CHECK(lAdcclk != 0);
        
    // Formula for STARTUP is:
    // STARTUP = (time x ADCCLK) / (1000000 x 8) - 1
    // Division multiplied by 10 for higher precision
    startup = (time * lAdcclk) / (800000);
    if ((startup % 10) > 0) {
    
        startup /= 10;
    }
    else {
    
        startup /= 10;
        if (startup > 0) {
        
            startup--;
        }
    }
    
    SANITY_CHECK((startup & ~0x7F) == 0);
    AT91C_BASE_TSADC->TSADC_MR = (  AT91C_BASE_TSADC->TSADC_MR
                                  & ~AT91C_TSADC_STARTUP)
                                 | (startup << 16);
}

//------------------------------------------------------------------------------
/// Sets the TSADC track and hold time. This function relies on the ADCCLK
/// frequency that has been set with TSADCC_SetAdcFrequency(), to it must be
/// called first.
/// This function also sets the track and hold time in the TSADC_TSR register.
/// \param time  Track and hold time in nanoseconds.
//------------------------------------------------------------------------------
void TSADCC_SetTrackAndHoldTime(unsigned int time)
{
    unsigned int shtim;
    
    SANITY_CHECK(lAdcclk != 0);
    
    // Formula for SHTIM:
    // SHTIM = (time x ADCCLK) / 1000000000 - 1
    // Since 1 billion is close to the maximum value for an integer, we first
    // divide ADCCLK by 1000 to avoid an overflow
    shtim = (time * (lAdcclk / 1000)) / 100000;
    if ((shtim % 10) > 0) {
    
        shtim /= 10;
    }
    else {
    
        shtim /= 10;
        if (shtim > 0) shtim--;
    }
    
    SANITY_CHECK((shtim & ~0xF) == 0);
    AT91C_BASE_TSADC->TSADC_MR = (  AT91C_BASE_TSADC->TSADC_MR
                                  & ~AT91C_TSADC_SHTIM)
                                 | (shtim << 24);
    AT91C_BASE_TSADC->TSADC_TSR = shtim << 24;
}

//------------------------------------------------------------------------------
/// Sets the TSADC debounce time. This function relies on the ADCCLK
/// frequency that has been set with TSADCC_SetAdcFrequency(), to it must be
/// called first.
/// \param time  Debounce time in nanoseconds (cannot be 0).
//------------------------------------------------------------------------------
void TSADCC_SetDebounceTime(unsigned int time)
{
    unsigned int divisor = 1000000000;
    unsigned int clock = lAdcclk;
    unsigned int pendbc = 0;
    unsigned int targetValue;
    unsigned int currentValue;
    
    SANITY_CHECK(lAdcclk != 0);
    SANITY_CHECK(time != 0);
    
    // Divide time & ADCCLK first to avoid overflows
    while ((divisor > 1) && ((time % 10) == 0)) {
    
        time /= 10;
        divisor /= 10;
    }
    while ((divisor > 1) && ((clock % 10) == 0)) {
    
        clock /= 10;
        divisor /= 10;
    }
    
    // Compute PENDBC value
    targetValue = time * clock / divisor;
    currentValue = 1;
    while (currentValue < targetValue) {
    
        pendbc++;
        currentValue *= 2;
    }
    
    SANITY_CHECK((pendbc & ~0xF) == 0);
    AT91C_BASE_TSADC->TSADC_MR = (  AT91C_BASE_TSADC->TSADC_MR
                                  & ~AT91C_TSADC_PENDBC)
                                 | (pendbc << 28);
}

//------------------------------------------------------------------------------
/// Sets the trigger mode of the TSADCC to one of the following values:
/// - AT91C_TSADC_TRGMOD_NO_TRIGGER
/// - AT91C_TSADC_TRGMOD_EXTERNAL_TRIGGER_RE
/// - AT91C_TSADC_TRGMOD_EXTERNAL_TRIGGER_FE
/// - AT91C_TSADC_TRGMOD_EXTERNAL_TRIGGER_AE
/// - AT91C_TSADC_TRGMOD_PENDET_TRIGGER
/// - AT91C_TSADC_TRGMOD_PERIODIC_TRIGGER
/// - AT91C_TSADC_TRGMOD_CONT_TRIGGER
/// \param mode  Trigger mode.
//------------------------------------------------------------------------------
void TSADCC_SetTriggerMode(unsigned int mode)
{
    SANITY_CHECK(((mode & ~AT91C_TSADC_TRGMOD) == 0)
                 | ((mode & AT91C_TSADC_TRGMOD) != 0x7));
    
    AT91C_BASE_TSADC->TSADC_TRGR = (AT91C_BASE_TSADC->TSADC_TRGR
                                    & ~AT91C_TSADC_TRGMOD)
                                   | mode;
}

//------------------------------------------------------------------------------
/// Sets the trigger period when using the TSADCC in periodic trigger mode.
/// As usual, this function requires TSADCC_SetAdcFrequency() to be called
/// before it.
/// \param period  Trigger period in nanoseconds.
//------------------------------------------------------------------------------
void TSADCC_SetTriggerPeriod(unsigned int period)
{
    unsigned int trgper;
    unsigned int divisor = 100000000;
    
    while ((period >= 10) && (divisor >= 10)) {
    
        period /= 10;
        divisor /= 10;
    }
    
    trgper = (period * lAdcclk) / divisor;
    if ((trgper % 10) > 0) {
    
        trgper /= 10;
    }
    else {
    
        trgper /= 10;
        if (trgper > 0) trgper--;
    }
    
    SANITY_CHECK((trgper & ~0xFFFF) == 0);
    AT91C_BASE_TSADC->TSADC_TRGR = (AT91C_BASE_TSADC->TSADC_TRGR
                                    & ~AT91C_TSADC_TRGPER)
                                   | (trgper << 16);
}

#endif //#ifdef AT91C_BASE_TSADC

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区在线观看| 一区二区中文字幕在线| 国产电影一区二区三区| 中文字幕一区二区三区在线观看 | 久久综合视频网| 粉嫩aⅴ一区二区三区四区| 日韩美女视频一区二区| 91精品国产综合久久精品图片 | 成人免费三级在线| 亚洲一区二区三区激情| xf在线a精品一区二区视频网站| 不卡一卡二卡三乱码免费网站| 亚洲高清免费观看高清完整版在线观看| 日韩午夜在线播放| 色婷婷精品大视频在线蜜桃视频| 麻豆91在线播放| 亚洲免费在线视频| 精品久久久久香蕉网| 在线观看亚洲精品视频| 大白屁股一区二区视频| 久久精品免费看| 午夜欧美在线一二页| 亚洲欧美偷拍卡通变态| 日韩精品一区二区三区蜜臀| 欧美在线不卡一区| 国产欧美va欧美不卡在线| 欧美一区午夜精品| 99亚偷拍自图区亚洲| 粉嫩在线一区二区三区视频| 蜜臀久久久99精品久久久久久| 一区二区三区在线视频观看| 国产精品婷婷午夜在线观看| 久久久精品一品道一区| 久久久久久久精| 久久久www免费人成精品| 欧美mv日韩mv亚洲| 国产精品视频免费| 蜜桃精品视频在线| 亚洲精品一二三| 久久久国产精华| 久久综合99re88久久爱| 在线不卡中文字幕| 欧美综合久久久| 99精品视频一区二区三区| 久久99久久久久久久久久久| 丝袜亚洲另类丝袜在线| 亚洲国产另类av| 亚洲第一精品在线| 亚洲一区二区三区四区在线观看 | 99久久久精品| 国产传媒欧美日韩成人| 国产中文一区二区三区| 国产一区二区主播在线| 久久99精品国产麻豆婷婷| 久久99国产精品免费网站| 久久蜜桃av一区二区天堂| 精品伦理精品一区| 欧美日韩电影在线| 91超碰这里只有精品国产| 欧美日韩成人高清| 欧美日韩一区国产| 日本一区二区动态图| 国产精品亲子乱子伦xxxx裸| 中文字幕制服丝袜成人av| 久久人人爽人人爽| 亚洲视频一二区| 香蕉成人啪国产精品视频综合网| 亚洲一区精品在线| 美脚の诱脚舐め脚责91| 国产风韵犹存在线视精品| 91免费观看国产| 欧美人动与zoxxxx乱| 精品免费日韩av| 一区二区三区毛片| 久久精品999| 国产成人aaa| 99re热视频精品| 日韩一区二区三区免费看| 国产亚洲人成网站| 一区二区三区中文在线观看| 一级女性全黄久久生活片免费| 美女视频黄 久久| 91亚洲国产成人精品一区二区三| 欧美亚洲愉拍一区二区| 久久综合久久综合久久| 国产精品久久久久久久岛一牛影视 | 免费在线观看日韩欧美| 69堂国产成人免费视频| 久久综合九色综合欧美98 | 久久99久久99| 94-欧美-setu| 欧美人动与zoxxxx乱| 国产精品青草综合久久久久99| 偷拍亚洲欧洲综合| 美国三级日本三级久久99| 色婷婷一区二区三区四区| 精品国产不卡一区二区三区| 一区二区在线观看不卡| 高清久久久久久| 日韩一区二区在线免费观看| 亚洲一区二区美女| 在线免费亚洲电影| 综合av第一页| 成人精品高清在线| 国产精品久久久久四虎| 亚洲美女区一区| 国产91丝袜在线播放0| 精品国产乱码久久久久久久久| 天堂蜜桃一区二区三区| 日本道免费精品一区二区三区| 亚洲女同一区二区| 色婷婷综合久久久久中文| 一区二区视频在线看| 在线国产亚洲欧美| 亚洲福中文字幕伊人影院| 色婷婷久久久久swag精品| 一区二区三区在线免费播放| a级精品国产片在线观看| 日韩精品乱码免费| 日韩欧美123| 国产精品一区免费在线观看| 国产日韩亚洲欧美综合| 成人h版在线观看| 一区二区三区日韩在线观看| 在线亚洲精品福利网址导航| 亚洲国产精品麻豆| 欧美伦理电影网| 另类小说欧美激情| 国产精品久久久久久久午夜片| 色综合天天做天天爱| 亚洲午夜影视影院在线观看| 91精品国产福利| 国产精品1区2区| 最新成人av在线| 欧美一级理论片| 成人福利视频网站| 午夜精品久久久久久久久| 国产午夜亚洲精品理论片色戒| eeuss影院一区二区三区 | 91丨porny丨国产入口| 亚洲成人精品一区二区| 精品三级av在线| 91日韩精品一区| 九九热在线视频观看这里只有精品| 国产精品萝li| 欧美xxxx在线观看| 欧美日韩在线三区| a级精品国产片在线观看| 青青青爽久久午夜综合久久午夜 | 丁香婷婷深情五月亚洲| 日韩激情一区二区| 亚洲日本中文字幕区| 精品久久人人做人人爰| 日韩女优av电影| 欧美色图激情小说| 成人美女在线观看| 国产高清久久久| 美女www一区二区| 亚洲影院在线观看| 国产精品午夜在线观看| 欧美一二三区在线| 欧美三级日韩在线| 欧美体内she精高潮| 91免费国产视频网站| 不卡高清视频专区| 国产一区二区在线观看免费| 日韩电影网1区2区| 日韩不卡在线观看日韩不卡视频| 亚洲一区二区偷拍精品| 一区二区三区不卡在线观看| 中文字幕巨乱亚洲| 国产精品色一区二区三区| 国产亚洲欧美一区在线观看| 精品日韩一区二区三区| 精品久久久久久最新网址| 久久亚洲欧美国产精品乐播| 欧美精品一区二| 中文字幕av一区二区三区高| 中文字幕亚洲不卡| 日韩视频免费直播| 国产毛片精品视频| 成人午夜精品一区二区三区| 成人久久视频在线观看| 91免费看片在线观看| 欧美日韩亚洲高清一区二区| 欧美疯狂性受xxxxx喷水图片| 欧美精品一区二区三区高清aⅴ | 欧美日韩一区二区三区在线| 欧美日本视频在线| 日韩精品中文字幕在线一区| 久久影视一区二区| 日韩毛片在线免费观看| 婷婷综合五月天| 国产乱码精品一品二品| 91在线你懂得| 成人网页在线观看| 欧美日精品一区视频| 国产精品人成在线观看免费 | 成人性生交大片免费看视频在线 | 91精品国产日韩91久久久久久|