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

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

?? main.c

?? cypress cy3721做的I2c橋數據傳輸代碼
?? C
字號:
//----------------------------------------------------------------------------
//
// Main.c - FirstTouch I2C Bridge
//
//--------------------------------------------------------------------------
//
//--------------------------------------------------------------------------
//
// Copyright 2008, Cypress Semiconductor Corporation.
//
// This software is owned by Cypress Semiconductor Corporation (Cypress)
// and is protected by and subject to worldwide patent protection (United
// States and foreign), United States copyright laws and international
// treaty provisions. Cypress hereby grants to licensee a personal,
// non-exclusive, non-transferable license to copy, use, modify, create
// derivative works of, and compile the Cypress Source Code and derivative
// works for the sole purpose of creating custom software in support of
// licensee product to be used only in conjunction with a Cypress integrated
// circuit as specified in the applicable agreement. Any reproduction,
// modification, translation, compilation, or representation of this
// software except as specified above is prohibited without the express
// written permission of Cypress.
//
// Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND,EXPRESS OR IMPLIED,
// WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
// Cypress reserves the right to make changes without further notice to the
// materials described herein. Cypress does not assume any liability arising
// out of the application or use of any product or circuit described herein.
// Cypress does not authorize its products for use as critical components in
// life-support systems where a malfunction or failure may reasonably be
// expected to result in significant injury to the user. The inclusion of
// Cypress' product in a life-support systems application implies that the
// manufacturer assumes all risk of such use and in doing so indemnifies
// Cypress against all charges.
//
// Use may be limited by and subject to the applicable Cypress software
// license agreement.
//
//--------------------------------------------------------------------------


#include "main.h"

static void sendNewTxMsg    (void);
static void loadTxData      (void);
static void GetI2CData      (void);
static BOOL CheckBindButton (void);
static BOOL CheckWakeButton (void);
static void Calibrate_ILO   (void);
static void blinkRedLed     (WORD delayCount);


// ---------------------------------------------------------------------------
//
// main() - Powerup entry
//
// ---------------------------------------------------------------------------
void main()
{
    CYFISNP_PROT_STATE eProtStateOld;

    LED_RED_OFF;
    LED_GRN_ON;

    M8C_EnableGInt;

#if (defined DEBUG) || (defined CYFISNP_DEBUG)
    TX8_Start(TX8_PARITY_NONE);
#endif

    CYFISNP_Start();
    // --------------------------------------------------------
    // Disable SNP_Radio Power Management Unit (saves about 32uA)
    // --------------------------------------------------------
    CYFISNP_Write(CYFISNP_PWR_CTRL_ADR,
                  (CYFISNP_Read(CYFISNP_PWR_CTRL_ADR) & ~CYFISNP_PMU_EN) | CYFISNP_PMU_MODE_FORCE);

    LED_GRN_OFF;

    CYFISNP_TimeSet(&oneSecTimer, sleepTicksPerSec);

    I2C_Start();
    I2C_EnableMstr();
    I2C_EnableInt();

    // -----------------------------------------------------------------------
    // POLLING LOOP
    // -----------------------------------------------------------------------
    for (;;)
    {
        // -------------------------------------------------------------------
        // Watch Start Binding Button activity
        // -------------------------------------------------------------------
        if (CheckBindButton())
        {
            CYFISNP_BindStart(ON_THE_FLY_DEV_ID);
            LED_GRN_ON;
        }

        // -------------------------------------------------------------------
        // Watch "Force New Report" button
        // -------------------------------------------------------------------
        if (CheckWakeButton())
        {
            sendNewTxMsg();
        }

        // -------------------------------------------------------------------
        // Run SNP less frequently to save energy
        // -------------------------------------------------------------------
        if (--snpRunScaler == 0)
        {
            snpRunScaler = SNP_RUN_SCALER;
            CYFISNP_Run();          // Poll SNP machine
        }

        // -------------------------------------------------------------------
        // Process received SNP data packets
        //  (only supports update report rate for now)
        // -------------------------------------------------------------------
        if (CYFISNP_RxDataPend() == TRUE)
        {
            CYFISNP_API_PKT *pRxApiPkt;
            pRxApiPkt = CYFISNP_RxDataGet();
            reportTimeSec = pRxApiPkt->payload[0];    // Update report rate
            CYFISNP_RxDataRelease();
        }

        // -------------------------------------------------------------------
        // Periodic 1 sec events
        // -------------------------------------------------------------------
        if (CYFISNP_TimeExpired(&oneSecTimer) == TRUE)
        {
            CYFISNP_TimeSet(&oneSecTimer, sleepTicksPerSec);

            // ---------------------------------------------------------------
            // Blink Heartbeat LED
            // ---------------------------------------------------------------
            if (--ledHeartbeatSec == 0)
            {
                ledHeartbeatSec = LED_HEARTBEAT_SEC;
                blinkRedLed(50);           // *100 uS ON
                Calibrate_ILO();        // Calibrate ILO against IMO
            }

            // ---------------------------------------------------------------
            // If SNP reconnect timeout, then try to reconnect.
            //    (If very power sensitive, may want to defer for 5 minutes)
            // ---------------------------------------------------------------
            if (CYFISNP_eProtState == CYFISNP_CON_MODE_TIMEOUT)
            {
                CYFISNP_Jog();
            }

            // ---------------------------------------------------------------
            // Periodic weather station report
            // ---------------------------------------------------------------
            if (--reportTimerSec == 0)
            {
                reportTimerSec = reportTimeSec;
                sendNewTxMsg();
            }
        }

        // -------------------------------------------------------------------
        // Sleep PSoC until next Sleep Timer interrupt to conserve energy
        // -------------------------------------------------------------------
#if LOW_POWER_TEST
        M8C_Sleep;
#endif

        // -------------------------------------------------------------------
        // Turn OFF Green LED when not in Bind Mode
        // -------------------------------------------------------------------
        if (CYFISNP_eProtState != CYFISNP_BIND_MODE)
        {
            LED_GRN_OFF;
        }
        LED_RED_OFF;        // RED LED always goes OFF
    }
}

