⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.c

📁 umon bootloader source code, support mips cpu.
💻 C
字号:
#include "iic.h"void IICDelayLoop(){    asm volatile (    "nop\n"    "nop\n"    "nop\n"    "nop\n"    "nop\n"    "nop\n"    "nop\n"    "nop");}void IICDelay(int cnt){    int i;    for(i=0; i<10*cnt; i++)        IICDelayLoop();}void IICinit(){	  IIC_SDA_OUT();    IIC_SDA_SET();    IIC_SCL_OUT();    IIC_SCL_SET();}void IICStart(void)          /* statr the iic bus */{			IIC_SDA_OUT();    IIC_SDA_SET();    IIC_SCL_OUT();    IIC_SCL_SET();    IICDelay(IIC_PUSH_DELAY);	    IIC_SDA_OUT();    /*does this option necessary ?*/    IIC_SDA_CLR();    IICDelay(IIC_PUSH_DELAY);    IIC_SCL_CLR();    IICDelay(IIC_PUSH_DELAY);}void IICStop(void)           /* stop the iic bus */{    IIC_SDA_OUT();    IIC_SDA_CLR();    IICDelay(IIC_PUSH_DELAY);    IIC_SCL_SET();    IICDelay(IIC_PUSH_DELAY);    IIC_SDA_SET();    IICDelay(IIC_PUSH_DELAY);}void IICWrite(int buf)       /* write the iic bus */{    int i;    IIC_SDA_OUT();    buf &= 0xff;    for(i = 0; i <= 7; i++)    {        if((buf & 0x80))            IIC_SDA_SET();        else            IIC_SDA_CLR();        IICDelay(IIC_PUSH_DELAY);        IIC_SCL_SET();        IICDelay(IIC_PUSH_DELAY);        IIC_SCL_CLR();        IICDelay(IIC_PUSH_DELAY);        buf = buf << 1;    }}int IICChkAck(void)         /* chack the acknowledge signel */{    int WaitTime;    IIC_SDA_IN();    IICDelay(IIC_PUSH_DELAY);    IIC_SCL_SET();    IICDelay(IIC_PUSH_DELAY);    WaitTime = IIC_WAIT_TIME;    while(IIC_SDA_GET())    {        WaitTime--;        if(WaitTime <= 0)            break;    }    /* to do : read ack signal */    IIC_SCL_CLR();    IICDelay(IIC_PUSH_DELAY);    /* to do : add err deal */    if(WaitTime != 0)        return IIC_ACK_SUCCESS;    printf("iic time out!\n");    return IIC_ACK_ERROR;}int IICWriteByte(int SlaveAddr, int ByteAddr, int data, int mode){    int addr;    addr = (SlaveAddr & 0x7f) << 1;    //printf("%d  ", addr);    IICStart();    IICWrite(addr);    if(IICChkAck() != IIC_ACK_SUCCESS)    {        IICStop();        return IIC_ERROR;    }    IICWrite(ByteAddr);    //printf("%d  ", ByteAddr);    if(IICChkAck() != IIC_ACK_SUCCESS)    {        IICStop();        return IIC_ERROR;    }    IICWrite(data);    //printf("%d\n", data);    if(IICChkAck() != IIC_ACK_SUCCESS)    {        IICStop();        return IIC_ERROR;    }    IICStop();    return IIC_OK;}void ak8817_reset(void){		AK8817_RESET_OUT();	AK8817_RESET_SET();		IICDelay(10);	  		AK8817_RESET_OUT();	AK8817_RESET_CLR();		IICDelay(10);			AK8817_RESET_OUT();	AK8817_RESET_SET();		IICDelay(10);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -