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

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

?? exercise-8.c

?? TI MSP430針對cap sense 按鍵的源碼, 可實現單擊或滑動鍵, 如IPOD上的人機接口.
?? C
字號:
/* Exercise 8

    The simple voice recorder from exercise 6, modified to use a low-complexity ADPCM codec to
    quadruple the storage time.
*/
#include <stdint.h>
#include <msp430xG43x.h>

#define AUDIO_MEM_START     0x2000
#define AUDIO_MEM_END       0xFE00

typedef struct
{
    int16_t last;
    int16_t step_index;
} adpcm_state_t;

/* ADPCM working data */
adpcm_state_t state;
uint16_t adpcm_val = 0;
int16_t adpcm_nibble = 0;

/* Routines to convert 12 bit linear samples to the ADPCM coding format
   originated by Oki, and widely used in CTI. */
static const int16_t step_size[49] =
{
      16,   17,   19,   21,   23,   25,   28,   31,
      34,   37,   41,   45,   50,   55,   60,   66,
      73,   80,   88,   97,  107,  118,  130,  143,
     157,  173,  190,  209,  230,  253,  279,  307,
     337,  371,  408,  449,  494,  544,  598,  658,
     724,  796,  876,  963, 1060, 1166, 1282, 1408,
    1552
};

static const int16_t step_adjustment[8] =
{
    -1, -1, -1, -1, 2, 4, 6, 8
};

/* Decode the lower 4 bits of "adpcm" */
int16_t adpcm_decode(uint8_t adpcm)
{
    int16_t e;
    int16_t ss;
    int16_t linear;

    ss = step_size[state.step_index];
    e = ss >> 3;
    if (adpcm & 0x01)
        e += (ss >> 2);
    /*endif*/
    if (adpcm & 0x02)
        e += (ss >> 1);
    /*endif*/
    if (adpcm & 0x04)
        e += ss;
    /*endif*/
    if (adpcm & 0x08)
        e = -e;
    /*endif*/
    linear = state.last + e;

    /* Saturate the values to +/- 2^11 (supposed to be 12 bits) */
    if (linear > 2047)
        linear = 2047;
    else if (linear < -2048)
        linear = -2048;
    /*endif*/

    state.last = linear;
    state.step_index += step_adjustment[adpcm & 0x07];
    if (state.step_index < 0)
        state.step_index = 0;
    else if (state.step_index > 48)
        state.step_index = 48;
    /*endif*/
    /* Note: the result here is a 12 bit value */
    return  linear;
}

/* Encode to a 4 bit ADPCM value */
uint8_t adpcm_encode(int16_t linear)
{
    int16_t e;
    int16_t ss;
    uint8_t adpcm;

    /* Saturate the values to +/- 2^11 (supposed to be 12 bits) */
    if (linear > 2047)
        linear = 2047;
    else if (linear < -2048)
        linear = -2048;
    /*endif*/

    ss = step_size[state.step_index];
    e = linear - state.last;
    adpcm = (uint8_t) 0x00;
    if (e < 0)
    {
        adpcm = (uint8_t) 0x08;
        e = -e;
    }
    /*endif*/
    if (e >= ss)
    {
        adpcm |= (uint8_t) 0x04;
        e -= ss;
    }
    /*endif*/
    if (e >= (ss >> 1))
    {
        adpcm |= (uint8_t) 0x02;
        e -= ss;
    }
    /*endif*/
    if (e >= (ss >> 2))
        adpcm |= (uint8_t) 0x01;
    /*endif*/

    /* Use the decoder to set the estimate of the last sample. */
    /* It also will adjust the step_index for us. */
    state.last = adpcm_decode(adpcm);
    return  adpcm;
}

/* Initialise the ADPCM state */
void adpcm_init(void)
{
    state.last = 0;
    state.step_index = 0;
}

int16_t *ptr;

