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

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

?? uwreep.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) 2005 Teridian Semiconductor Corp. All Rights Reserved.    *
 ***************************************************************************/
//**************************************************************************
//    
//  DESCRIPTION: 71M651x POWER METER - Serial EEPROM Routines. 
// 
//  AUTHOR:  RGV
//
//  HISTORY: See end of file
//
//**************************************************************************
//               
// File: UWREEP.C
// This implements a Microwire bus master using 
// the 6520's Microwire EEPROM access hardware.
//
// The addressing function, uwr_select(), may have to be modified for your
// project.
// 
// Many clocked serial devices do not place their serial output in a 
// high impedance state while receiving data.  The electronics driven
// by this code is not compatible with those devices.  The alternative 
// DIO-based code, uwrdio.c can be quickly modified for your need.
//
// The only clock polarity permitted by this driver's electronics makes 
// data available on a leading rising clock edge, and reads it on a 
// falling trailing clock edge.  This is not compatible with devices that 
// have other clock polarities or edges.  All four combinations of clock
// polarity and edge are available in the alternative DIO-based code, uwrdio.c
//
// At a 4.9MHz MPU clock, this implementation was measured at a 260KHz 
// clock rate, not bad, but substantially slower than the 500KHz rate of 6520
// Microwire hardware.               
//**************************************************************************
// Microwire API.
//
#include "options.h"
#if UWR_FAST
//#include "oscope.h"
#include "uwr.h"

#if !M6520 && !M6530 // the 6520 and 6530 have this interface.
#error unhandled device type
#endif

// application symbols
static uint8_t last_cs_index = 1;
static bool wait_for_ready;
#define BUSY_WAIT_MODE 0x40
#define HALF_SECOND 5000 // assumes a call of delay_clks (3), 3/32768 secs

// change this stuff for new hardware
// CS, chip select, is attached to DIO_8 on the Eval PCB; modify this 
// for your PCB
#define CS DIO_8
#define CS_POWERED DIR1 |= 0x01
#define CS_UNPOWERED DIR1 &= ~0x01
#define CS_ONE CS = 1
#define CS_ZERO CS = 0

// wait for busy to fall, timeout if it doesn't
#pragma save
#pragma NOAREGS
static uint8_t busy_timed_out (void) small reentrant
{
    uint16_t timeout;
    // wait for not-busy
    #ifdef OSCOPE_H
    timeout = 9; // try to fail close to the error; ~3ms after
    #else
    timeout = HALF_SECOND; // give lots of time before failing
    #endif

    while (0 != (EECTRL & 0x40))
    {
        RESET_WD();
        delay_clks (3);

        if (--timeout == 0)
        {
            #ifdef OSCOPE_H
            OSCOPE_ZERO;  // flag an error
            #endif
            return 1;
        }
    }

    return 0;
}
#pragma restore

// initialize the microwire system
#pragma save
#pragma NOAREGS
void uwr_init(void) small reentrant
{
    EX_EEPROM  = FALSE;        // Disable EEPROM non-busy interrupt.

    // select nothing (take no chances)
    uwr_select (UWR_NO_DEVICE);

    #if M6520
    if ((LCDX & LCD_NUM) > 16) // assure DIO_4 and DIO_5 are not LCD segments
    {
        LCDX = 16 | (LCDX & ~LCD_NUM);
    }
    #elif M6530
    LCD_MAP[ DIO4_11 ] &= ~(SEG24_DIO4 | SEG25_DIO5);
    #else
    #error unknown device
    #endif

    DIO &= ~DIO_EEX;           // select the power-up default interface
    DIO |= DIO_EEX_3W;         // three wire interface
    // perform a read to clear the busy status even if it's in wait-for-ready
    // state, and the data line has never become true
    EECTRL = 0x21;
    // wait for not-busy
    busy_timed_out(); // wait for busy

    EEDATA = 0;

    wait_for_ready = 0;

    // power up the interface's chip select
    CS_POWERED;
}
#pragma restore