static void blinkRedLed(WORD delayCount)
{
    LED_RED_ON;
    while (delayCount != 0)
    {
        CYFISNP_Delay100uS();       // Get good short delays
        --delayCount;
    }
    LED_RED_OFF;
}


// ---------------------------------------------------------------------------
//
// loadTxData()
//
// ---------------------------------------------------------------------------
static void loadTxData(void)
{
    char ivar;

    for (ivar=0; ivar < I2C_PAYLOAD_MAX; ++ivar)
    {
        txApiPkt.payload[ivar] = rxBuffer[ivar];
    }
}

// ---------------------------------------------------------------------------
//
// sendNewTxMsg() - Send a weather station report to the HUB
//
// ---------------------------------------------------------------------------
#define TX_PACKET_LENGTH    8
#define TX_PACKET_TYPE      CYFISNP_API_TYPE_CONF
static void sendNewTxMsg(void)
{
    if (CYFISNP_eProtState == CYFISNP_DATA_MODE
        && CYFISNP_TxDataPend() == FALSE)
    {
        GetI2CData();

        loadTxData();
        txApiPkt.length = TX_PACKET_LENGTH;
        txApiPkt.type   = TX_PACKET_TYPE;
        CYFISNP_TxDataPut(&txApiPkt);
        LED_GRN_ON;
    }
}



// ---------------------------------------------------------------------------
//
// GetI2CData() - Get data from I2C device on P1 (weather station board)
//
// ---------------------------------------------------------------------------
static void GetI2CData(void)
{
    WORD dataDelay;

    // Delay (with timeout), for weather station to be ready.
    ChipSelect_ON;
    CYFISNP_TimeSet(&dataDelay, DATA_READY_TIME);
    while (!CYFISNP_TimeExpired(&dataDelay) && !IS_DataReady_ON);

    // Start the I2C read
    I2C_fReadBytes(SLAVE_ADDRESS, rxBuffer, 8, I2C_CompleteXfer);

    // Wait for I2C to complete
    while ((I2C_bReadI2CStatus()&I2CHW_RD_COMPLETE) == FALSE)
        ;

    I2C_ClrRdStatus();

    ChipSelect_OFF;
}