void record(void)
{
    long int i;

    /* Set up timer A to kick the ADC at 6.5536kHz, which will be our audio
     * sampling rate. */
    TAR = 0;
    TACCR0 = 5 - 1;
    TACCR1 = 5 - 2;
    TACCTL0 = 0;
    TACCTL1 = OUTMOD_3;
    TACTL = TACLR | MC_1 | TASSEL_1;

    /* Make the earpiece pins outputs driven to 0, to power the mic */
    P6SEL &= ~(BIT5 | BIT3);
    P6DIR |= (BIT5 | BIT3);
    P6OUT &= ~(BIT5 | BIT3);

    /* Set up the mic amp */
    /* Input 0 is the mic signal.
     * Output goes to the feedback resistor.
     * We want a general purpose amp.
     * We want DAC1 to bias the +ve input of the amp.
     * We want the amp in high performance mode. */
    P6SEL |= (BIT1 | BIT0);
    OA0CTL0 = OAN_0 | OAP_3 | OAPM_3 | OAADC1;
    OA0CTL1 = OAFC_0;
    /* Second amplifier stage */
    OA1CTL0 = OAN_2 | OAP_3 | OAPM_3 | OAADC0;              // -ve=OA1I0, +ve=DAC1
    OA1CTL1 = OAFC_6 | OAFBR_4;

    /* Must disable conversion while reprogramming the ADC */
    ADC12CTL0 &= ~ENC;
    ADC12CTL0 = ADC12ON | SHT0_4 | REFON | REF2_5V;         // Turn on the ADC12, and set the sampling time
    ADC12CTL1 = SHP | SHS_1 | CONSEQ_2;                     // Use sampling timer, single sample repeating, TA1 trigger
    ADC12MCTL0 = INCH_13 | SREF_1;                          // ref += Vref, channel = A13 = OA1
    ADC12IE = BIT0;
    ADC12IFG = 0x00;

    /* Configure DAC 1 to provide bias for the mic amplifier */
    P6SEL |= BIT7;
    DAC12_1CTL = DAC12CALON | DAC12IR | DAC12AMP_7 | DAC12ENC;
    DAC12_1DAT = 0x800;

    for (ptr = (int16_t *) AUDIO_MEM_START;  ptr != (int16_t *) AUDIO_MEM_END;  ptr += 0x100)
    {
        FCTL3 = FWKEY;                  /* Lock = 0 */
        FCTL1 = FWKEY | ERASE;
        *ptr = 0;                       /* Erase flash segment */
        FCTL1 = FWKEY;                  /* Erase, write = 0 */
        FCTL3 = FWKEY | LOCK;
    }

    adpcm_init();
    adpcm_val = 0;
    adpcm_nibble = 0;

    /* Wait for the mic amp to settle */
    for (i = 150000;  i > 0;  i--)
        _NOP();

    /* Set the recording off, and wait in LPM0 for it to complete */
    _EINT();
    P1OUT |= BIT0;                      /* Turn on the LED */
    ADC12CTL0 |= ENC;
    ptr = (int16_t *) AUDIO_MEM_START;
    for (;;)
    {
        _BIS_SR(LPM0_bits);
        _NOP();
        if (ptr >= (int16_t *) AUDIO_MEM_END)
            break;
    }
    ADC12CTL0 &= ~ENC;
    P1OUT &= ~BIT0;                     /* Turn off the LED */
    _DINT();
}

void play(void)
{
    /* Ensure the ADC12 is not running, but is providing the reference
       voltage for the DAC12. */
    ADC12CTL0 &= ~ENC;
    ADC12CTL0 = ADC12ON | REFON | REF2_5V;
    ADC12IE = 0;
    ADC12CTL0 |= ENC;

    /* Set up timer A to kick the DAC at 6.5536kHz, which will be our audio
     * sampling rate. */
    TAR = 0;
    TACCR0 = 5 - 1;
    TACCR1 = 5 - 2;
    TACCTL0 = CCIE;
    TACCTL1 = OUTMOD_3;
    TACTL = TACLR | MC_1 | TASSEL_1;

    /* Make a differential drive for the earpiece */
    P6SEL |= (BIT5 | BIT3);
    /* Chain two amps to make an inverting buffer with a gain of one */
    OA0CTL0 = OAP_2 | OAPM_3;
    OA0CTL1 = OAFC_1;
    OA1CTL0 = OAN_2 | OAP_3 | OAPM_3 | OAADC1;
    OA1CTL1 = OAFC_6 | OAFBR_2;
    /* Use the third amp as a non-inverting buffer with a gain of one */
    OA2CTL0 = OAP_2 | OAPM_3 | OAADC1;
    OA2CTL1 = OAFC_1;

    /* Configure DAC0 to provide the audio signal for the earpiece amp.
       The data will be latched by TACCR1 */
    DAC12_0CTL = DAC12CALON | DAC12IR | DAC12AMP_7 | DAC12ENC | DAC12LSEL_2;
    DAC12_0DAT = 0x800;
    /* Configure DAC1 to provide a bias signal for the inverting PGA */
    DAC12_1CTL = DAC12CALON | DAC12IR | DAC12AMP_7 | DAC12ENC;
    DAC12_1DAT = 0x800;

    adpcm_init();
    adpcm_val = 0;
    adpcm_nibble = 0;

    _EINT();
    ptr = (int16_t *) AUDIO_MEM_START;
    for (;;)
    {
        _BIS_SR(LPM0_bits);
        _NOP();
        //if (ptr >= (int16_t *) AUDIO_MEM_END)
        //    break;
    }
    _DINT();
}