// select a chip; 0 = none
// The clock polarity should be selected before the device is selected.
// Rewrite this to select the polarity and address the devices on your PCB
#pragma save
#pragma NOAREGS
void uwr_select (uint8_t cs_index) small reentrant
{
    last_cs_index = cs_index;
    CS = cs_index;
}
#pragma restore

// start of portable code

// wait for programming complete; This is probably only useful
// on microwire EEPROMs.
#pragma save
#pragma NOAREGS
void uwr_busy_wait(void) small reentrant
{
    wait_for_ready = 1;
}
#pragma restore

// write a counted length of bytes to the microwire interface
// The interface always enters hHiZ after the last bit of the 
// last byte.  If a busy-wait is requested, it may wait for
// the acknowledgement from the EEPROM.
#pragma save
#pragma NOAREGS
uint8_t uwr_write(uint8x_t *pchOut, uint16_t cnt) small reentrant
{
    #ifdef OSCOPE_H
    OSCOPE_INIT; OSCOPE_ONE;
    #endif

    if ( busy_timed_out () ) // wait for not-busy
        return 0;

    for(; cnt > 1; --cnt)
    {
        EEDATA = *pchOut++;  // put out a byte
        EECTRL = 0x08;       // write 8 bits

        if ( busy_timed_out () ) // wait for not-busy
            return 0;

    }
    if (cnt == 1)
    {
        EEDATA = *pchOut++; // put out the last byte

        if (!wait_for_ready) // this is not an EEPROM data write.
        {
            EECTRL = 0x28; // write the last 8 bits with HiZ

            if ( busy_timed_out () ) // wait for not-busy
                return 0;
        }
        else // wait for ready
        {
            uint8_t cs_index = last_cs_index;

            // write the last 8 bits, but leave the data bus powered
            EECTRL = 0x08;
            wait_for_ready = 0;

            // wait for not-busy to indicate that the data is sent
            if ( busy_timed_out () ) // wait for not-busy
                return 0;

            // toggle selection so the EEPROM produces an acknowledge
            uwr_select (UWR_NO_DEVICE);

            uwr_select (cs_index);

            // This has to be a read because the data line
            // will be driven by the device when selected.
            // It has to count at least 1 bit, or the BUSY
            // status bit will never go high.
            EEDATA = 0; // force bus low with a bit
            EECTRL = 0xA8; // write with a wait for ready & HIZ

            // the eeprom needs a little bit of time
            // to pull the line down.
            if ( busy_timed_out () ) // wait for not-busy
                return 0;
        }
    }
    return 1;
}
#pragma restore

// receive a counted string of bytes from a microwire bus
#pragma save
#pragma NOAREGS
void uwr_read(uint8x_t *pchIn, uint16_t cnt) small reentrant
{
    #ifdef OSCOPE_H
    OSCOPE_INIT; OSCOPE_ONE;
    #endif

    if ( busy_timed_out () ) // wait for not-busy
        return;

    for(; cnt != 0; --cnt)
    {
        EECTRL = 0x18; // read 8 bits

        if ( busy_timed_out () ) // wait for not-busy
            return;

        *pchIn++ = EEDATA; // store it
    }
}
#pragma restore

#endif // UW_FAST

