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

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

?? io_lite.c

?? TDK 6521 SOC 芯片 DEMO程序
?? C
字號:
/***************************************************************************
 * This code and information is provided "as is" without warranty of any   *
 * kind, either expressed or implied, including but not limited to the     *
 * implied warranties of merchantability and/or fitness for a particular   *
 * purpose.                                                                *
 *                                                                         *
 * Copyright (C) 2006 Teridian Semiconductor Corp. All Rights Reserved.    *
 ***************************************************************************/
//**************************************************************************
//  DESCRIPTION: 71M651x POWER METER - IO Routines.
// 
//  AUTHOR:  RGV
//
//  HISTORY: See end of file
//**************************************************************************
// File: IO_LITE.C
//               
// IO subroutines for use by the calibration loader.
//
#include "options.h"
// if the CLI's superior serial logic is available, use it.
#if CAL_LDR && !CLI
#include <ctype.h>
#include "irq.h"
#include "batmodes.h"
#include "main.h"
#include "defaults.h"
#include "meter.h"
#include "io.h"  //check definitions against the actual code
#define XON 0x11
#define XOFF 0x13

/* the choice of the hardware abstraction layer (HAL)
 * adapts this code to either serial port */
#if SERIAL0
#include "ser0.h" /* include the HAL for UART 0 */
#elif SERIAL1
#include "ser1.h" /* include the HAL for UART 1 */
#else
#error no known serial port selected
#endif
#include "io.h"   // test routines here against the interface

uint8_t mpu_div = -1;
uint8_t my_batmode = 0;
bool xmit_rdy;
bool xoff_sent;
#define sbuf 32  // must be a power of two
#define mbuf (sbuf - 1)
uint8_t achRx[sbuf];
uint8d_t ichRxIn, ichRxOut, cchRx;

// lightweight timerless timeout using accumulation intervals
uint32_t my_cai;
bool io_timeout;  // the flag read by high level protocols

#pragma save
#pragma NOAREGS
// initialize the serial port, if it's needed
static void init (void) small reentrant
{
   if (mpu_div != (CONFIG0 & MPU_DIV) || my_batmode != batmode_is_brownout())
   {
       uint8_t baud;
       irq_disable();
       #if SERIAL0
       baud = defaults[BAUD0_IDX];
       #elif SERIAL1
       baud = defaults[BAUD1_IDX];
       #else
       #error unknown serial port
       #endif
       #if M6520
       if (BATTERY_MODE_ENABLE)
           baud = _RATE_300;
       #endif
       ser_initialize(baud);
       mpu_div = CONFIG0 & MPU_DIV;
       my_batmode = batmode_is_brownout();
       ichRxIn = ichRxOut = cchRx = 0;
       xmit_rdy = 0;
       xoff_sent = 1;
       ser_enable_rcv_rdy(); // enable the receiver interrupt
       irq_enable();
       my_cai = cai;
       io_timeout = 0;
   }
}
#pragma restore

// very basic polling output; uses the above serial driver
#pragma save
#pragma NOAREGS
void putc (uint8_t ch) small reentrant
{
   init();
   // the low level driver is designed so that one can poll
   // the TI bit to determine that the transmit buffer is ready
   // for another character.  Alas, enabling the interrupt
   // causes this bit to be reset in the interrupt routine.
   while (!xmit_rdy)
   {
       main_background ();
       init();
   }
   xmit_rdy = 0;
   ser_xmit(ch);
}
#pragma restore

bool cmd_pending (void)
{
    if (cchRx <= 0)
    {
        init();
        return 0;
    }
    else
        return 1;
}