void main(void)
{
    WDTCTL = WDTPW | WDTHOLD;       // Stop watchdog timer

    SCFI0 = FN_3 | FLLD_4;
    FLL_CTL0 = XCAP18PF;            // set load capacitance for xtal
    SCFQCTL = 64 - 1;               // 256*32768Hz = 8.388608MHz
    FLL_CTL0 |= DCOPLUS;

    P1DIR = 0xE7;                   // All P1.x outputs
    P1OUT = 0;                      // All P1.x reset
    P2DIR = 0x00;                   // All P2.x outputs
    P2OUT = 0;                      // All P2.x reset
    P3DIR = 0xFF;                   // All P3.x outputs
    P3OUT = 0;                      // All P3.x reset
    P4DIR = 0xFF;                   // All P4.x outputs
    P4OUT = 0;                      // All P4.x reset
    P5DIR = 0xFF;                   // All P5.x outputs
    P5OUT = 0;                      // All P5.x reset
    P6DIR = 0xFF;                   // All P6.x outputs
    P6OUT = 0;                      // All P6.x reset

    /* Configure UART0 */
    UCTL0 = CHAR;                   /* 8-bit character */
    UTCTL0 = SSEL1;                 /* UCLK = SMCLK */
    UBR00 = 72;                     /* 115200 bps, based on the 256*32768Hz clock */
    UBR10 = 0;
    UMCTL0 = 0x7F;
    P2SEL |= (BIT5 | BIT4);
    U0ME |= UTXE0;                  /* Enable only USART0 TXD */

    record();

    for (;;)
        play();
    _NOP();
}

#pragma vector=ADC_VECTOR
__interrupt void adc_interrupt(void)
{
    int16_t val;

    val = ADC12MEM0;

    if (ptr < (int16_t *) AUDIO_MEM_END)
    {
        adpcm_val <<= 4;
        adpcm_val |= adpcm_encode(val - 0x800);
        if (++adpcm_nibble == 4)
        {
            FCTL3 = FWKEY;                      /* Lock = 0 */
            FCTL1 = FWKEY | WRT;
            *ptr++ = adpcm_val;                 /* Write to the flash */
            FCTL1 = FWKEY;                      /* Erase, write = 0 */
            FCTL3 = FWKEY | LOCK;
            adpcm_nibble = 0;
        }
        val >>= 4;
        TXBUF0 = val;
    }
    else
    {
        _BIC_SR_IRQ(LPM3_bits);
    }
}

