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

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

?? emeter-setup.c

?? msp430F437三相電表DEMO(編譯器 IAR 3.42A)
?? C
?? 第 1 頁 / 共 3 頁
字號:
//--------------------------------------------------------------------------
//
//  Software for MSP430 based e-meters.
//
//  You may not use the Program in non-TI devices.
//
//  File: emeter-setup.c
//
//  Steve Underwood <steve-underwood@ti.com>
//  Texas Instruments Hong Kong Ltd.
//
//  $Id: emeter-setup.c,v 1.23 2005/12/20 10:17:57 a0754793 Exp $
//
/*! \file emeter-structs.h */
//
//--------------------------------------------------------------------------
//
//  MSP430 setup routines for e-meters.
//
//  This software is appropriate for single phase and three phase e-meters
//  using a voltage sensor plus CT or shunt resistor current sensors, or
//  a combination of a CT plus a shunt. 
//
#include <stdint.h>
#include <string.h>
#if !defined(__MSP430__)
#include <stdio.h>
#include <stdlib.h>
#endif
#if defined(__GNUC__)
#include <signal.h>
#endif
#include <io.h>
#include <emeter-toolkit.h>
#include "emeter.h"
#include "emeter-structs.h"

#if defined(__MSP430_HAS_SD16_3__)

#define SD16CONF0_FUDGE     0xC0    //0x70  //0xC0
#define SD16CONF1_FUDGE     0x40    //0x38  //0x40

/*
 * Analog front-end initialization routine.
 *
 * Configures the sigma-delta ADC module as analog front-end for
 * a tamper-resistant meter using a current transformer and a
 * shunt as current sensors (see configuration of channel 0 and 1).
 */
static __inline__ void init_analog_front_end_normal(void)
{
    /*
     * First it makes sure that the Embedded Signal Processing is 
     * disabled, otherwise it will not be possible to modify the 
     * SD16 registers.
     */
    ESPCTL &= ~ESPEN;

    /*
     * Then the general configurations of the analog front-end are done
     * that apply to all channels: clock selection (SMCLK) and divider
     * settings (depending on SMCLK frequency) and reference voltage
     * selections.
     */

    SD16CCTL_VOLTAGE &= ~SD16SC;
    SD16CCTL_LIVE &= ~SD16SC;
    #if defined(SINGLE_PHASE)  &&  defined(NEUTRAL_MONITOR_SUPPORT)
    SD16CCTL_NEUTRAL &= ~SD16SC;
    #endif

    #if defined(SINGLE_PHASE)
    SD16CTL = 0x800
            | SD16SSEL_1  /* Clock is SMCLK */
            | SD16DIV_3   /* Divide by 8 => ADC clock: 1.048576MHz */
            | SD16REFON;  /* Use internal reference */
    SD16INCTL_LIVE = SD16INCH_0 | CURRENT_LIVE_GAIN;            /* Set gain for channel 0 (I1) */
    SD16CCTL_LIVE = SD16OSR_256 | SD16DF | SD16GRP | SD16IE;    /* Set oversampling ratio to 256 (default) */
    SD16PRE_LIVE = 0;

        #if defined(NEUTRAL_MONITOR_SUPPORT)
    SD16INCTL_NEUTRAL = SD16INCH_0 | CURRENT_NEUTRAL_GAIN;      /* Set gain for channel 1 (I2) */
    SD16CCTL_NEUTRAL = SD16OSR_256 | SD16DF | SD16GRP | SD16IE; /* Set oversampling ratio to 256 (default) */
    SD16PRE_NEUTRAL = 0;
        #endif

    /* Configure analog front-end channel 2 - Voltage */
    SD16INCTL_VOLTAGE = SD16INCH_0 | VOLTAGE_GAIN;              /* Set gain for channel 2 (V) */
    SD16CCTL_VOLTAGE = SD16OSR_256 | SD16DF | SD16SC | SD16IE;  /* Set oversampling ratio to 256 (default) */
    SD16PRE_VOLTAGE = 0;
    #else
    SD16CTL = 0x800
            | SD16SSEL_1  /* Clock is SMCLK */
            | SD16DIV_0   /* Divide by 1 => ADC clock: 8*1.048576MHz */
            | SD16REFON;  /* Use internal reference */

    SD16INCTL0 = SD16INCH_0 | SD16GAIN_1;
    SD16CCTL0 = SD16OSR_128 | SD16DF | SD16SNGL | SD16GRP | SD16IE;
    SD16PRE0 = 0;

    SD16INCTL1 = SD16INCH_0 | SD16GAIN_1;
    SD16CCTL1 = SD16OSR_128 | SD16DF | SD16SNGL | SD16GRP | SD16IE;
    SD16PRE1 = 0;

    SD16INCTL_VOLTAGE = SD16INCH_0 | SD16GAIN_1;
    SD16CCTL_VOLTAGE = SD16OSR_128 | SD16DF | SD16SNGL | SD16IE;
    SD16PRE_VOLTAGE = 0;

    SD16CCTL2 |= SD16SC;
    #endif

    SD16CONF0 = SD16CONF0_FUDGE;                /* Tweaks recommended by Freising */
    SD16CONF1 = SD16CONF1_FUDGE;

    #if defined(SINGLE_PHASE)
    chan1.current.sd16_preloaded_offset = 0;
        #if defined(NEUTRAL_MONITOR_SUPPORT)
    chan1.neutral.sd16_preloaded_offset = 0;
        #endif
    #endif
    /*
     * \note 
     * Please note, the oversampling ratio should be the same 
     * for all channels. Default is 256.
     */
}

    #if defined(LIMP_MODE_SUPPORT)
