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

📄 iic.c

📁 三星ARM2410的键盘及数码管控制程序
💻 C
字号:
/*=============================================================================
--------------------------------- Copy Left -----------------------------------
						Illidan Fly's Project
						Power by BigFly Network
						http://bigfly.happybobby.com
						
						Released under GPL2 License

----------------------------- File Description --------------------------------
 Filename:	iic.c
 Date:		2006.12.31
 Version:	0.0.1
 Description:

----------------------------- Version History ---------------------------------
 0.0.1: First release

=============================================================================*/

#include "iic.h"

#include "2410addr.h"
#include "2410lib.h"

void iicsend(unsigned char addr, unsigned char *buf, int size)
{
	// IIC 总线 Master 模式数据发送函数
	
	// ZLG7290要求IIC传输速率不大于32Kbit/s,即Tx clock不大于32KHz
	// 设置IICCLK=PCLK/512 Tx clock=IICCLK/4,则
	// 如果FLCK=200MHz,则最大Tx clock = 24kHz,处于可接受范围
	rIICCON=(1<<7) | (1<<6) | (1<<5) | (0<<4) | (3<<0);
	rIICDS=addr;
	
	rIICDS=*(buf++);
	size--;
	
	// 开始发送
	rIICSTAT=0xF0;
	
	while(1)
	{
		// 等待发送完成
		do
		{
			Delay(10);
		}
		while(!(rIICCON & IIC_PENDING_BIT));
		
		if(size>0)
		{	
			// 寄存器设置后一个字节
			rIICDS=*(buf++);
			size--;
		}
		else
		{
			// 发送结束
			rIICSTAT=0xD0;
			rIICCON=rIICCON & IIC_PENDING_MASK;
			Delay(10);
			
			break;
		}
		
		// 总线发送后一字节
		rIICCON=rIICCON & IIC_PENDING_MASK;
	}
}

void iicreceive(unsigned char addr, unsigned char *buf, int size)
{
	// IIC 总线 Master 模式数据接收函数
	
	// ZLG7290要求IIC传输速率不大于32Kbit/s,即Tx clock不大于32KHz
	// 设置IICCLK=PCLK/512 Tx clock=IICCLK/4,则
	// 如果FLCK=200MHz,则最大Tx clock = 24kHz,处于可接受范围
	rIICCON=(1<<7) | (1<<6) | (1<<5) | (0<<4) | (3<<0);
	rIICDS=addr;
	
	// 开始接收
	rIICSTAT=0xB0;
		
	while(1)
	{
		// 等待接收完成
		do
		{
			Delay(10);
		}
		while(!(rIICCON & IIC_PENDING_BIT));
		
		if(size>0)
		{	
			// 从寄存器接收一个字节
			*(buf++)=rIICDS;
			size--;
		}
		else
		{
			// 接收结束
			rIICSTAT=0x90;
			rIICCON=rIICCON & IIC_PENDING_MASK;
			Delay(10);
			
			break;
		}
		
		// 总线接收下一字节
		rIICCON=rIICCON & IIC_PENDING_MASK;
	}
}

⌨️ 快捷键说明

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