📄 iic.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 + -