static __inline__ void init_analog_front_end_limp(void)
{
    ESPCTL &= ~ESPEN;
    SD16CCTL_VOLTAGE &= ~SD16SC;
    SD16CCTL_LIVE &= ~SD16SC;
        #if defined(SINGLE_PHASE)  &&  defined(NEUTRAL_MONITOR_SUPPORT)
    SD16CCTL_NEUTRAL &= ~SD16SC;
        #endif
    SD16CTL = 0x800
            | SD16SSEL_1  /* Clock is SMCLK */
            | SD16DIV_3   /* Divide by 8 => ADC clock: 1.048576MHz */
            | SD16REFON   /* Use internal reference */
            | SD16LP;
    SD16INCTL_LIVE = SD16INCH_0 | CURRENT_LIVE_GAIN;                        /* Set gain for channel 0 (I1) */
    SD16CCTL_LIVE = SD16OSR_32 | SD16DF | SD16SNGL | SD16GRP | SD16IE;      /* Set oversampling ratio to 32 */
    SD16PRE_LIVE = 0;
    #if defined(SINGLE_PHASE)  &&  defined(NEUTRAL_MONITOR_SUPPORT)
    SD16INCTL_NEUTRAL = SD16INCH_0 | CURRENT_NEUTRAL_GAIN;                  /* Set gain for channel 1 (I2) */
    SD16CCTL_NEUTRAL = SD16OSR_32 | SD16DF | SD16SNGL | SD16GRP | SD16IE;   /* Set oversampling ratio to 32 */
    SD16PRE_NEUTRAL = 0;
    #endif
    SD16INCTL_VOLTAGE = SD16INCH_0 | VOLTAGE_GAIN;                  /* Set gain for channel 2 (V) */
    SD16CCTL_VOLTAGE = SD16OSR_32 | SD16DF | SD16SNGL | SD16IE;     /* Set oversampling ratio to 32 */
    SD16PRE_VOLTAGE = 0;
    SD16CONF0 = SD16CONF0_FUDGE;                                    /* Tweaks recommended by Freising */
    SD16CONF1 = SD16CONF1_FUDGE;

    chan1.current.sd16_preloaded_offset = 0;
        #if defined(SINGLE_PHASE)  &&  defined(NEUTRAL_MONITOR_SUPPORT)
    chan1.neutral.sd16_preloaded_offset = 0;
        #endif
}
    #endif

