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

📄 test_iic.c

📁 开发环境为uClinux2.4.x+s3c44b0。此程序以字节方式对IIC器件进行读写。通过硬件测试
💻 C
字号:


/********************************************************************
*
*   File Name: 
*   ---------
*   test_tl16c750.c  
*
*
*   Author:
*   -------
*   zhang dahai
*
*   Email:
*   ------
*   olivercheung@126.com
*
*   QQ & MSN;
*   ---------
*   334654529, olivercheung2005@yahoo.com.cn
*
*   Modification History:
*   -----------------
*   2006-7-19, zhang dahai, created(09-07 22:35).
*
********************************************************************/

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>

/*44b0 sfr base address*/

#define     REGBASE     0x01c00000

/*Memory Controller Registers*/

#define     BWSCON      *(volatile unsigned int *)(REGBASE+0x080000)

/*I/O Ports Registers */

#define     PCONA       *(volatile unsigned int *)(REGBASE+0x120000)
#define     PDATA       *(volatile unsigned int *)(REGBASE+0x120004)
#define     PCONB       *(volatile unsigned int *)(REGBASE+0x120008)
#define     PDATB       *(volatile unsigned int *)(REGBASE+0x12000c)
#define     PCONC       *(volatile unsigned int *)(REGBASE+0x120010)
#define     PDATC       *(volatile unsigned int *)(REGBASE+0x120014)
#define     PUPC        *(volatile unsigned int *)(REGBASE+0x120018)
#define     PCOND       *(volatile unsigned int *)(REGBASE+0x12001c)
#define     PDATD       *(volatile unsigned int *)(REGBASE+0x120020)
#define     PUPD        *(volatile unsigned int *)(REGBASE+0x120024)
#define     PCONE       *(volatile unsigned int *)(REGBASE+0x120028)
#define     PDATE       *(volatile unsigned int *)(REGBASE+0x12002c)
#define     PUPE        *(volatile unsigned int *)(REGBASE+0x120030)
#define     PCONF       *(volatile unsigned int *)(REGBASE+0x120034)
#define     PDATF       *(volatile unsigned int *)(REGBASE+0x120038)
#define     PUPF        *(volatile unsigned int *)(REGBASE+0x12003c)
#define     PCONG       *(volatile unsigned int *)(REGBASE+0x120040)
#define     PDATG       *(volatile unsigned int *)(REGBASE+0x120044)
#define     PUPG        *(volatile unsigned int *)(REGBASE+0x120048)
#define     SPUCR       *(volatile unsigned int *)(REGBASE+0x12004c)
#define     EXTINT      *(volatile unsigned int *)(REGBASE+0x120050)
#define     EXTINPND    *(volatile unsigned int *)(REGBASE+0x120054)

/*Interrupt Controller Registers */

#define     INTCON      *(volatile unsigned int *)(REGBASE+0x200000)
#define     INTPND      *(volatile unsigned int *)(REGBASE+0x200004)
#define     INTMOD      *(volatile unsigned int *)(REGBASE+0x200008)
#define     INTMSK      *(volatile unsigned int *)(REGBASE+0x20000c)
#define     I_PSLV      *(volatile unsigned int *)(REGBASE+0x200010)
#define     I_PMST      *(volatile unsigned int *)(REGBASE+0x200014)
#define     I_CSLV      *(volatile unsigned int *)(REGBASE+0x200018)
#define     I_CMST      *(volatile unsigned int *)(REGBASE+0x20001c)
#define     I_ISPR      *(volatile unsigned int *)(REGBASE+0x200020)
#define     I_ISPC      *(volatile unsigned int *)(REGBASE+0x200024)
#define     F_ISPR      *(volatile unsigned int *)(REGBASE+0x200038)
#define     F_ISPC      *(volatile unsigned int *)(REGBASE+0x20003c)


#define BUFSIZE 100

static int  fd = 0 ;

static void config_bwscon_and_port_and_extint (void)
{
        long  temp;

    /*bus width config for fpga and tl16c750*/

    temp = BWSCON ;
    
    BWSCON = ( temp & ( ~0xFF00 ) ) | 0x4400 ;  /*nGCS3: TL16C750. 8bit mode*/
                                        	/*nGCS2: FPGA. 8bit mode*/

    /* Configuration Port Control Register*/
                									
    /* Port A */
                									
    PCONA = 0x3FF;

    /* Port B */
    
    PCONB = 0x7FF;

    /* Port C */

    PCONC = 0XFF000000;

    /* Port D */
    
    PCOND = 0x5000;
    PDATD = 0xC0;

    /* Port E */
    
    PCONE = 0x00000028;

    /* Port F */
    
    PCONF = 0x00124b2a;

    /* Port G */
    
    PCONG = 0x00000030; /*  PG2--INT750--EINT2*/

    /*INTMSK*/
    
    temp = INTMSK ;
    INTMSK = temp | 0x800064;   /*open UTXD1,URXD1,EXTINT2,I2C*/

    /* Configure TL16C750 interupt*/
    
    temp = EXTINT;
    EXTINT = ( temp & ( ~0x700 ) ) | 0x100 ;
}

             
int main(void)
{

    int     count = 0 ;
    unsigned char i=0;
    unsigned char ret = 0  ;		
    unsigned char readData[100];
    
    unsigned char buf[2]={ 0x00 , 0x00 }; //addr,data

    printf("start to test the driver for at24c01a.\n\n");

    printf("configure arm......");
       
    config_bwscon_and_port_and_extint();

    printf("done!\n\n");

    printf("open at24c01a......");

    fd= open("/dev/at24c01a",  O_RDWR | O_NOCTTY);

    if( fd < 0 )
    { 
        printf( "Fail to open AT24C01A!\n" );
        exit(1);
    }			
    
    printf("done\n\n");

    printf("write 0-100 into iic... ... \n");
    
    for( i = 0 ; i < 20 ; i ++ )
    {	
        buf[ 0 ] = i ;  //address
        buf[ 1 ] = i ;  //data
        write( fd, buf , 2 );
    }

    printf("done\n\n");


    
    printf("read data from iic... ... \n");
    for( i = 0 ; i < 20 ; i ++ )
    {
        count = read( fd , &ret , i );
        readData[ i ] = ret ;
    }

    printf("done\n\n");
    
    printf("data are: 0x%x\n ", ret);

    for( i = 0 ; i < 20 ; i ++ )
    {	
        printf("%u",readData[ i ] );
    }
    
    printf("\n finished!\n");	

    close(fd);
    
    return 0;
}


⌨️ 快捷键说明

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