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

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

?? iic.c

?? s3c24a0固件測試代碼 ? ? ? ? ?啊 
?? C
字號:
//====================================================================
// File Name	: 24A0IIC.c
// Function	: S3C24A0 IIC-bus Master Tx/Rx mode Test Program
//                (Interrupt / Non Interrupt (Polling))
// Date         : Jun , 2003
//====================================================================

#include <string.h>
#include "24a0addr.h"
#include "24a0lib.h"
#include "def.h"
#include "option.h"

#define WRDATA      (1)
#define POLLACK     (2)
#define RDDATA      (3)
#define SETRDADDR   (4)

#define IICBUFSIZE 0x20

void Test_Iic(void);
void Test_Iic2(void);
void Wr24C080(U32 slvAddr,U32 addr,U8 data);
void Rd24C080(U32 slvAddr,U32 addr,U8 *data);
void _Wr24C080(U32 slvAddr,U32 addr,U8 data);
void _Rd24C080(U32 slvAddr,U32 addr,U8 *data);

void __irq IicInt(void);
void IicPoll(void);
void Run_IicPoll(void);

static U8 _iicData[IICBUFSIZE];
static volatile int _iicDataCount;
static volatile int _iicStatus;
static volatile int _iicMode;
static int _iicPt;

//===================================================================
//  "Interrupt mode" for IIC block
//===================================================================

//******************[ Test_Iic ]**************************************

void * func_iic_test[][2]=
{	
    //        				"123456789012345678"
    //Interrupt test
    (void *)Test_Iic,			"IIC by interrupt  ",
    //polling test
    (void *)Test_Iic2,			"IIC by polling    ",
    0,0
};

void Ch13_Iic_Test(void)
{
    int i;
	    
    Uart_Printf("\nPower mode test.\n");

    while(1)
    {
	i=0;
	Uart_Printf("\n\n");
	while(1)
	{   //display menu
	    Uart_Printf("%2d:%s",i,func_iic_test[i][1]);
	    i++;
	    if((int)(func_iic_test[i][0])==0)
	    {
		Uart_Printf("\n");
		break;
	    }
	    if((i%3)==0)
	    Uart_Printf("\n");
	}

	Uart_Printf("\nSelect (\"-1\" to exit) : ");
	i = Uart_GetIntNum();
	if(i==-1) 
	    break;		// return.
	if(i>=0 && (i<((sizeof(func_iic_test)-1)/8)) )	// select and execute...
	    ( (void (*)(void)) (func_iic_test[i][0]) )();
    }
    Uart_Printf("\nPower_Test program end.\n");
}


void Test_Iic(void)
{
    unsigned int i,j;
    static U8 data[256];

    Uart_Printf("[ IIC Test(Interrupt) using KS24C080 ]\n");

    pISR_IIC = (unsigned)IicInt;
    rINTMSK &= ~(BIT_IIC);

    //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
    // If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz
    rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf);

    rIICADD  = 0x10;                    //2410 slave address = [7:1]
    rIICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx)	

    Uart_Printf("Write test data into KS24C080\n");

    for(i=0;i<256;i++)
        Wr24C080(0xa0,(U8)i,i);	// 7bit address format : address(device addr)+data(word addr)+data

    for(i=0;i<256;i++)
        data[i] = 0;

    Uart_Printf("Read test data from KS24C080\n");

    for(i=0;i<256;i++)
        Rd24C080(0xa0,(U8)i,&(data[i]));    // 7bit address format : address(device addr)+data(word addr)+data

        //Line changed 0 ~ f
    for(i=0;i<16;i++)
    {
        for(j=0;j<16;j++)
            Uart_Printf("%2x ",data[i*16+j]);
        Uart_Printf("\n");
    }
    rINTMSK |= BIT_IIC;
}