static __inline__ void disable_analog_front_end(void)
{
    ESPCTL &= ~ESPEN;

    SD16INCTL_VOLTAGE = 0;
    SD16CCTL_VOLTAGE = 0;
    SD16PRE_VOLTAGE = 0;

    SD16INCTL_LIVE = 0;
    SD16CCTL_LIVE = 0;
    SD16PRE_LIVE = 0;

    #if defined(SINGLE_PHASE)  &&  defined(NEUTRAL_MONITOR_SUPPORT)
    SD16INCTL_NEUTRAL = 0;
    SD16CCTL_NEUTRAL = 0;
    SD16PRE_NEUTRAL = 0;
    #endif

    SD16CTL = 0;

    SD16CONF0 = SD16CONF0_FUDGE;
    SD16CONF1 = SD16CONF1_FUDGE;

    #if defined(SINGLE_PHASE)
    chan1.current.sd16_preloaded_offset = 0;
        #if defined(NEUTRAL_MONITOR_SUPPORT)
    chan1.neutral.sd16_preloaded_offset = 0;
        #endif
    #endif
}
#endif

#if defined(__MSP430__)
void system_setup(void)
{
    #if !defined(SINGLE_PHASE)
    struct phase_parms_s *phase;
    struct phase_nv_parms_s const *phase_nv;
    int j;
    #endif

    #if defined(__MSP430_HAS_BT__)  ||  defined(__MSP430_HAS_BT_RTC__)
    /* Basic timer setup */
    /* Set ticker to 32768/(256*256) */
        #if defined(__MSP430_HAS_BT__)
    BTCTL = BT_fLCD_DIV64 | BT_fCLK2_DIV128 | BT_fCLK2_ACLK_DIV256;
        #else
    BTCTL = BT_fCLK2_DIV128 | BT_fCLK2_ACLK_DIV256;
        #endif
    /* Enable the 1 second counter interrupt */
    IE2 |= BTIE;

    /* We want a real watchdog function, but it doesn't have to be fast. */
    /* Use the longest timer - 1s */
        #if USE_WATCHDOG
    kick_watchdog();    /* Set the watchdog timer to exactly 1s */
        #else
    WDTCTL = (WDTCTL & 0xFF) | WDTPW | WDTHOLD;
        #endif
    #else
    IE1 |= WDTIE;               /* Enable the WDT interrupt */
    #endif

    #if (defined(BASIC_LCD_SUPPORT)  ||  defined(CUSTOM_LCD_SUPPORT))
    LCDinit();
    custom_lcd_init();
        #if defined(LCD_INIT)  &&  defined(__MSP430_HAS_LCD4__)
    LCDCTL = LCD_INIT;
        #endif
        #if defined(LCDACTL_INIT)  &&  defined(__MSP430_HAS_LCD_A__)
    LCDACTL = LCDACTL_INIT;
    LCDAPCTL0 = LCDAPCTL0_INIT;
    LCDAPCTL1 = LCDAPCTL1_INIT;
    LCDAVCTL0 = LCDAVCTL0_INIT;
    LCDAVCTL1 = LCDAVCTL1_INIT;
        #endif
    #endif

    #if defined(P1OUT_INIT)
    P1OUT = P1OUT_INIT;
    #endif
    #if defined(P1DIR_INIT)
    P1DIR = P1DIR_INIT;
    #endif
    #if defined(P1SEL_INIT)
    P1SEL = P1SEL_INIT;
    #endif

    #if defined(P2OUT_INIT)
    P2OUT = P2OUT_INIT;
    #endif
    #if defined(P2DIR_INIT)
    P2DIR = P2DIR_INIT;
    #endif
    #if defined(P2SEL_INIT)
    P2SEL = P2SEL_INIT;
    #endif

    #if defined(P3OUT_INIT)
    P3OUT = P3OUT_INIT;
    #endif
    #if defined(P3DIR_INIT)
    P3DIR = P3DIR_INIT;
    #endif
    #if defined(P3SEL_INIT)
    P3SEL = P3SEL_INIT;
    #endif

    #if defined(P4OUT_INIT)
    P4OUT = P4OUT_INIT;
    #endif
    #if defined(P4DIR_INIT)
    P4DIR = P4DIR_INIT;
    #endif
    #if defined(P4SEL_INIT)
    P4SEL = P4SEL_INIT;
    #endif

    #if defined(P5OUT_INIT)
    P5OUT = P5OUT_INIT;
    #endif
    #if defined(P5DIR_INIT)
    P5DIR = P5DIR_INIT;
    #endif
    #if defined(P5SEL_INIT)
    P5SEL = P5SEL_INIT;
    #endif

    #if defined(P6OUT_INIT)
    P6OUT = P6OUT_INIT;
    #endif
    #if defined(P6DIR_INIT)
    P6DIR = P6DIR_INIT;
    #endif
    #if defined(P6SEL_INIT)
    P6SEL = P6SEL_INIT;
    #endif

    #if defined(IO_EXPANDER_SUPPORT)
    set_io_expander(0, 0);
    #endif
    
    #if defined(BASIC_LCD_SUPPORT)
    display_startup_message();
    #endif

    #if defined(__MSP430_HAS_DCO__)
    /* Set up the DCO clock */
    BCSCTL1 |= (RSEL0 | RSEL1 | RSEL2); /* Select the highest nominal freq */
    BCSCTL2 |= DCOR;                    /* Select the external clock control resistor pin */
    DCOCTL = 0xFF;                      /* Select the highest speed. */
    #endif
    #if defined(__MSP430_HAS_FLLPLUS__)  ||  defined(__MSP430_HAS_FLLPLUS_SMALL__)
    FLL_CTL0 |= XCAP10PF;               /* Configure load caps */
        #if defined(XT2OFF)
    FLL_CTL1 |= XT2OFF;
        #endif
    SCFI0 = FLLD_1;                     /* Freq = 1.024MHz */
    SCFQCTL = 32 - 1;
    FLL_CTL0 |= DCOPLUS;
    /* There seems no benefit in waiting for the FLL to settle at this point. */
    #endif

    #if defined(LIMP_MODE_SUPPORT)
    samples_per_second = LIMP_SAMPLES_PER_10_SECONDS/10;
    #else
    samples_per_second = SAMPLES_PER_10_SECONDS/10;
    #endif

    #if defined(__MSP430_HAS_TA3__)  &&  defined(__MSP430_HAS_ADC12__)
    /* Use timer A to control the ADC sampling interval, and the ADC on/off timing. */
    /* TACCR0 determines the sample period */
    TAR = 0;
        #if defined(LIMP_MODE_SUPPORT)
    TACCR0 = (SAMPLE_PERIOD*LIMP_SAMPLING_RATIO) - 1;
    TACCR1 = (SAMPLE_PERIOD*LIMP_SAMPLING_RATIO) - 3;
    TACCR2 = (SAMPLE_PERIOD*LIMP_SAMPLING_RATIO) - 4;
        #else
    TACCR0 = SAMPLE_PERIOD - 1;
    TACCR1 = SAMPLE_PERIOD - 3;
    TACCR2 = SAMPLE_PERIOD - 4;
        #endif
    TACCTL0 = 0;
    TACCTL1 = OUTMOD_3;
        #if defined(FINE_ENERGY_PULSE_TIMING_SUPPORT)
    TACCTL2 = OUTMOD_0 | OUT;           /* Turn off the pulse LED */
        #endif    
    TACTL = TACLR | MC_1 | TASSEL_1;
    #endif

    #if defined(__MSP430_HAS_TA3__)  &&  defined(__MSP430_HAS_SD16_3__)
    /* Use timer A to control the ADC sampling interval in limp mode. */
    /* CCR0 determines the sample period - 1024Hz */
    TAR = 0;
    TACCR0 = 32 - 1;
    TACCTL0 = 0;
    TACCTL1 = OUTMOD_3;
    TACTL = TACLR | MC_1 | TASSEL_1;
    #endif

    #if defined(PWM_DITHERING_SUPPORT)
    /* Configure timer B to generate a dithering signal, to be added to the     */
    /* analogue signals, something like this.                                   */
    /*                                                                          */
    /*   -----------------                100n                                  */
    /*                    |    __47k_     ||    __1M__       __4K7__            */
    /*                TB1 |->-|______|-- -||---|______|->---|_______|--< Signal */
    /*                    |             | ||              |                     */
    /*                    |           -----               |                     */
    /*                    |           -----2n2            |                     */
    /*                    |             |                 |                     */
    /*                    |            GND                |                     */
    /*                    |                               |                     */
    /*                A0  |-<-----------------------------                      */
    /*                    |                                                     */
    P2SEL |= BIT2;                      /* Select P2.2 for PWM output */
    P2DIR |= BIT2;                      /* Select P2.2 for PWM output */

    TBR = 0;
    TBCCR0 = PWM_FREQ - 1;              /* load period register */
    TBCCR1 = PWM_MID_POINT;             /* start with 50% PWM duty cycle */
    TBCCR2 = PWM_FREQ - 1;
    TBCCTL0 = OUTMOD_4;                 /* set outmode 4 for toggle */
    TBCCTL1 = OUTMOD_6 | CLLD_1;        /* set outmode 6 Toggle/set */
                                        /* load new CCR1 when TBR = 0 */
    TBCCTL2 = OUTMOD_4;
    TBCTL = TBCLR | MC_1 | TBSSEL_2;    /* start TIMER_B up mode, SMCLK as input clock */
    #endif

    #if defined(__MSP430_HAS_ADC12__)
    /* Set up the ADC12 */
    /* Disable conversion while changing the settings */
    ADC12CTL0 = 0;
        #if defined(SINGLE_PHASE)
    ADC12MCTL0 = SREF_0 | AGND_INPUT;
    ADC12MCTL1 = SREF_0 | NEUTRAL_CURRENT_INPUT;
    ADC12MCTL2 = SREF_0 | AGND_INPUT;
    ADC12MCTL3 = SREF_0 | LIVE_CURRENT_INPUT;
    ADC12MCTL4 = SREF_0 | AGND_INPUT;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产欧美一区二区三区| a在线播放不卡| 日本一区二区三区电影| 91黄色免费版| 国产成人精品aa毛片| 亚洲成av人片在线| 中文字幕一区不卡| 精品国产乱码久久久久久夜甘婷婷| 99久久伊人网影院| 久久精品国产久精国产| 亚洲成人综合在线| 国产精品久久久久久久蜜臀| 日韩免费一区二区| 欧美无砖专区一中文字| 高清不卡在线观看av| 日韩av中文字幕一区二区三区| 日韩一区有码在线| 久久精品网站免费观看| 日韩午夜在线播放| 欧美午夜精品免费| 91女厕偷拍女厕偷拍高清| 国产一区二区三区电影在线观看| 亚洲图片欧美综合| 亚洲人吸女人奶水| 国产精品美女www爽爽爽| 精品国产在天天线2019| 欧美精品v国产精品v日韩精品| 一本大道av伊人久久综合| 国产成人av电影在线观看| 韩日欧美一区二区三区| 麻豆免费看一区二区三区| 五月天一区二区三区| 亚洲色图.com| 综合在线观看色| 国产精品人成在线观看免费 | 色综合久久久久久久久| 国产超碰在线一区| 国产麻豆精品95视频| 久久av中文字幕片| 久久国内精品视频| 久久99精品国产麻豆不卡| 日本伊人午夜精品| 日韩精品一二区| 丝袜美腿亚洲综合| 日韩精品电影一区亚洲| 秋霞午夜鲁丝一区二区老狼| 日韩国产欧美在线视频| 日韩专区一卡二卡| 欧美aaaaaa午夜精品| 免费观看30秒视频久久| 免费人成黄页网站在线一区二区| 日韩精彩视频在线观看| 日本美女视频一区二区| 精品在线你懂的| 国产一区 二区 三区一级| 国产一区二区三区久久悠悠色av| 国产不卡视频在线观看| 成人av在线播放网站| 91视频www| 欧美日韩中文字幕一区二区| 91精品国产品国语在线不卡| 欧美成人伊人久久综合网| 国产亚洲综合av| 中文字幕精品在线不卡| 一区二区三区在线免费| 婷婷一区二区三区| 国产精品自拍av| 99久久er热在这里只有精品15 | 成人v精品蜜桃久久一区| av在线一区二区| 欧洲人成人精品| 欧美一区二区免费视频| 久久久久久久久久电影| 中文字幕日韩精品一区| 午夜私人影院久久久久| 韩国精品主播一区二区在线观看| 成人黄页毛片网站| 欧美网站大全在线观看| 日韩一区二区三区视频在线 | 中文字幕综合网| 亚洲最大成人综合| 久久97超碰国产精品超碰| 国产成人久久精品77777最新版本| 成人激情文学综合网| 欧美日韩一区三区| 久久久亚洲精品一区二区三区| 综合精品久久久| 美腿丝袜一区二区三区| 91在线观看美女| 日韩一级黄色片| 日韩毛片高清在线播放| 日韩激情视频在线观看| 成av人片一区二区| 日韩一区二区三区免费看| 综合电影一区二区三区 | 国产91露脸合集magnet| 欧美三级中文字| 国产精品网站导航| 日韩国产欧美三级| 成人久久视频在线观看| 欧美精品少妇一区二区三区 | 国产精品久久久久久久久搜平片 | 国产欧美一二三区| 欧美韩国日本不卡| 91麻豆蜜桃一区二区三区| 久久男人中文字幕资源站| 欧美一区二区免费| 欧美私模裸体表演在线观看| 日韩女同互慰一区二区| 一区二区在线观看视频在线观看| 国产69精品久久99不卡| 欧美高清激情brazzers| 亚洲国产综合色| 色激情天天射综合网| 亚洲美女视频在线| 色综合久久六月婷婷中文字幕| 亚洲免费观看视频| 欧美日本韩国一区二区三区视频| 欧美在线影院一区二区| 亚洲综合男人的天堂| 日韩美一区二区三区| 欧美aaaaa成人免费观看视频| 欧美日韩中文字幕一区二区| 亚洲成人一区二区| 精品视频123区在线观看| 久久蜜臀精品av| 欧美三级韩国三级日本三斤| 欧美人与z0zoxxxx视频| 亚洲欧洲三级电影| 国产精品系列在线播放| 日韩一级黄色片| 日本欧美一区二区三区乱码| 欧美亚洲国产一区在线观看网站| 中文字幕一区三区| k8久久久一区二区三区| 国产婷婷色一区二区三区| 国产自产高清不卡| 欧美大片日本大片免费观看| 青青草97国产精品免费观看 | caoporen国产精品视频| 国产欧美日韩精品在线| 国产成人精品午夜视频免费| 欧美精品一区二区三区很污很色的 | 国产老肥熟一区二区三区| 精品国产免费久久| 国产aⅴ综合色| 综合久久国产九一剧情麻豆| 91一区二区在线观看| 亚洲在线成人精品| 欧美日韩一区二区三区四区五区| 亚洲综合激情网| 欧美精三区欧美精三区 | 成人午夜激情影院| 中文字幕一区二区三区四区| 色噜噜狠狠成人网p站| 亚洲中国最大av网站| 777久久久精品| 久久精品二区亚洲w码| 久久亚洲二区三区| thepron国产精品| 亚洲一区在线播放| 欧美一区二区视频免费观看| 久久99精品国产.久久久久| 久久久久久久久久久黄色| 成人av先锋影音| 亚洲一区视频在线| 精品国内片67194| 成av人片一区二区| 经典三级视频一区| 国产精品色噜噜| 欧美视频一区二区在线观看| 蜜桃av一区二区三区| 国产欧美日韩在线观看| 91蜜桃在线免费视频| 午夜av一区二区三区| 久久精品一区蜜桃臀影院| 成人va在线观看| 五月综合激情日本mⅴ| 久久久国产精华| 在线观看国产日韩| 激情久久五月天| 亚洲综合另类小说| 精品粉嫩超白一线天av| 91老司机福利 在线| 日本欧美一区二区三区乱码| 中文字幕第一区综合| 欧美日本一区二区在线观看| 丰满岳乱妇一区二区三区| 亚洲成人福利片| 国产免费观看久久| 91精品国产综合久久香蕉麻豆| 国产大陆精品国产| 天堂午夜影视日韩欧美一区二区| 久久综合九色综合97婷婷女人| 色国产精品一区在线观看| 久久99精品国产麻豆婷婷洗澡| 亚洲资源在线观看| 国产精品无遮挡| 精品久久久久av影院| 91福利社在线观看|