/***************************************************************************
 * $Log: uwreep.c,v $
 * Revision 1.17  2006/09/09 01:10:24  gmikef
 * *** empty log message ***
 *
 * Revision 1.16  2006/09/06 02:12:02  tvander
 * Fixed too-long timeout.
 *
 * Revision 1.15  2006/08/30 21:55:14  gmikef
 * *** empty log message ***
 *
 * Revision 1.14  2006/08/30 02:09:13  gmikef
 * *** empty log message ***
 *
 * Revision 1.13  2006/08/09 00:56:38  tvander
 * *** empty log message ***
 *
 * Revision 1.12  2006/06/15 19:56:37  tvander
 * Coded fixes to enable operation from interrupts.
 *
 * Revision 1.11  2006/05/18 23:18:46  tvander
 * 16K and 32K
 * First cut at new requirements.
 * 32K 6521 is grossly tested.
 * All others have a clean compile with C51 8.02
 *
 * Revision 1.10  2006/03/08 00:00:58  tvander
 * Revised IO so that multiplexed interrupts are centralized in io65xx.c
 * Added default interrupts to io65xx.c
 * Clean build.
 * Tested CE, serial.
 * interrupting EEPROM driver fails.
 *
 * Revision 1.9  2006/03/06 03:32:50  Michael T. Fischer
 * More 6530 prep.
 *
 * Revision 1.8  2006/03/03 11:26:40  Michael T. Fischer
 * Prep for 6530 LCD, etc.
 *
 * Revision 1.7  2006/01/16 20:11:23  tvander
 * Clean Keil build, all versions
 *
 * Revision 1.6  2006/01/10 03:59:11  gmikef
 * Added PDATA support for CE Outputs.
 *
 * Revision 1.4  2005/12/07 01:40:44  tvander
 * Factored out the time-out logic.
 * Added optionally-compiled o-scope code for debugging.
 *
 * Revision 1.3  2005/11/19 00:38:37  tvander
 * Working 3-wire EEPROM interface
 *
 * Revision 1.2  2005/11/05 01:56:27  tvander
 * Added EEPROM erase; Note uwreep.c is not working; don't know why.
 *
 * Revision 1.1  2005/10/29 02:25:34  tvander
 * Working Microwire drivers
 *
 * Revision 1.1  2005/10/26 23:52:22  tvander
 * Microwire EEPROM access via DIO
 *
 *
 * Copyright (C) 2005 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.         *
 ***************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉成人伊视频在线观看| 另类综合日韩欧美亚洲| 秋霞国产午夜精品免费视频| 岛国精品在线观看| 4438x亚洲最大成人网| 国产精品久久毛片a| 奇米777欧美一区二区| 日本久久一区二区三区| 国产人成亚洲第一网站在线播放| 午夜av区久久| 91一区一区三区| 日本一区二区三区在线观看| 日本视频中文字幕一区二区三区| 91香蕉国产在线观看软件| 久久久久国产精品人| 日韩av一区二区在线影视| 色综合天天综合色综合av| 亚洲国产精品成人综合| 久99久精品视频免费观看| 欧美精品久久一区| 亚洲一区影音先锋| 在线影视一区二区三区| 亚洲欧美日韩成人高清在线一区| 国产一区二区精品久久99| 日韩欧美电影一二三| 性做久久久久久免费观看| 欧美性极品少妇| 一级日本不卡的影视| 91亚洲资源网| 最新久久zyz资源站| av在线播放不卡| 国产精品久久久久aaaa| 粉嫩av一区二区三区| 欧美经典三级视频一区二区三区| 国产一区二区主播在线| 久久色在线视频| 国产成人精品aa毛片| 国产欧美一区二区三区网站| 国产成人精品免费网站| 国产精品久久精品日日| 91丝袜国产在线播放| 亚洲一区成人在线| 日韩欧美在线网站| 久草精品在线观看| 国产精品国产自产拍高清av| 91亚洲国产成人精品一区二区三 | 亚洲h精品动漫在线观看| 欧美日韩国产在线观看| 麻豆精品久久精品色综合| 精品剧情v国产在线观看在线| 美女视频网站黄色亚洲| 国产亚洲一区字幕| 91污片在线观看| 天天综合天天做天天综合| 日韩欧美在线网站| av中文字幕一区| 日韩专区欧美专区| 国产欧美精品区一区二区三区 | 555夜色666亚洲国产免| 国产一区二区日韩精品| 国产精品久久久久三级| 欧美性一二三区| 激情偷乱视频一区二区三区| 国产精品高潮呻吟久久| 欧美精品aⅴ在线视频| 狠狠色丁香久久婷婷综合丁香| 国产精品久久福利| 日韩午夜在线播放| 99综合电影在线视频| 天天操天天综合网| 中文字幕第一区二区| 精品视频色一区| 国产盗摄精品一区二区三区在线| 亚洲美女屁股眼交| 日韩欧美不卡一区| 在线中文字幕不卡| 国产福利精品导航| 日韩成人午夜电影| 综合激情网...| 久久久www成人免费毛片麻豆| 在线观看日韩高清av| 国产一区二区电影| 日韩精品久久理论片| 最新国产精品久久精品| 精品福利一二区| 欧美猛男超大videosgay| 成人一级片在线观看| 久久99国产精品尤物| 午夜成人免费视频| 亚洲精品国产a| 亚洲国产精品精华液ab| 精品欧美一区二区在线观看| 欧美无砖专区一中文字| 92精品国产成人观看免费| 国产一区亚洲一区| 美女在线一区二区| 午夜欧美大尺度福利影院在线看| 国产精品色哟哟| 久久青草欧美一区二区三区| 555www色欧美视频| 欧美午夜电影一区| 色8久久精品久久久久久蜜| 成人av午夜影院| 国产成人亚洲综合色影视| 国产综合色在线| 九一久久久久久| 精品在线免费视频| 久久国内精品自在自线400部| 日韩国产高清在线| 偷拍亚洲欧洲综合| 视频一区二区不卡| 日韩成人午夜电影| 免费av成人在线| 日韩av电影免费观看高清完整版 | 一区二区三国产精华液| 国产精品久久久久久久蜜臀| 国产精品久久久久久久久久久免费看| 国产欧美日韩久久| 国产日本一区二区| 亚洲欧洲国产日韩| 亚洲欧美日韩国产手机在线| 一区二区三区在线免费| 一区二区三区成人在线视频| 亚洲国产日韩在线一区模特| 亚洲一线二线三线久久久| 婷婷成人综合网| 韩国在线一区二区| 成人小视频在线观看| 91蜜桃传媒精品久久久一区二区| 91色视频在线| 欧美日韩一级黄| 欧美zozozo| 亚洲欧洲av另类| 亚洲成人激情综合网| 免费高清在线视频一区·| 国产乱国产乱300精品| 不卡免费追剧大全电视剧网站| 色先锋久久av资源部| 欧美日韩一级二级| 精品成人一区二区| 亚洲欧洲成人av每日更新| 视频一区二区三区在线| 国产夫妻精品视频| 欧美综合一区二区| 精品女同一区二区| 亚洲免费观看高清完整版在线观看 | 欧美欧美午夜aⅴ在线观看| 日韩美女主播在线视频一区二区三区| 精品三级在线看| 亚洲三级视频在线观看| 日韩和欧美一区二区三区| 国产成人av电影在线| 欧美偷拍一区二区| 精品欧美一区二区三区精品久久| 国产精品久久网站| 日本不卡高清视频| 97aⅴ精品视频一二三区| 日韩亚洲欧美高清| 亚洲精品亚洲人成人网| 精品一区二区三区免费| 91视频在线观看| 久久精品视频一区二区| 亚洲高清免费视频| 成人午夜看片网址| 日韩欧美视频一区| 亚洲成人综合视频| 成人免费毛片高清视频| 精品久久久久久久久久久久久久久久久 | 麻豆国产91在线播放| 色妞www精品视频| 久久亚洲一级片| 日韩经典一区二区| 欧美午夜精品一区二区蜜桃| 国产精品三级久久久久三级| 青青草国产精品97视觉盛宴| 91久久精品日日躁夜夜躁欧美| 久久久久久久久久久久久久久99 | 日韩色在线观看| 亚欧色一区w666天堂| 一本一道久久a久久精品综合蜜臀| 久久久久久亚洲综合| 青青草国产成人99久久| 欧美在线你懂得| 亚洲精品免费电影| 99精品1区2区| 国产精品久久久久久久蜜臀 | 成人欧美一区二区三区黑人麻豆| 老色鬼精品视频在线观看播放| 在线视频一区二区三| 亚洲人妖av一区二区| 不卡欧美aaaaa| 综合分类小说区另类春色亚洲小说欧美 | 欧美激情中文不卡| 国产精品自拍网站| 久久精品夜夜夜夜久久| 国产伦精品一区二区三区免费迷 | 国产精品久久久久aaaa| 成人白浆超碰人人人人| 国产精品久久久久久久久免费相片 | 亚洲欧美中日韩|