//*************************[ Wr24C080 ]****************************
void Wr24C080(U32 slvAddr,U32 addr,U8 data)
{
    _iicMode      = WRDATA;
    _iicPt        = 0;
    _iicData[0]   = (U8)addr;
    _iicData[1]   = data;
    _iicDataCount = 2;

    rIICDS   = slvAddr;         //0xa0
    rIICSTAT = 0xf0;            //MasTx,Start
    //Clearing the pending bit isn't needed because the pending bit has been cleared.
    while(_iicDataCount!=-1);	// Tx 'addr+addr+data'
	//Uart_Printf("%d ",_iicDataCount);

    //Uart_Printf("@%d ",_iicDataCount);
    _iicMode = POLLACK;

    while(1)
    {
        rIICDS     = slvAddr;
        _iicStatus = 0x100;
        rIICSTAT   = 0xf0;              //MasTx,Start, NACK flag clear
        rIICCON    = 0xaf;              //Resumes IIC operation. Int pending clear

        while(_iicStatus==0x100);

        if(!(_iicStatus&0x1))
            break;                      //When ACK is received
    }					//If there is no ACK, repeat Tx(addr).

    rIICSTAT = 0xd0;                    //Stop MasTx condition
    rIICCON  = 0xaf;                    //Resumes IIC operation.
    Delay(1);                           //Wait until stop condtion is in effect.
    //Write is completed.
}

//**********************[ Rd24C080 ] ***********************************
void Rd24C080(U32 slvAddr,U32 addr,U8 *data)
{
    _iicMode      = SETRDADDR;
    _iicPt        = 0;
    _iicData[0]   = (U8)addr;
    _iicDataCount = 1;

    rIICDS   = slvAddr;
    rIICSTAT = 0xf0;                    //MasTx,Start
      //Clearing the pending bit isn't needed because the pending bit has been cleared.
    while(_iicDataCount!=-1);

    _iicMode      = RDDATA;
    _iicPt        = 0;
    _iicDataCount = 1;

    rIICDS        = slvAddr;
    rIICSTAT      = 0xb0;               //MasRx,Start
    rIICCON       = 0xaf;               //Resumes IIC operation.
    while(_iicDataCount!=-1);

    *data = _iicData[1];
}


//-------------------------------------------------------------------------
void __irq IicInt(void)
{
    U32 iicSt,i;

    rSRCPND = BIT_IIC;          //Clear pending bit
    rINTPND = BIT_IIC;
    iicSt   = rIICSTAT;

    if(iicSt & 0x8){};           //When bus arbitration is failed.
    if(iicSt & 0x4){};           //When a slave address is matched with IICADD
    if(iicSt & 0x2){};           //When a slave address is 0000000b
    if(iicSt & 0x1){};           //When ACK isn't received

    switch(_iicMode)
    {
       case POLLACK:
           _iicStatus = iicSt;
           break;

       case RDDATA:
           if((_iicDataCount--)==0)
           {
               _iicData[_iicPt++] = rIICDS;
               rIICSTAT = 0x90;                 //Stop MasRx condition
               rIICCON  = 0xaf;                 //Resumes IIC operation.
               Delay(1);                        //Wait until stop condtion is in effect.
                                                //Too long time...
                                                //The pending bit will not be set after issuing stop condition.
               break;
           }
           _iicData[_iicPt++] = rIICDS;         //The last data has to be read with no ack.
           if((_iicDataCount)==0)
               rIICCON = 0x2f;                  //Resumes IIC operation with NOACK.
           else
               rIICCON = 0xaf;                  //Resumes IIC operation with ACK
               break;

        case WRDATA:
            if((_iicDataCount--)==0)
            {
                rIICSTAT = 0xd0;                //Stop MasTx condition, ACK flag clear
                rIICCON  = 0xaf;                //Resumes IIC operation.
                Delay(1);                       //Wait until stop condtion is in effect.
                //The pending bit will not be set after issuing stop condition.
                break;
            }
            rIICDS = _iicData[_iicPt++];        //_iicData[0] has dummy.
            for(i=0;i<10;i++);                  //for setup time until rising edge of IICSCL
            rIICCON = 0xaf;                     //resumes IIC operation.
            break;

        case SETRDADDR:
//          Uart_Printf("[ S%d ]",_iicDataCount);
            if((_iicDataCount--)==0)
                break;                          //IIC operation is stopped because of IICCON[4]
            rIICDS = _iicData[_iicPt++];
            for(i=0;i<10;i++);                  //For setup time until rising edge of IICSCL
            rIICCON = 0xaf;                     //Resumes IIC operation.
            break;

        default:
            break;
    }
}

//===================================================================
//  "Non-Interrupt mode" for IIC block
//===================================================================

