S3C2440之IIC

IIC个人感觉驱动的中断步骤还是挺麻烦的,

要按照步骤流程来,程序如下:

/******************************
*文件名:IIC.c				  *
*功能:   AT24C02底层驱动	  *
*创建者: 潘星宇				  *
*最后修改:2013.03.20		  *
*备注:						  *
*							  *
*******************************/
#include "IIC.h"

static U8 _iicData[IICBUFSIZE];		//IIC数据缓冲区 
static volatile int _iicDataCount;	//IIC数据计数器它是保证数据地址和数据值发送完了	 
static volatile int _iicStatus;		//IIC状态标志
static volatile int _iicMode;		//IIC模式变量
static int _iicPt;					//IIC读数据计数器,用于修改读回的数据缓冲区的地存放在址

/**************************************************************************
***** 函数名: IIC_init(void)
***** 功  能: IIC初始化
***** 参  数: 无
***** 返回值: 无
***** 创建者:	
***** 创建时间:
***** 最后更新: 
****************************************************************************/
void IIC_init(void)
{
	/*第一步:功能选择 GPE15:IICSDA , GPE14:IICSCL。禁止内部上拉*/
	//rGPECON = 0xa0000000; // 1010 GPE15:IICSDA , GPE14:IICSCL
	rGPECON &= 0x0fffffff; 
	rGPECON |= 0xa0000000;  // 1010 GPE15:IICSDA , GPE14:IICSCL
	/*第二步:将中断函数地址送给IIC中断向量地址,pISR_IIC:IIC中断服务程序地址寄存器  IicInt为IIC中断服务函数名*/
	pISR_IIC = (unsigned)IicInt;

	/*第三步:让IIC中断源有效(IIC中断源使能)*/ 
	rINTMSK &= ~(BIT_IIC); //~(0x1<<27)

	/***********************************************************************
	***IICCON[7]:IIC总线应答使能位             
	***IICCON[6]:IIC总线传输时钟预定标器源时钟选择位,
	             0:IICCLK = fPCLK /16 ; 1: IICCLK = fPCLK/512 
	***IICCON[5]:IIC总线接收发送中断使能位0:无效即禁止中断  1:有效,允许中断     
	***IICCON[4]:IIC总线接收发送中断挂起标志
	             1 中断挂起(读)恢复IIC传输(写),	 
	             0无中断挂起(读) N/A(写); 
				 //中断标记,此位用来标识是否有IIC中断发生,读出为0时表示没有中断发生,
				 //读出为1时表示有中断发生。当此位为1时,SCL线被拉低,此时所有IIC传输停止;
				 //如果要继续传输,需写入0清除它。
	***IICCON[3:0]:IIC总线传输时钟预写器,Tx clock = IICCLK/(IICCON[3:0]+1) 与IICCON[6]有关 
	*******************************************************************/ 
	/*Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, 
	Transmit clock value Tx clock=IICCLK/16
	If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz */
	//第四步:设置IICCON寄存器,ACK信号使能,16分频时钟,TX/RX中断允许,继续传输,预分频系数为16。
	rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf);//IICCON[4]上电为0,所以不需要设置
	/* 第五步:设置本机当从机时的地址,2440在IIC空闲的情况下通常配置为从机模式*/ 
	rIICADD  = 0x10;             

	/**************************************************************************** 
	***IICSTAT[7:6] 00:  从接收模式  01:  从发送模式  
	                10:  主接收模式  11: 主发送模式 

	***IICSTAT[5]   IIC总线忙状态位   0:(读)不忙,(写)停止信号生成;       
	1:(读)忙 (写)开始信号输出.在开始信号后,IICDS中的数据自
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值