// very basic interrupting input; uses the above serial driver
#pragma save
#pragma NOAREGS
uint8_t getc (void) small reentrant
{
    uint8_t ch;
    init ();
    if (io_timeout)
        return 0;
    else
    {
        my_cai = cai;
        while (!cmd_pending())
        {
            main_background (); // runs everything except serial IO
            init ();
            if (xoff_sent)
            {
                putc(XON);
                xoff_sent = 0;
            }
            // little timer that counts accumulation intervals
            // This saves the code space of stm.c
            if ((cai - my_cai) > 30)
            {
                io_timeout = 1;
                return 0;
            }
        } 
        ichRxOut &= mbuf;
        ch = achRx[ ichRxOut++ ];
        irq_disable();
        --cchRx;
        irq_enable();
        return ch;
    }
}
#pragma restore

#pragma save
#pragma NOAREGS
void cli_in (void) small reentrant
{
    static uint8_t data rx;

    rx = ser_rcv();

    // XON/XOFF is handled by sending XON when the calibration loader
    // is waiting for a message, and sending XOFF after the message's
    // checksum is received.  This is just a buffering arrangement
    // so the PC's driveling isn't lost
    if (XON != rx && XOFF != rx && cchRx < sbuf)
    {
        ichRxIn &= mbuf;
        achRx[ ichRxIn++ ] = rx;
        irq_disable();
        ++cchRx;
        irq_enable();
        if (cchRx > (sbuf/4) && xmit_rdy && !xoff_sent)
        {
            xmit_rdy = 0;
            ser_xmit(XOFF);
            xoff_sent = 1;
        }
    }
}
#pragma restore

#pragma save
#pragma NOAREGS
// the low level driver is designed so that one can poll
// the TI bit to determine that the transmit buffer is ready
// for another character.  Alas, enabling the interrupt
// causes an interrupt when TI is set, because there is no
// separate enable bit for the transmit interrupt.
void cli_out (void) small reentrant
{
    xmit_rdy = 1;
    ser_disable_xmit_rdy();
}
#pragma restore

// Send single ASCII hex or decimal digit to DTE.
static void send_digit (uint8_t c)
{
    if (c > 9)
       c += 'A' - 10;
    else
       c += '0';
    
    putc ( c );
}

void send_hex (uint8_t c)
{
    send_digit (c >> 4);
    send_digit (c & 0x0F);
}

// Send ROM string out PC UART.
#pragma save
#pragma NOAREGS
void start_tx_rslt (uint8r_t *pc) small reentrant
{
    uint8_t c;
    c = *pc;
    while (c)
    {
        putc ( c );
        ++pc;
        c = *pc;
    }
}
#pragma restore

#undef NULL
#undef LF
#undef CRET
#define NULL    0x00
#define LF      0x0A     // LINE FEED
#define CRET    0x0D     // CARRIAGE RETURN
static uint8r_t v_crlf[] = { CRET, LF, NULL };
#pragma save
#pragma NOAREGS
void send_crlf (void) small reentrant    // Send <CR><LF> out PC UART.
{
    start_tx_rslt (v_crlf);
}
#pragma restore

// Get next hexadecimal digit.
#undef CASE_
#define CASE_   0x20
static uint8_t rcv_digit (void)                     
{
    uint8_t c;

    do {
        c = getc ();
        if (io_timeout)
            return 0;
    } while (!isxdigit(c));

    c -= '0';              // '0' mapped to  0;

    if (c >= 10)
    {
        c &= ~CASE_;
        c -= 'A' - '0' - 10;            // 'A' mapped to 10.
    }

    return (c);
}

uint8_t rcv_hex (void)    // Convert ascii hexdecimal byte to binary 
{
    return ((rcv_digit () << 4) | rcv_digit ());
}