#pragma vector=TIMERA0_VECTOR
__interrupt void timera_interrupt(void)
{
    int16_t val;

    if (ptr >= (int16_t *) AUDIO_MEM_END)
    {
        adpcm_init();
        ptr = (int16_t *) AUDIO_MEM_START;
    }
    if (ptr < (int16_t *) AUDIO_MEM_END)
    {
        if (++adpcm_nibble == 4)
        {
            adpcm_val = *ptr++;
            adpcm_nibble = 0;
        }
        val = adpcm_decode((adpcm_val >> 12) & 0xF);
        adpcm_val <<= 4;
        val += 0x800;
        DAC12_0DAT = val;

        val >>= 4;
        TXBUF0 = val;
    }
    else
    {
        _BIC_SR_IRQ(LPM3_bits);
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品无码永久免费888| 91久久一区二区| 久久久久一区二区三区四区| 日本不卡的三区四区五区| 91精品午夜视频| 男人的j进女人的j一区| 日韩美一区二区三区| 久久电影网站中文字幕| 国产欧美一区二区精品婷婷| 成人av资源下载| 亚洲精品国产无天堂网2021| 在线观看免费成人| 免费观看在线综合色| xfplay精品久久| 成人性色生活片免费看爆迷你毛片| 国产精品国产三级国产专播品爱网 | 欧美高清精品3d| 久久99久久精品| 国产精品久久久久久久午夜片| 99久久久国产精品| 亚洲综合一二三区| 日韩三级.com| 成人一区二区三区在线观看| 亚洲精品久久7777| 日韩免费高清视频| 99综合影院在线| 视频一区视频二区中文| 久久亚洲综合色一区二区三区| 成人av片在线观看| 偷拍一区二区三区四区| 国产午夜精品久久久久久免费视| 99综合影院在线| 蜜桃av一区二区三区| 久久精品欧美一区二区三区不卡 | 国产欧美日韩另类一区| 91成人免费网站| 国产中文字幕一区| 亚洲最新在线观看| 国产视频不卡一区| 9191国产精品| 91在线观看污| 久久国产免费看| 一区二区三区不卡视频| 国产无一区二区| 在线播放中文字幕一区| 国产aⅴ综合色| 美女视频网站久久| 一区二区成人在线观看| 久久精品夜夜夜夜久久| 欧美熟乱第一页| 成人免费观看av| 琪琪一区二区三区| 亚洲国产日韩a在线播放性色| 国产欧美一区在线| 欧美一级黄色片| 欧美日韩一本到| av不卡在线播放| 国产一区二区三区在线观看免费视频| 亚洲精品国产无套在线观 | 中文字幕欧美三区| 欧美高清你懂得| 欧美性猛交xxxxxxxx| 成人精品一区二区三区四区 | 国产日韩精品一区| 日韩一级二级三级精品视频| 欧美影视一区二区三区| 99久久99久久综合| 成人亚洲精品久久久久软件| 韩国在线一区二区| 日本欧美韩国一区三区| 香蕉成人伊视频在线观看| 亚洲精品视频在线观看网站| 国产精品不卡视频| 亚洲人成网站色在线观看| 久久精品人人爽人人爽| 久久久青草青青国产亚洲免观| 欧美一二三区在线| 欧美日韩美女一区二区| 欧美亚男人的天堂| 色诱视频网站一区| 日本道色综合久久| 在线一区二区三区| 91福利社在线观看| 日本丶国产丶欧美色综合| 在线观看视频一区| 欧美午夜片在线看| 欧美无人高清视频在线观看| 欧美一a一片一级一片| 欧美日韩一区二区在线观看| 欧美性淫爽ww久久久久无| 欧美中文一区二区三区| 欧美日韩一区二区不卡| 91精品国产综合久久久久久漫画| 在线电影欧美成精品| 日韩一区二区电影| 精品国产一区二区精华| 国产午夜一区二区三区| 国产精品全国免费观看高清| 亚洲欧美国产三级| 一区二区三区四区激情| 午夜不卡在线视频| 国产中文字幕精品| 不卡电影免费在线播放一区| 91福利区一区二区三区| 欧美日韩国产首页| 欧美不卡一区二区三区| 国产精品少妇自拍| 夜夜嗨av一区二区三区中文字幕| 天天综合日日夜夜精品| 国内精品免费**视频| www.成人在线| 欧美色偷偷大香| 欧美精品一区二| 一区免费观看视频| 免费国产亚洲视频| 国产福利一区二区| 91福利资源站| 久久这里只有精品6| 亚洲欧美激情插| 美腿丝袜一区二区三区| 成人一区二区在线观看| 欧美日韩国产高清一区二区三区 | 777久久久精品| 日本一区二区视频在线观看| 亚洲伊人伊色伊影伊综合网| 狠狠色狠狠色综合| 97精品视频在线观看自产线路二 | 日韩欧美一区中文| 中文字幕日韩一区二区| 日韩成人精品在线| 色综合中文字幕国产| 91精品国产手机| 一色屋精品亚洲香蕉网站| 免费高清不卡av| 色老综合老女人久久久| 精品盗摄一区二区三区| 亚洲高清在线视频| 成人妖精视频yjsp地址| 日韩欧美一级二级| 亚洲综合色成人| aaa欧美日韩| 久久噜噜亚洲综合| 日韩精品一区第一页| 一本大道久久a久久综合| 久久精品视频在线看| 人人爽香蕉精品| 91久久精品日日躁夜夜躁欧美| 久久伊人蜜桃av一区二区| 亚欧色一区w666天堂| 91网站最新地址| 欧美激情综合五月色丁香| 精品一区二区三区av| 欧美精品一级二级三级| 最近日韩中文字幕| 国产sm精品调教视频网站| 精品少妇一区二区三区免费观看 | 偷拍日韩校园综合在线| 99re这里只有精品首页| 国产欧美视频一区二区| 激情综合色综合久久| 欧美一区二区三区四区久久 | 日韩一区二区三区电影| 亚洲五码中文字幕| 一本大道久久a久久精品综合| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 婷婷久久综合九色综合绿巨人| 色视频欧美一区二区三区| 亚洲欧美在线另类| 99久久免费精品| 综合激情成人伊人| av资源网一区| 国产精品美女久久久久久久网站| 美女诱惑一区二区| 欧美色网一区二区| 午夜精品视频在线观看| 在线观看国产日韩| 亚洲一区二区三区影院| 色欧美日韩亚洲| 日本一区二区动态图| 夜色激情一区二区| 欧美区视频在线观看| 亚洲午夜一二三区视频| 欧美三区在线视频| 偷窥少妇高潮呻吟av久久免费| 精品视频一区三区九区| 亚洲一区二区三区四区五区中文| 国产综合成人久久大片91| 久久一区二区三区四区| 男人操女人的视频在线观看欧美| 欧美日韩一区不卡| 视频一区二区三区入口| 91麻豆精品国产91久久久更新时间| 日本视频一区二区三区| 日韩一区和二区| 精品亚洲porn| 国产精品电影一区二区| 97se狠狠狠综合亚洲狠狠| 亚洲蜜桃精久久久久久久| 成人av资源下载| 亚洲影视在线观看|