// ---------------------------------------------------------------------------
//
// Calibrate_ILO() - Calibrate Int Low Freq Osc against the Int Main Osc
//
// ---------------------------------------------------------------------------
static void Calibrate_ILO(void)
{
    WORD bCount;

    // -----------------------------------------------------------------------
    // Get number of ILO ticks in 1 mS (as measured by IMO)
    // -----------------------------------------------------------------------
    Timer8_WritePeriod(255);
    M8C_DisableGInt;
    Timer8_Start();
    for (bCount=0; bCount != 10; ++bCount)
    {
        CYFISNP_Delay100uS();
    }
    bCount = Timer8_bReadTimer();
    bCount = 255 - bCount;
    Timer8_Stop();
    M8C_EnableGInt;

    sleepTicksPerSec = bCount<<1;   // Start by assuming ILO(wake) = ILO(sleep)

    // -----------------------------------------------------------------------
    // Without ILO in HighBias mode (See ILO_TR register in TRM), the ILO
    //  operates FASTER awake than asleep.
    // Therefore approximate ILO(sleep) as 25% lower than ILO(wake).
    // -----------------------------------------------------------------------
    sleepTicksPerSec -= bCount>>1;  // Decrease by 25% to estimate ILO(sleep)
}



// ---------------------------------------------------------------------------
//
// bindButtonIsOn()
//
// ---------------------------------------------------------------------------
static BOOL bindButtonIsOn(void)
{
    SW1_Data_ADDR &= ~SW1_MASK;                  // Ensure GPIO pulldown active
    return(SW1_Data_ADDR & SW1_MASK);
}

// ---------------------------------------------------------------------------
//
// CheckBindButton()
//
// ---------------------------------------------------------------------------
static BOOL CheckBindButton(void)
{
    WORD lvDelay;
    if (bindButtonIsOn())
    {
        CYFISNP_TimeSet(&lvDelay, DEBOUNCE_TIME);       // Debouncing, delay
        while (CYFISNP_TimeExpired(&lvDelay) == 0) ;    // WAIT
        if (bindButtonIsOn())           // If button still ON
        {
            while (bindButtonIsOn())    // Wait for button release
            {
                M8C_ClearWDTAndSleep;
#if LOW_POWER_TEST
                M8C_Sleep;
#endif
            }
            return(TRUE);
        }
    }
    return(FALSE);
}


// ---------------------------------------------------------------------------
//
// buttonIncReportTime() - Manually step report interval
//
// ---------------------------------------------------------------------------
static const WORD reportTimes[] = {1, 5, 30, 60, 300};  // in Seconds
static char       reportTimesIdx = 1;                   // Start at 5 sec
#define REPORT_TIMES_MAX   (sizeof(reportTimes)/2)      // # entries

static void buttonIncReportTime(void)
{
    if (++reportTimesIdx >= REPORT_TIMES_MAX)
    {
        reportTimesIdx = 0;
    }
    reportTimeSec = reportTimes[reportTimesIdx];
    reportTimerSec = reportTimeSec;
}

// ---------------------------------------------------------------------------
//
//  showReportDelay() - Pulse LED to show INDEX of new report delay
//
// ---------------------------------------------------------------------------
static void showReportDelay(void)
{
#define HI_LO_PULSE   10    // Hi or Lo pulse width (in Sleep intervals)
    char pulseCt = reportTimesIdx + 1;  // 1st entry [0] gives 1 pulse
    char wait;

    LED_RED_OFF;
    for (wait=HI_LO_PULSE; wait != 0; --wait)
    {
#if LOW_POWER_TEST
        M8C_Sleep;
#endif
    }

    while (pulseCt-- != 0)
    {
        LED_RED_ON;
        for (wait=HI_LO_PULSE; wait != 0; --wait)
        {
#if LOW_POWER_TEST
            M8C_Sleep;
#endif
        }
        LED_RED_OFF;
        for (wait=HI_LO_PULSE; wait != 0; --wait)
        {
#if LOW_POWER_TEST
            M8C_Sleep;
#endif
        }
    }
    ledHeartbeatSec = LED_HEARTBEAT_SEC;    // Suppress next heartbeat pulse
}


