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

📄 iic.c

📁 S3C2440A + ADS 控制i2c 的驱动
💻 C
字号:
#include "def.h"
#include "iic.h"
#include "2440addr.h"
#include "uart.h"





extern Delay(unsigned int time);


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

	  iic_init();

    Uart_Printf("write\n");

    for(i=0;i<256;i++)
        Wr24C080(0xa0,i,255-i);//初始化data数组的值为0。
                                   
    for(i=0;i<256;i++)
        data[i] = 0;

    Uart_Printf("read\n");
                                   //读24C02的0xa0地址中数据到data数组中。
    for(i=0;i<256;i++)
        Rd24C080(0xa0,i,&(data[i])); 
                                   //输出data数组接收数据的值
    for(i=0;i<16;i++)
    {
        for(j=0;j<16;j++)
            Uart_Printf("%2x ",data[i*16+j]);
        Uart_Printf("\n");
    }
    

}


void iic_init(void) 

{                              

   // rGPEUP  &= ~((3<<28)|(3<<30));
   // rGPEUP  |=  ((0x3<<14));                 
   
    rGPECON &= ~((unsigned int)0xf<<28);  
    rGPECON |=  ((unsigned int)0xa<<28);            
                
	  rIICCON  = 0xaf;                                                                
    
    rIICSTAT = 0x10;                                                
   
    rIICADD  = 0x10;                                                               

}


void Wr24C080(int slvAddr,int addr,int data)
{
  
    rIICDS = slvAddr;
    rIICSTAT = 0xf0;
  
    while(!(rIICCON&0x10));
    Delay(100);
   
    rIICDS = addr;
    rIICCON &= ~(1<<4);
    while(!(rIICCON&0x10));
    Delay(100);
   
    rIICDS = data;
    rIICCON &= ~(1<<4);
    while(!(rIICCON&0x10));
    Delay(100);
   
    rIICSTAT = 0xd0;
    rIICCON &= ~(1<<4);
   
    Delay(10000);
}
        
//************************[ _Rd24C080 ]********************************
void Rd24C080(int slvAddr,int addr,int *data)
{
   
    rIICDS = slvAddr; 
    rIICSTAT = 0xf0;
   
    while(!(rIICCON&0x10));
    Delay(100);
   
    rIICDS = addr;
    rIICCON &= ~(1<<4);   
    while(!(rIICCON&0x10));
    Delay(100);

    rIICDS = slvAddr;
    rIICSTAT = 0xb0;
  
    rIICCON &= ~(1<<4);  
    while(!(rIICCON&0x10));
  
  
    rIICCON &= ~(1<<4);
    Delay(1000000);
    while(!(rIICCON&0x10));
    *data = rIICDS;
    Delay(100);
                             
    rIICCON &= ~(1<<7);
    
    rIICSTAT = 0x90;    
    rIICCON &= ~(1<<4);
    Delay(10000);
    
    
}





























⌨️ 快捷键说明

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