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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? emeter-rtc.c

?? msp430F437三相電表DEMO(編譯器 IAR 3.42A)
?? C
字號(hào):
//--------------------------------------------------------------------------
//
//  Software for MSP430 based e-meters.
//
//  You may not use the Program in non-TI devices.
//
//  File: emeter-rtc.c
//
//  Steve Underwood <steve-underwood@ti.com>
//  Texas Instruments Hong Kong Ltd.
//
//  $Id$
//
/*! \file emeter-structs.h */
//
//--------------------------------------------------------------------------
#include <stdint.h>
#include <stdlib.h>
#if !defined(__MSP430__)
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#endif
#if defined(__GNUC__)
#include <signal.h>
#endif
#if defined(__MSP430__)
#include <io.h>
#endif
#include <emeter-toolkit.h>
#include "emeter.h"
#include "emeter-structs.h"

#if !defined(NULL)
#define NULL    (void *) 0
#endif

/* We need a small seconds counter, so we can do things like a display update every 2 seconds. */
uint8_t seconds;

#if defined(__MSP430__)
    #if defined(__MSP430_HAS_BT__)  ||  defined(__MSP430_HAS_BT_RTC__)
ISR(BASICTIMER, one_second_ticker)
    #else
ISR(WDT, one_second_ticker)
    #endif
{
    #if defined(POWER_DOWN_SUPPORT)  &&  defined(POWER_UP_BY_SUPPLY_SENSING)
        #if defined(__MSP430_HAS_COMPA__)  ||  (defined(POWER_GOOD_SENSE)  &&  defined(POWER_GOOD_THRESHOLD_HIGH))
    int i;
    int j;
        #endif
    #endif

    kick_watchdog();
    #if defined(RTC_SUPPORT)
        #if defined(CORRECTED_RTC_SUPPORT)
    /* Allow for RTC correction. */
    if ((meter_status & SKIP_A_SECOND))
        meter_status &= ~SKIP_A_SECOND;
    else
        rtc_bumper();
        #else
    rtc_bumper();
        #endif
    #endif
    #if defined(CUSTOM_RTC_SUPPORT)
    if ((meter_status & SKIP_A_SECOND))
        meter_status &= ~SKIP_A_SECOND;
    else
        custom_rtc();
    #endif
    if (++seconds & 1)
        meter_status |= TICKER;  /* Kick every 2 seconds */
    #if defined(RF_LINK_SUPPORT)
    if (operating_mode == OPERATING_MODE_POWERFAIL  &&  rf_timeout >= 0)
    {
        if (++rf_timeout == 5)
        {
            rf_timeout = 0;
            /* Enable the USART */
            U0ME |= (UTXE0 | URXE0);
        #if defined(__MSP430_HAS_FLLPLUS__)  ||  defined(__MSP430_HAS_FLLPLUS_SMALL__)
            /* Speed up the clock to 8.388608MHz */
            SCFI0 = FN_3 | FLLD_4;
            SCFQCTL = 64 - 1;
        #endif
        #if defined(custom_rf_sniffer)
            if (rf_timeout = custom_rf_sniffer())
            {
                /* We need to set up timer A to call back when the message exchange time
                   comes round */
                /* Use timer A to time the period until the real messages are exchanged. */
                TAR = 0;
                TACCR0 = 55*rf_timeout;
                TACCTL0 = 0;
                TACTL = TACLR | MC_1 | ID_2 | TASSEL_1;
                /* Stop the 5 second scans until the timed response is complete */
                rf_timeout = -1;
            }
        #endif
            /* Disable the USART */
            U0ME &= ~(UTXE0 | URXE0);
        #if defined(__MSP430_HAS_FLLPLUS__)  ||  defined(__MSP430_HAS_FLLPLUS_SMALL__)
            /* Slow the clock to 1MHz as quickly as possible. The FLL will not be active
               in LPM3, so switch it off now, and force the FLL's RC oscillator to
               about 1MHz. The exact frequency is not critical. */
            _BIS_SR(SCG0);                  /* switch off FLL locking */
            SCFI0 = FLLD_1;
            SCFQCTL = (32 - 1) | SCFQ_M;
            SCFI0 = 0x0;
            SCFI1 = 0x37;
        #endif
        }
    }
    #endif

    #if defined(POWER_DOWN_SUPPORT)
        #if defined(POWER_UP_BY_VOLTAGE_PULSES)
    /* One method to detect power being restored is to look
       for pulses on an input pin, caused by the voltage signal. */
    if (meter_status & POWER_DOWN)
    {
        pd_pin_debounce <<= 1;
        if (power_up_voltage_pulse())
            pd_pin_debounce |= 1;
            #if defined(__MSP430__)
        if ((pd_pin_debounce & 0xF) == 0xF)
            _BIC_SR_IRQ(LPM3_bits);
            #endif
    }
    else
    {
            #if defined(__MSP430__)
        _BIC_SR_IRQ(LPM0_bits);
            #endif
    }
        #endif
        #if defined(POWER_UP_BY_SUPPLY_SENSING)
    /* If the meter has a limp mode, where it can be powered from the live
       or neutral only, getting wakeup voltage pulses is not so easy. Current
       pulses are not much easier. Here we look for the pre-regulator power
       supply voltage being of an adequate level. We use comparator A as the
       sensor, and only switch it on for the minimum possible time. */
            #if defined(__MSP430_HAS_COMPA__)
                #if defined(__MSP430__)
    if (operating_mode == OPERATING_MODE_POWERFAIL)
    {
        /* Select the lower comparator threshold for going to the LCD on, but other
           functions off, condition. Current consumption should be low enough to not
           be too significant for reasonable periods. */
        CACTL1 = CAREF_1 | CAON;
        /* We are required to start quickly, so we cannot do much
           debouncing here */
        power_down_debounce = POWER_RESTORE_DEBOUNCE;
        i = CACTL2 & CAOUT;
        while (--power_down_debounce >= 0)
        {
            j = CACTL2 & CAOUT;
            if (i != j)
            {
                i = j;
                power_down_debounce = POWER_RESTORE_DEBOUNCE;
            }
        }
        if (!j)
        {
            /* This appears to be a real power-up. We have reached 4.2V. This
               should be OK for running the internal LCD controller, as it only
               takes a few uA. For a small LCD, as little as 2uA. */
            operating_mode = OPERATING_MODE_LCD_ONLY;
                    #if defined(BASIC_LCD_SUPPORT)
            display_power_4v2_message();
                    #endif
            custom_lcd_wakeup_handler();
        }
        power_down_debounce = 0;
        CACTL1 &= ~(CAON);
    }
    else if (operating_mode == OPERATING_MODE_LCD_ONLY)
    {
        /* Select the higher comparator threshold for power restored. That should
           mean that if the MCU is woken up, it can definitely run for a while at
           full speed, just from the charge on the main capacitor. */
        CACTL1 = CAREF_2 | CAON;
        /* We are required to start quickly, so we cannot do much
           debouncing here. */
        power_down_debounce = POWER_RESTORE_DEBOUNCE;
        i = CACTL2 & CAOUT;
        while (--power_down_debounce >= 0)
        {
            j = CACTL2 & CAOUT;
            if (i != j)
            {
                i = j;
                power_down_debounce = POWER_RESTORE_DEBOUNCE;
            }
        }
        if (!j)
        {
            /* This appears to be a real power-up. */
                    #if defined(BASIC_LCD_SUPPORT)
            display_power_normal_message();
                    #endif
            _BIC_SR_IRQ(LPM3_bits);
        }
        else
        {
            /* The power hasn't reached the high water mark. See if it has
               dropped back below the low water mark. */
            CACTL1 = CAREF_1 | CAON;
            /* We are required to start quickly, so we cannot do much
               debouncing here. */
            power_down_debounce = POWER_RESTORE_DEBOUNCE;
            i = CACTL2 & CAOUT;
            while (--power_down_debounce >= 0)
            {
                j = CACTL2 & CAOUT;
                if (i != j)
                {
                    i = j;
                    power_down_debounce = POWER_RESTORE_DEBOUNCE;
                }
            }
            if (j)
            {
                /* This appears to be a real power drop. */
                operating_mode = OPERATING_MODE_POWERFAIL;
                custom_lcd_sleep_handler();
            }
        }
        power_down_debounce = 0;
        CACTL1 &= ~(CAON);
    }
                #endif
            #else
    /* Use an I/O pin to sense the power falling */
                #if defined(__MSP430__)
    if (operating_mode == OPERATING_MODE_POWERFAIL)
    {
        /* Select the higher comparator threshold for starting up. This ensures we should have
           enough energy in the capacitors to keep the meter running until it works out what to
           do next. */
        POWER_GOOD_THRESHOLD_HIGH;
        /* We are required to start quickly, so we cannot do much
           debouncing here */
        power_down_debounce = POWER_RESTORE_DEBOUNCE;
        i = POWER_GOOD_SENSE;
        while (--power_down_debounce >= 0)
        {
            j = POWER_GOOD_SENSE;
            if (i != j)
            {
                i = j;
                power_down_debounce = POWER_RESTORE_DEBOUNCE;
            }
        }
        if (j)
        {
            /* This appears to be a real power-up. */
                    #if defined(BASIC_LCD_SUPPORT)
            display_power_normal_message();
                    #endif
            custom_lcd_wakeup_handler();
            _BIC_SR_IRQ(LPM3_bits);
        }
        power_down_debounce = 0;
    }
                #endif
            #endif
        #endif
        #if defined(LIMP_MODE_SUPPORT)
    if (operating_mode == OPERATING_MODE_LIMP)
    {
        /* We need to kick things, to give the foreground activities a chance
           to do their work. */
        _BIC_SR_IRQ(LPM0_bits);
    }
        #endif
    #endif
    kick_watchdog();
}
#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜欧美视频在线观看| 91丨九色丨黑人外教| 日本欧美一区二区三区| 亚洲综合丁香婷婷六月香| 亚洲女子a中天字幕| 亚洲欧洲精品一区二区精品久久久 | 精品亚洲国产成人av制服丝袜 | 99久久国产综合精品色伊| 国产99久久精品| 国产成人夜色高潮福利影视| 国产91富婆露脸刺激对白| 不卡av在线网| 91福利国产成人精品照片| 欧洲av在线精品| 欧美乱妇23p| 日韩三级视频中文字幕| www国产成人| 欧美激情中文字幕| 亚洲少妇30p| 亚洲二区在线观看| 蜜臀va亚洲va欧美va天堂| 国模大尺度一区二区三区| 国产成人免费视频精品含羞草妖精 | 国产成人av电影在线| 成人av资源网站| 欧美视频在线一区二区三区| 777亚洲妇女| 久久影院午夜片一区| 国产精品免费网站在线观看| 亚洲欧美另类图片小说| 日韩精品1区2区3区| 韩国精品久久久| 97精品电影院| 欧美一区二区在线免费播放| 国产欧美精品一区aⅴ影院| 亚洲三级在线播放| 欧美a级理论片| 成人免费观看av| 欧美日韩第一区日日骚| 久久久www成人免费无遮挡大片| 一区精品在线播放| 免费成人性网站| www.欧美精品一二区| 欧美日韩亚洲综合一区二区三区| 精品日韩一区二区| 亚洲精品国产精华液| 久久www免费人成看片高清| 成人激情视频网站| 69堂精品视频| 国产精品第13页| 秋霞电影网一区二区| 成人免费福利片| 欧美日韩成人综合在线一区二区| 国产亚洲综合在线| 亚洲电影你懂得| 国产91精品免费| 欧美理论在线播放| 国产精品久久一卡二卡| 久久精品免费看| 欧美在线一区二区| 国产欧美视频一区二区| 免费在线观看成人| 色婷婷综合久久久中文字幕| 欧美精品一区二区三区一线天视频| 亚洲最快最全在线视频| 国产乱人伦偷精品视频不卡 | 国产精品无遮挡| 蜜臀精品久久久久久蜜臀| 91久久精品日日躁夜夜躁欧美| 久久久久久久久久久久久女国产乱| 亚洲国产另类av| 99r国产精品| 久久久久久免费| 麻豆一区二区三区| 欧美日韩在线三级| 综合久久国产九一剧情麻豆| 国产成人免费视频一区| 日韩精品中文字幕在线一区| 亚洲国产视频a| 色女孩综合影院| 国产精品美女久久久久久久网站| 奇米色一区二区三区四区| 欧美日韩一区二区三区免费看| 国产精品国模大尺度视频| 国产成人小视频| 欧美精品一区二区三区高清aⅴ| 免费在线观看视频一区| 欧美伦理电影网| 亚洲成人免费av| 欧美在线不卡视频| 亚洲国产欧美日韩另类综合| 91视频在线观看免费| 国产精品国产三级国产三级人妇 | 国产欧美日韩精品一区| 国产真实乱对白精彩久久| 在线成人午夜影院| 日韩av一级片| 欧美高清dvd| 日本中文字幕一区二区有限公司| 欧美日韩久久一区二区| 亚洲福利一二三区| 欧美片网站yy| 偷拍自拍另类欧美| 91麻豆精品国产91久久久使用方法| 视频一区二区三区中文字幕| 欧美精品国产精品| 免费久久精品视频| 日韩欧美国产麻豆| 国产一区二区三区观看| 久久精品水蜜桃av综合天堂| 成人性生交大合| 亚洲视频精选在线| 日本电影欧美片| 婷婷六月综合亚洲| 日韩一区二区电影在线| 黄页视频在线91| 国产欧美日韩一区二区三区在线观看| 高清久久久久久| 亚洲免费观看高清完整版在线| 一本大道久久a久久综合| 亚洲一区电影777| 91精品免费观看| 狠狠狠色丁香婷婷综合激情| 国产日韩欧美激情| 日本韩国欧美一区二区三区| 天天综合日日夜夜精品| 欧美成人a视频| 白白色亚洲国产精品| 亚洲激情图片qvod| 日韩一区二区高清| eeuss鲁片一区二区三区在线看| 亚洲久草在线视频| 日韩一卡二卡三卡四卡| 国产不卡在线一区| 亚洲一区二区三区四区在线免费观看| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品久久久久久久蜜臀| 在线观看视频91| 精品在线播放免费| 亚洲欧美日韩一区| 91精品欧美综合在线观看最新| 国产福利精品一区| 亚洲欧美电影院| 精品剧情在线观看| 91免费小视频| 麻豆精品视频在线| 1区2区3区精品视频| 欧美精品成人一区二区三区四区| 国内精品写真在线观看| 亚洲精品videosex极品| 2019国产精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 黄页网站大全一区二区| 一区二区三区在线视频免费| 欧美精品一区二区三区四区| 欧美综合色免费| 丁香婷婷综合五月| 丝袜国产日韩另类美女| 一区二区三区高清| 2021国产精品久久精品| 欧美日韩久久久一区| 91在线观看成人| 国产麻豆精品视频| 日韩av在线播放中文字幕| 亚洲日本成人在线观看| 久久精品亚洲麻豆av一区二区 | 国产亚洲1区2区3区| 欧美乱妇20p| 91黄色激情网站| 国产成人av资源| 美日韩黄色大片| 亚洲一区二区三区四区在线免费观看| 国产欧美精品在线观看| 精品欧美一区二区久久 | 91久久精品日日躁夜夜躁欧美| 国产一区二区视频在线播放| 午夜精品成人在线| 亚洲欧美日韩国产成人精品影院| 国产亚洲综合av| 精品三级在线观看| 日韩亚洲欧美在线| 欧美日本国产一区| 欧美影院精品一区| 91欧美一区二区| 99麻豆久久久国产精品免费| 国产精品一二三四区| 久久99精品国产麻豆婷婷洗澡| 亚洲国产成人av| 夜夜嗨av一区二区三区四季av| 1区2区3区国产精品| 国产精品久久久久久久久久久免费看| 2023国产一二三区日本精品2022| 日韩一区二区视频在线观看| 91麻豆精品国产自产在线| 欧美日韩极品在线观看一区| 欧美日免费三级在线| 欧美无乱码久久久免费午夜一区| 色婷婷av一区二区三区之一色屋| 91美女视频网站| 91麻豆国产精品久久|