//*********************[ Test_Iic2 ]*********************************
void Test_Iic2(void)
{
    unsigned int i,j;
    static U8 data[256];

    Uart_Printf("[ IIC Test(Polling) using KS24C080 ]\n");

    //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
    rIICCON  = (1<<7) | (0<<6) | (1<<5) | (0xf);

    rIICADD  = 0x10;                    //2410 slave address = [7:1]
    rIICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx)

    Uart_Printf("Write test data into KS24C080\n");

    for(i=0;i<256;i++)
        _Wr24C080(0xa0,(U8)i,255-i);
    for(i=0;i<256;i++)
        data[i] = 0;

    Uart_Printf("Read test data from KS24C080\n");
    for(i=0;i<256;i++)
        _Rd24C080(0xa0,(U8)i,&(data[i]));

    for(i=0;i<16;i++)
    {
        for(j=0;j<16;j++)
            Uart_Printf("%2x ",data[i*16+j]);
        Uart_Printf("\n");
    }
}

//**************[ _Wr24C080 ]*****************************************
void _Wr24C080(U32 slvAddr,U32 addr,U8 data)
{
    _iicMode      = WRDATA;
    _iicPt        = 0;
    _iicData[0]   = (U8)addr;
    _iicData[1]   = data;
    _iicDataCount = 2;

    rIICDS        = slvAddr;            //0xa0
      //Master Tx mode, Start(Write), IIC-bus data output enable
      //Bus arbitration sucessful, Address as slave status flag Cleared,
      //Address zero status flag cleared, Last received bit is 0
    rIICSTAT      = 0xf0;
      //Clearing the pending bit isn't needed because the pending bit has been cleared.
    while(_iicDataCount!=-1)
       Run_IicPoll();

    _iicMode = POLLACK;

    while(1)
    {
        rIICDS     = slvAddr;
        _iicStatus = 0x100;             //To check if _iicStatus is changed
        rIICSTAT   = 0xf0;              //Master Tx, Start, Output Enable, Sucessful, Cleared, Cleared, 0
        rIICCON    = 0xaf;              //Resumes IIC operation.
        while(_iicStatus==0x100)
            Run_IicPoll();

        if(!(_iicStatus & 0x1))
            break;                      //When ACK is received
    }
    rIICSTAT = 0xd0;                    //Master Tx condition, Stop(Write), Output Enable
    rIICCON  = 0xaf;                    //Resumes IIC operation.
    Delay(1);                           //Wait until stop condtion is in effect.
      //Write is completed.
}

//************************[ _Rd24C080 ]********************************
void _Rd24C080(U32 slvAddr,U32 addr,U8 *data)
{
    _iicMode      = SETRDADDR;
    _iicPt        = 0;
    _iicData[0]   = (U8)addr;
    _iicDataCount = 1;

    rIICDS   = slvAddr;
    rIICSTAT = 0xf0;                    //MasTx,Start
      //Clearing the pending bit isn't needed because the pending bit has been cleared.
    while(_iicDataCount!=-1)
        Run_IicPoll();

    _iicMode      = RDDATA;
    _iicPt        = 0;
    _iicDataCount = 1;

    rIICDS   = slvAddr;
    rIICSTAT = 0xb0;                    //Master Rx,Start
    rIICCON  = 0xaf;                    //Resumes IIC operation.
    while(_iicDataCount!=-1)
        Run_IicPoll();

    *data = _iicData[1];
}

//**********************[ Run_IicPoll ]*********************************
void Run_IicPoll(void)
{
    if(rIICCON & 0x10)                  //Tx/Rx Interrupt Enable
       IicPoll();
}