// ---------------------------------------------------------------------------
//
// wakeButtonIsOn()
//
// ---------------------------------------------------------------------------
static BOOL wakeButtonIsOn(void)
{
    SW2_Data_ADDR &= ~SW2_MASK;              // Ensure GPIO pulldown active
    return(SW2_Data_ADDR & SW2_MASK);
}
// ---------------------------------------------------------------------------
//
// CheckWakeButton() - Also cyclic steps report rate if is button held.
//
// ---------------------------------------------------------------------------

#define BUTTON_HOLD_TIME_TO_INC_REPORT_DELAY   (1500/CYFISNP_TIMER_UNITS)

static BOOL CheckWakeButton(void)
{
    WORD lvDelay;
    WORD reportDly;

    BOOL reportDlySet;

    if (wakeButtonIsOn())
    {
        CYFISNP_TimeSet(&lvDelay, DEBOUNCE_TIME);       // Debouncing, delay
        while (CYFISNP_TimeExpired(&lvDelay) == 0) ;    // WAIT
        if (wakeButtonIsOn())           // If button still ON
        {
            CYFISNP_TimeSet(&reportDly, BUTTON_HOLD_TIME_TO_INC_REPORT_DELAY);
            reportDlySet = TRUE;
            while (wakeButtonIsOn())    // Wait for button release
            {
                if (CYFISNP_TimeExpired(&reportDly) == TRUE
                    && reportDlySet == TRUE)
                {
                    reportDlySet = FALSE;
                    buttonIncReportTime();
                    LED_RED_ON;             // Keep LED ON while switch held
                }
                M8C_ClearWDTAndSleep;
#if LOW_POWER_TEST
                M8C_Sleep;
#endif

            }
            if (reportDlySet == FALSE)
            {
                showReportDelay();
            }
            return(TRUE);
        }
    }
    return(FALSE);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜亚洲精品羞羞网站| 日日夜夜一区二区| 亚洲制服欧美中文字幕中文字幕| 免费在线观看日韩欧美| 成人国产电影网| 欧美v国产在线一区二区三区| 国产精品久久精品日日| 精品无人码麻豆乱码1区2区 | 欧美日韩电影一区| 国产精品第五页| 成人性生交大片免费看中文网站| 欧美一卡二卡三卡四卡| 亚洲影视在线观看| 91看片淫黄大片一级| 国产偷国产偷亚洲高清人白洁| 天天色天天爱天天射综合| 一本久久综合亚洲鲁鲁五月天| 久久久久成人黄色影片| 老司机午夜精品| 欧美一级黄色录像| 日韩综合在线视频| 欧美日韩亚洲综合| 亚洲午夜日本在线观看| 91久久免费观看| 亚洲日本电影在线| 99re视频精品| 亚洲欧美日韩中文播放| 日本高清无吗v一区| 亚洲女与黑人做爰| 91麻豆精东视频| 一区二区三区免费网站| 一本大道av伊人久久综合| 国产精品久久久久久久岛一牛影视| 国产精品羞羞答答xxdd| 中文字幕乱码日本亚洲一区二区 | 国产视频911| 国产激情视频一区二区在线观看| 国产午夜一区二区三区| 国产不卡视频一区| 中文字幕在线观看一区| 91视视频在线观看入口直接观看www| 中文字幕亚洲精品在线观看| 色婷婷综合久久| 亚洲一二三四在线观看| 在线成人av网站| 捆绑调教美女网站视频一区| 久久久精品综合| 99久久久精品| 夜夜嗨av一区二区三区网页| 色88888久久久久久影院按摩| 亚洲一区在线观看免费| 日韩欧美国产综合| 国产一区二区三区四区五区入口| 国产精品国产三级国产aⅴ无密码| 99精品黄色片免费大全| 午夜一区二区三区视频| 2017欧美狠狠色| 色综合久久中文综合久久97| 亚洲第一狼人社区| 精品久久久久久最新网址| 成人h动漫精品一区二区| 亚洲欧美经典视频| 欧美成人艳星乳罩| av中文字幕一区| 青青草原综合久久大伊人精品| 久久久精品国产免大香伊 | 一区二区三区高清不卡| 在线电影欧美成精品| 国产成人精品亚洲777人妖 | 亚洲欧美在线视频观看| 欧美精品v国产精品v日韩精品| 国内外精品视频| 亚洲高清免费视频| 国产精品久久久久影院色老大| 欧美性生活久久| www.亚洲国产| 久久精品国产77777蜜臀| 亚洲人成精品久久久久| 欧美成人艳星乳罩| 欧美日韩三级一区二区| 丁香激情综合五月| 蜜桃免费网站一区二区三区| 亚洲久本草在线中文字幕| www激情久久| 欧美高清性hdvideosex| 成人av手机在线观看| 精品综合免费视频观看| 亚洲国产日韩精品| 亚洲欧美另类小说| 中文字幕欧美区| 国产亚洲女人久久久久毛片| 91精品国产综合久久精品 | www.在线欧美| 国产成人在线看| 麻豆freexxxx性91精品| 亚洲一级二级在线| 亚洲精品国产一区二区精华液 | 中文字幕一区二区在线播放| 日韩西西人体444www| 欧美撒尿777hd撒尿| www.在线成人| 99久久99久久免费精品蜜臀| 国产ts人妖一区二区| 国内精品久久久久影院薰衣草 | 国产日韩精品一区二区三区在线| 91精品国产美女浴室洗澡无遮挡| 欧美视频精品在线观看| 色婷婷激情一区二区三区| 91小视频免费观看| 丁香另类激情小说| 99久久精品免费观看| 成人福利视频在线| 99久久精品国产一区| 波多野洁衣一区| 99精品欧美一区二区三区小说 | 美女久久久精品| 日本午夜精品一区二区三区电影| 午夜精品福利在线| 天天av天天翘天天综合网色鬼国产 | 久久久久久亚洲综合影院红桃| 欧美成人一区二区三区片免费 | 欧美一级片免费看| 欧美一卡二卡在线| 337p日本欧洲亚洲大胆色噜噜| 精品免费国产一区二区三区四区| 欧美精品一区二区三| 精品成人一区二区三区| 国产亚洲短视频| 国产精品嫩草影院av蜜臀| 亚洲欧美自拍偷拍| 亚洲一卡二卡三卡四卡五卡| 免费成人结看片| 国产一区二区三区| 不卡一区中文字幕| 欧美特级限制片免费在线观看| 欧美一区二区三区在线观看视频| 日韩女优av电影| 亚洲国产精品成人综合| 亚洲综合在线第一页| 亚洲r级在线视频| 国产成人在线观看| 欧美亚洲高清一区| 精品日韩在线观看| 最好看的中文字幕久久| 五月激情六月综合| 国产高清无密码一区二区三区| 99国产精品视频免费观看| 欧美另类z0zxhd电影| 久久精品视频一区二区| 亚洲欧洲制服丝袜| 久久精品国产久精国产| 99久久久国产精品| 精品国产1区二区| 一二三四区精品视频| 国产一区二区三区观看| 欧美亚洲丝袜传媒另类| 久久综合色之久久综合| 亚洲自拍偷拍麻豆| 国产精品中文有码| 欧美日韩国产在线观看| 国产欧美日韩不卡| 午夜视频在线观看一区| 丁香婷婷综合激情五月色| 69精品人人人人| 亚洲婷婷综合色高清在线| 久色婷婷小香蕉久久| 91福利区一区二区三区| 国产精品色婷婷久久58| 另类综合日韩欧美亚洲| 欧美日韩电影一区| 亚洲精品高清在线| 成人精品高清在线| 欧美精品一区二区三区很污很色的 | 日韩手机在线导航| 亚洲制服欧美中文字幕中文字幕| 成人黄色小视频| 国产欧美久久久精品影院| 蜜桃视频在线观看一区二区| 在线视频一区二区三| 国产视频亚洲色图| 国产毛片一区二区| 欧美videos大乳护士334| 亚洲午夜久久久久久久久久久| 成人黄动漫网站免费app| 久久精品夜夜夜夜久久| 九九精品一区二区| 日韩精品一区二区三区中文不卡| 亚洲国产成人porn| 欧美亚洲综合一区| 亚洲午夜一二三区视频| 欧美日韩中字一区| 亚洲精品中文在线观看| 在线精品视频一区二区三四| 成人欧美一区二区三区白人| 成人晚上爱看视频| 亚洲国产精品99久久久久久久久| 国产成人在线色| 亚洲国产精品高清| 波多野结衣视频一区| 亚洲视频你懂的|