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

📄 iic.c

📁 自己编写的bootloader for S3c4510. 1、支持串口下载
💻 C
字号:
#include "Main.h"
/******************************************************************
 *                                                                *
 *     SETUP IIC PRESCALER VALUE FROM SERIAL CLOCK FREQUENCY      *
 *                                                                *
 ******************************************************************/
int  SetPreScaler(int sclk) 
{  
     return((int)(((MCLK_MHz/sclk)-3.0)/16.0)-0.5);  //add 0.5 for 
}

void IIC_Init(void)
{
  IICCON = IICRESET;		        // reset IIC
  IICPS = SetPreScaler(IIC_fCLK);	// set IIC speed 50K	
}

int DrvEepromWrite(int addr, int size, int * pdata)
{
  int PageBuf[PAGE_SIZE];
  int page,no_of_page;
  int error = 0;
  int i;
  int remain_byte;
  
  no_of_page  = size / PAGE_SIZE;
  remain_byte = size % PAGE_SIZE;
  if(no_of_page)
  {
     for(page=0;page<no_of_page;page++)
     {
        for(i=0;i<PAGE_SIZE;i++)
        {
           PageBuf[i] = *pdata++;
        }
        DrvIicWriter(addr, PAGE_SIZE, PageBuf);
        addr+=PAGE_SIZE;
     }
  }
  if(remain_byte)
  {
     for(i=0;i<remain_byte;i++)
     {
        PageBuf[i] = *pdata++;
     }
     DrvIicWriter(addr, remain_byte, PageBuf);   
  }
  return error;
}

int DrvIicRead(int addr, int size, int *pdata)
{
   int i;
   IIC_Init();
   while(IICCON&BUSY);			// waitting for not busy
   IICCON = START|ACK;			// send Start : start|ack
   IICBUF = IIC_DEV_0|S_WRITE;	// send control byte (write cmd):read block 0
   while(!(IICCON&BF));
   IICBUF = (int)(addr&0xFF);	// send lsb address
   while(!(IICCON&BF));
   IICCON = RESTART;
   IICCON = START|ACK;
   IICBUF = IIC_DEV_0|S_READ;
   while(!(IICCON&BF));
   IICCON = ACK;
   while(!(IICCON&BF));
   for(i=0;i<size;i++)
   {
      *pdata++=IICBUF;
      while(!(IICCON&BF));   
   }
   IICCON = NOACK;
   while(!(IICCON&BF));
   IICCON = STOP;
   return 0;
}

int DrvIicWriter(int address, int size, int *pdata)
{
   int i;
   IIC_Init();
   while(IICCON&BUSY);			// waitting for not busy
   IICCON = START|ACK;			// send Start : start|ack
   IICBUF = IIC_DEV_0|S_WRITE;	// send control byte (write cmd):read block 0
   while(!(IICCON&BF));
   IICBUF = (int)(address&0xFF);	// send lsb address
   while(!(IICCON&BF));
   for(i=0;i<size;i++)
   {
      IICBUF=*pdata++;
      while(!(IICCON&BF));   
   }
   IICCON = STOP;
   return 0;	
}



⌨️ 快捷键说明

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