//**********************[IicPoll ]**************************************
void IicPoll(void)
{
    U32 iicSt,i;

    iicSt = rIICSTAT;
    if(iicSt & 0x8){}                   //When bus arbitration is failed.
    if(iicSt & 0x4){}                   //When a slave address is matched with IICADD
    if(iicSt & 0x2){}                   //When a slave address is 0000000b
    if(iicSt & 0x1){}                   //When ACK isn't received

    switch(_iicMode)
    {
        case POLLACK:
            _iicStatus = iicSt;
            break;

        case RDDATA:
            if((_iicDataCount--)==0)
            {
                _iicData[_iicPt++] = rIICDS;

                rIICSTAT = 0x90;                //Stop MasRx condition
                rIICCON  = 0xaf;                //Resumes IIC operation.
                Delay(1);                       //Wait until stop condtion is in effect.
                                                //Too long time...
                                                //The pending bit will not be set after issuing stop condition.
                break;
            }
            _iicData[_iicPt++] = rIICDS;
                        //The last data has to be read with no ack.
            if((_iicDataCount)==0)
                rIICCON = 0x2f;                 //Resumes IIC operation with NOACK.
            else
                rIICCON = 0xaf;                 //Resumes IIC operation with ACK
            break;

        case WRDATA:
            if((_iicDataCount--)==0)
            {
                rIICSTAT = 0xd0;                //stop MasTx condition
                rIICCON  = 0xaf;                //resumes IIC operation.
                Delay(1);                       //wait until stop condtion is in effect.
                       //The pending bit will not be set after issuing stop condition.
                break;
            }
            rIICDS = _iicData[_iicPt++];        //_iicData[0] has dummy.
            for(i=0;i<10;i++);                  //for setup time until rising edge of IICSCL
            rIICCON = 0xaf;                     //resumes IIC operation.
            break;

        case SETRDADDR:
//          Uart_Printf("[S%d]",_iicDataCount);
            if((_iicDataCount--)==0)
            {
                break;                  //IIC operation is stopped because of IICCON[4]
            }
            rIICDS = _iicData[_iicPt++];
            for(i=0;i<10;i++);          //for setup time until rising edge of IICSCL
            rIICCON = 0xaf;             //resumes IIC operation.
            break;

        default:
            break;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频一区二区免费| 蜜桃在线一区二区三区| 99在线精品观看| 中文字幕第一页久久| 波多野结衣一区二区三区 | 精品国产一区久久| 免费高清在线视频一区·| 欧美成人video| 国产精品99久久久久久久女警| 久久精品人人做| 不卡av在线网| 亚洲国产精品人人做人人爽| 555夜色666亚洲国产免| 精品一区二区三区香蕉蜜桃 | 一区二区三区在线观看动漫| 欧美吻胸吃奶大尺度电影| 日韩电影一区二区三区四区| wwwwxxxxx欧美| 成人午夜短视频| 亚洲国产精品欧美一二99| 精品国产91洋老外米糕| www.久久精品| 日韩1区2区日韩1区2区| 国产欧美精品一区| 欧美主播一区二区三区美女| 日韩va欧美va亚洲va久久| 久久久精品免费免费| 色综合天天天天做夜夜夜夜做| 亚洲va中文字幕| 久久久精品免费观看| 欧美午夜片在线看| 国产成人av一区二区三区在线观看| 亚洲嫩草精品久久| 精品久久人人做人人爽| 色综合 综合色| 国产一区二区三区精品欧美日韩一区二区三区 | 精品欧美一区二区三区精品久久 | 欧美日韩精品系列| 国产精品主播直播| 亚洲一区影音先锋| 久久综合九色综合97_久久久| 91老司机福利 在线| 黄色日韩网站视频| 亚洲一区二区欧美日韩 | 在线播放国产精品二区一二区四区| 国产成人亚洲精品青草天美| 亚洲自拍都市欧美小说| 国产夜色精品一区二区av| 欧美喷水一区二区| av在线一区二区三区| 久久99在线观看| 一区二区不卡在线播放 | 精品国产sm最大网站免费看| 欧美怡红院视频| 成人精品在线视频观看| 久久国产精品72免费观看| 亚洲一卡二卡三卡四卡五卡| 国产精品久99| 久久久亚洲精品石原莉奈| 91精品国产91久久综合桃花| 91麻豆蜜桃一区二区三区| 成人午夜精品一区二区三区| 精品一区二区免费在线观看| 日韩精彩视频在线观看| 亚洲愉拍自拍另类高清精品| 最新国产の精品合集bt伙计| 中文字幕成人网| 中文字幕av不卡| 国产蜜臀97一区二区三区| 久久久综合网站| 久久网这里都是精品| 精品久久久三级丝袜| 精品欧美一区二区久久| 日韩亚洲欧美中文三级| 欧美一区二区啪啪| 欧美一级高清大全免费观看| 欧美精品粉嫩高潮一区二区| 欧美日本一区二区在线观看| 欧美日韩精品欧美日韩精品| 欧美日韩综合在线免费观看| 欧美性做爰猛烈叫床潮| 欧美视频在线观看一区二区| 欧美色电影在线| 欧美日韩激情在线| 欧美精品在线观看一区二区| 91精品国产91久久久久久最新毛片| 欧美高清一级片在线| 91麻豆精品国产无毒不卡在线观看| 欧美一区二区三区视频在线观看| 欧美一区二区网站| 欧美成人艳星乳罩| 国产肉丝袜一区二区| 国产精品久久久久久久久晋中| 亚洲婷婷综合色高清在线| 亚洲免费观看高清完整 | 日本欧美大码aⅴ在线播放| 男人的j进女人的j一区| 激情欧美日韩一区二区| 国产91精品一区二区麻豆网站| 成人动漫av在线| 一本色道久久综合亚洲精品按摩| 欧美视频在线观看一区| 日韩欧美国产一区二区三区| 久久久久久久久久久久久久久99| 国产精品妹子av| 亚洲妇女屁股眼交7| 久久精品国产亚洲高清剧情介绍| 国产精品一区二区无线| caoporn国产一区二区| 欧美午夜片在线看| 欧美成人免费网站| 亚洲欧洲在线观看av| 五月综合激情婷婷六月色窝| 国产一区二区三区视频在线播放| 成人a级免费电影| 在线观看成人免费视频| 精品1区2区在线观看| 日韩码欧中文字| 免费不卡在线视频| 成人国产精品免费观看动漫| 欧美另类一区二区三区| 中文字幕成人在线观看| 日韩中文字幕区一区有砖一区| 高清不卡一二三区| 欧美夫妻性生活| 中文字幕在线观看不卡视频| 日韩影院在线观看| 北条麻妃国产九九精品视频| 制服丝袜国产精品| 亚洲欧洲美洲综合色网| 久久疯狂做爰流白浆xx| 91影院在线免费观看| 久久影院视频免费| 日韩高清不卡一区二区| 99这里只有久久精品视频| 精品国精品国产| 亚洲国产美女搞黄色| 床上的激情91.| 欧美一卡二卡在线观看| 亚洲黄色av一区| 成人小视频在线| 精品卡一卡二卡三卡四在线| 亚洲国产精品久久久久婷婷884| 国产高清在线观看免费不卡| 日韩一区二区三区av| 伊人夜夜躁av伊人久久| 风间由美性色一区二区三区| 日韩精品影音先锋| 日韩精品欧美精品| 欧美三级日韩三级国产三级| 1024成人网色www| 国产精品99久| 久久久久免费观看| 蜜乳av一区二区三区| 欧美高清视频不卡网| 亚洲图片有声小说| 91豆麻精品91久久久久久| 亚洲人成人一区二区在线观看| 国产精品亚洲午夜一区二区三区 | 久久综合给合久久狠狠狠97色69| 日本午夜精品一区二区三区电影| 色天天综合色天天久久| 亚洲欧美在线另类| 成人国产一区二区三区精品| 欧美激情在线一区二区| 国产精品1区二区.| 亚洲国产精品99久久久久久久久 | 精品入口麻豆88视频| 奇米色777欧美一区二区| 欧美人与z0zoxxxx视频| 日韩黄色免费网站| 日韩一区二区三区四区| 蜜臂av日日欢夜夜爽一区| 欧美一级免费大片| 久久99国产乱子伦精品免费| 精品久久久久久久人人人人传媒| 久久精品国产亚洲一区二区三区| 精品理论电影在线| 成人晚上爱看视频| 亚洲日本在线看| 欧美日韩久久不卡| 日产国产欧美视频一区精品| 欧美本精品男人aⅴ天堂| 黑人精品欧美一区二区蜜桃| 欧美激情一区不卡| 成人国产精品免费观看动漫| 夜夜亚洲天天久久| 欧美男男青年gay1069videost | 久久久久久久国产精品影院| 国产成人精品一区二| 中文字幕一区视频| 欧美自拍偷拍午夜视频| 麻豆国产精品视频| 欧美激情综合网| 欧美影视一区二区三区| 七七婷婷婷婷精品国产| 国产视频在线观看一区二区三区 | 欧美最猛黑人xxxxx猛交| 日韩电影在线免费观看| 国产午夜一区二区三区|