- #include
- #include”2440addr.h”
- #include”2440lib.h”
- #include”Option.h”
- #include”def.h”
- intflag;//中止标志(在中止子程序里清零,即未中止flag=1,中止后flag=0)
- void__irqIicInt(void);
- voidWr24C02(U32slvAddr,U32addr,U8data);
- voidRd24C02(U32slvAddr,U32addr,U8*data);
- voidMain(void)
- {
- unsignedinti,j;
- staticU8data[256];//用于存储AT24C02读出的数据
- SelectFclk(2);//设置体系时钟400M
- ChangeClockDivider(2,1);//设置分频1:4:8
- CalcBusClk();//核算总线频率
- rGPHCON&=~((3<<4)|(3<<6));
- rGPHCON|=(2<<4)|(2<<6);//GPH2--TXD[0];GPH3--RXD[0]
- rGPHUP=0x00;//使能上拉功用
- Uart_Init(0,115200);
- Uart_Select(0);
- Uart_Printf(“[IICTest(Polling)usingAT24C020]\n”);
- rGPEUP|=0xc000;//关上拉
- rGPECON&=~0xf0000000;
- rGPECON|=0xa0000000;//GPE15:IICSDA,GPE14:IICSCL
- pISR_IIC=(unsigned)IicInt;//设置中止程序地址
- rINTMSK&=~(BIT_IIC);//开中止源
- //使能应对,IIC总线时钟IICCLK=PCLK/16,使能中止,发送时钟IICCLK/16
- rIICCON=(1<<7)|(0<<6)|(1<<5)|(0xf);
- rIICADD=0x10;//2440从机地址=[7:1]
- rIICSTAT=0x10;//IIC总线数据输出使能(Rx/Tx)
- Uart_Printf(“WritetestdataintoAT24C02\n”);
- for(i=0;i<256;i++)
- Wr24C02(0xa0,(U8)i,i);//写入数据到AT24C02
- for(i=0;i<256;i++)//数组数据清零
- data[i]=0;
- Uart_Printf(“ReadtestdatafromAT24C02\n”);
- for(i=0;i<256;i++)
- Rd24C02(0xa0,(U8)i,&(data[i]));//读取AT24C02的数据放入data数组中
- for(i=0;i<16;i++)
- {
- for(j=0;j<16;j++)
- Uart_Printf(“%2x”,data[i*16+j]);//打印从AT24C02读出的数据
- Uart_Printf(“\n”);
- }
- }
- voidWr24C02(U32slvAddr,U32addr,U8data)
- {
- flag=1;
- rIICDS=slvAddr;//从器材地址写入数据移位寄存器
- rIICSTAT=0xf0;//主发形式,发生起始信号,使能Rx/Tx
- rIICCON&=~0x10;//铲除Tx/Rx中止挂起标志
- while(flag==1)//等候发送完结
- Delay(1);
- flag=1;
- rIICDS=addr;//写入存储字节的地址到数据移位寄存器
- rIICCON&=~0x10;//铲除Tx/Rx中止挂起标志
- while(flag==1)//等候发送完结
- Delay(1);
- flag=1;
- rIICDS=data;//把要发送的数据写入数据移位寄存器
- rIICCON&=~0x10;//铲除Tx/Rx中止挂起标志
- while(flag==1)//等候发送完结
- Delay(1);
- rIICSTAT=0xd0;//制止Rx/Tx
- rIICCON=0xaf;//ResumesIICoperation.
- Delay(1);
- }
- voidRd24C02(U32slvAddr,U32addr,U8*data)
- {
- U8temp;
- flag=1;
- rIICDS=slvAddr;//从器材地址写入数据移位寄存器
- rIICSTAT=0xf0;//主发形式,发生起始信号,使能Rx/Tx
- rIICCON&=~0x10;//铲除Tx/Rx中止挂起标志
- while(flag==1)//等候发送完结
- Delay(1);
- flag=1;
- rIICDS=addr;//写入存储字节的地址到数据移位寄存器
- rIICCON&=~0x10;//铲除Tx/Rx中止挂起标志
- while(flag==1)//等候发送完结
- Delay(1);
- flag=1;
- rIICDS=slvAddr;
- rIICSTAT=0xb0;//主接纳形式,使能Rx/Tx
- rIICCON&=~0x10;//铲除Tx/Rx中止挂起标志
- while(flag==1)//等候发送完结
- Delay(1);
- //留意:读取下面这个字节有必要进行,由于在发送带有读指令的从设备地址后,
- //AT24C02A会再回来一个从设备地址信息或从设备内存地址信息作为应对,所以
- //必定要把该字节读取后扔掉,由于它不是咱们所要读取的信息;
- flag=1;
- temp=rIICDS;
- rIICCON&=~0x10;//铲除Tx/Rx中止挂起标志
- while(flag==1)
- Delay(1);
- rIICCON=0x2f;//ResumesIICoperation.制止应对
- *data=rIICDS;
- Delay(1);
- rIICSTAT=0x90;//StopMasRxcondition
- rIICCON=0xaf;//ResumesIICoperation.
- Delay(1);//Waituntilstopcondtionisineffect.
- }
- void__irqIicInt(void)
- {
- ClearPending(BIT_IIC);
- flag=0;
- }
S3C2440IIC中止方法
includestringh>include2440addrhinclude2440libhincludeOptionhincludedefhintflag;中断标志(在中断子程序里清零,
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/262817.html