/***************************************************************************
 * History:
 * $Log: io_lite.c,v $
 * Revision 1.12  2006/03/10 00:03:40  tvander
 * Now selects its BAUD rate using DIO_8 for the 6520.
 *
 * Revision 1.11  2006/09/09 01:09:37  gmikef
 * *** empty log message ***
 *
 * Revision 1.10  2006/08/16 01:43:08  tvander
 * Only send one XOFF
 *
 * Revision 1.9  2006/08/09 00:56:34  tvander
 * *** empty log message ***
 *
 * Revision 1.8  2006/07/28 02:45:23  tvander
 * Fixed missing XON
 *
 * Revision 1.7  2006/07/25 00:27:59  tvander
 * Added timeout
 *
 * Revision 1.6  2006/07/19 01:53:08  tvander
 * Modified to do XON/XOFF
 *
 * Revision 1.5  2006/07/18 20:32:19  tvander
 * Quick & Dirty XON/XOFF scheme
 *
 * Revision 1.4  2006/07/07 00:53:44  tvander
 * Modified lightweight IO to change baudrates to adapt to clock changes.
 *
 * Revision 1.3  2006/06/08 18:24:55  tvander
 * Removed call to background
 *
 * Revision 1.2  2006/06/06 03:56:27  tvander
 * A lame substitute for io.c, but very compact.
 *
 * Revision 1.1  2006/05/27 01:35:05  tvander
 * *** empty log message ***
 *
 *
 * 2006 May 25; First Version. 
 * Copyright (C) 2006 Teridian Semiconductor Corp. All Rights Reserved.    *
 * this program is fully protected by the United States copyright          *
 * laws and is the property of Teridian Semiconductor Corporation.         *
 ***************************************************************************/
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品久久久久久动态图| 337p亚洲精品色噜噜狠狠| 国产日韩欧美a| 成人中文字幕合集| 国产精品久久久久久久久久久免费看| 韩国女主播成人在线观看| 久久久久久亚洲综合| 国产91丝袜在线播放| 自拍偷自拍亚洲精品播放| 在线中文字幕一区| 秋霞电影一区二区| 久久久亚洲午夜电影| av电影天堂一区二区在线| 一区二区三区高清不卡| 日韩午夜精品视频| 国产精品一品二品| 亚洲一区二区三区不卡国产欧美| 日韩午夜精品电影| 成人黄色电影在线| 亚洲国产综合视频在线观看| 精品国产不卡一区二区三区| 97精品电影院| 免费人成在线不卡| 国产精品美女久久久久aⅴ国产馆| 欧洲色大大久久| 国产激情一区二区三区桃花岛亚洲| 中文字幕字幕中文在线中不卡视频| 欧美老肥妇做.爰bbww| 国产精品一区二区三区乱码| 亚洲精品一二三| 精品免费99久久| 91视频观看视频| 久久机这里只有精品| 亚洲品质自拍视频| 欧美刺激午夜性久久久久久久| 99视频在线观看一区三区| 日韩二区在线观看| 综合亚洲深深色噜噜狠狠网站| 欧美一区二区高清| 日本高清不卡一区| 国产毛片精品视频| 午夜精品一区二区三区免费视频 | 色婷婷综合久久| 日韩专区一卡二卡| 亚洲图片激情小说| 2020日本不卡一区二区视频| 欧美私人免费视频| 成人教育av在线| 国内精品伊人久久久久影院对白| 亚洲高清视频在线| 《视频一区视频二区| 国产亚洲综合在线| 国产综合久久久久久久久久久久| 亚洲最快最全在线视频| 99久久精品一区| 精品国产免费一区二区三区四区| 在线视频你懂得一区| 成人短视频下载| 久88久久88久久久| 午夜精品影院在线观看| 在线观看日韩电影| 亚洲激情在线播放| 99精品热视频| 久久久久久97三级| 免费黄网站欧美| 欧美男女性生活在线直播观看| 国产精品不卡在线| 国产99久久久久久免费看农村| 正在播放亚洲一区| 亚洲大尺度视频在线观看| av电影一区二区| 亚洲少妇30p| 97se亚洲国产综合在线| 国产精品久久毛片a| 成人性生交大片免费看视频在线| 精品国产乱码久久| 另类欧美日韩国产在线| 6080日韩午夜伦伦午夜伦| 亚洲成年人影院| 欧美日本韩国一区二区三区视频| 亚洲三级电影全部在线观看高清| 成人app下载| 中文字幕一区二区不卡| 丰满放荡岳乱妇91ww| 国产精品久久久久久久蜜臀| www.在线欧美| 一区二区三区四区国产精品| 欧美国产一区在线| 色婷婷av一区二区三区gif| 亚洲自拍偷拍av| 欧美在线|欧美| 日韩高清中文字幕一区| 精品国产第一区二区三区观看体验| 久久99久久久欧美国产| 久久午夜羞羞影院免费观看| 高清免费成人av| 亚洲日本乱码在线观看| 欧美日韩免费在线视频| 狠狠色狠狠色综合系列| 中文字幕在线观看一区| 91网站最新网址| 奇米综合一区二区三区精品视频 | 成人国产精品免费观看动漫| 国产日韩欧美精品综合| 色偷偷成人一区二区三区91| 亚洲成人av资源| 久久免费电影网| 色老汉av一区二区三区| 欧美aⅴ一区二区三区视频| 久久久蜜桃精品| 欧美在线不卡一区| 国产很黄免费观看久久| 一区二区三区欧美激情| 精品精品国产高清一毛片一天堂| a级高清视频欧美日韩| 日韩和欧美一区二区三区| 国产日韩欧美精品电影三级在线| 色猫猫国产区一区二在线视频| 久久99精品一区二区三区三区| 国产精品的网站| 亚洲精品在线三区| 欧美色老头old∨ideo| 不卡av在线网| 精彩视频一区二区三区| 一区二区免费视频| 日本一区二区三区四区| 欧美成人综合网站| 欧美区一区二区三区| 色婷婷av一区二区三区软件| 国产九色精品成人porny| 日本亚洲最大的色成网站www| 亚洲色欲色欲www| 国产精品网站在线观看| 欧美大片在线观看| 欧美视频第二页| 色哟哟国产精品| 不卡视频一二三| 成人晚上爱看视频| 国内精品免费**视频| 麻豆精品国产91久久久久久| 日韩制服丝袜先锋影音| 亚洲高清免费视频| 亚洲精品国久久99热| 国产精品福利一区二区三区| 欧美国产综合色视频| 国产日韩欧美亚洲| 久久精品欧美一区二区三区麻豆| 日韩午夜中文字幕| 69堂成人精品免费视频| 欧美精品久久99| 91.xcao| 欧美精品第1页| 欧美日韩精品电影| 欧美日韩精品欧美日韩精品一| 日本高清免费不卡视频| 日本精品一区二区三区高清| 色噜噜夜夜夜综合网| 欧美伊人久久久久久午夜久久久久| 91亚洲午夜精品久久久久久| 成人永久看片免费视频天堂| 国产高清不卡一区| 成人性生交大片| 在线观看免费亚洲| 欧美日韩一区二区不卡| 欧美日韩不卡视频| 欧美成人女星排行榜| 欧美精品一区二| 国产精品你懂的在线| 亚洲男人电影天堂| 视频一区二区中文字幕| 另类成人小视频在线| 国产成人在线色| 91网站在线观看视频| 欧美性欧美巨大黑白大战| 欧美一区二区在线看| 久久久久久久性| 2023国产精品| 一片黄亚洲嫩模| 免播放器亚洲一区| 成人午夜电影小说| 色美美综合视频| 日韩精品一区二区三区中文不卡| 国产网红主播福利一区二区| 亚洲最新在线观看| 国产精品亚洲视频| 欧美综合欧美视频| 精品国产一区二区三区忘忧草| 中文字幕的久久| 日本va欧美va精品发布| 99国产精品99久久久久久| 91精品国产综合久久久蜜臀图片| 国产日韩亚洲欧美综合| 亚洲电影中文字幕在线观看| 国产91精品精华液一区二区三区| 在线视频观看一区| 欧美国产在线观看| 精久久久久久久久久久| 在线观看一区二区精品视频| 久久噜噜亚洲综合| 日韩中文欧美在线|