/***********************************************************/
/* Copyright 2003 by SEED Incorporated. */
/* All rights reserved. Property of SEED Incorporated. */
/* */
/***********************************************************/
#include "iic.h"
#define I2CDELAY(iterations) { \
volatile Int j; \
for(j = 0; j < iterations; j ++); \
}
#define DELAY_TIME 0x4000
/*SEEDDM642的IIC的设置结构*/
I2C_Config SEEDDM642IIC_Configt = {
0, /* master mode, i2coar;采用主模式 */
0, /* no interrupt, i2cimr;只写,不读,采用无中断方式*/
(20-5), /* scl low time, i2cclkl; */
(20-5), /* scl high time,i2cclkh; */
2, /* configure later, i2ccnt;*/
0, /* configure later, i2csar;*/
0x4620, /* master tx mode, */
/* i2c runs free, */
/* 8-bit data + NACK */
/* no repeat mode */
(75-1), /* 2MHz clock, i2cpsc */
};
I2C_Config SEEDDM642IIC_Configr = {
0, /* master mode, i2coar;采用主模式 */
0, /* no interrupt, i2cimr;只写,不读,采用无中断方式*/
(20-5), /* scl low time, i2cclkl; */
(20-5), /* scl high time,i2cclkh; */
1, /* configure later, i2ccnt;*/
0, /* configure later, i2csar;*/
0x4420, /* master tx mode, */
/* i2c runs free, */
/* 8-bit data + NACK */
/* no repeat mode */
(75-1), /* 2MHz clock, i2cpsc */
};
/*
* ======== _IIC_write ========
* This function performs write operation via I2C bus.
*/
/* Spin in a delay loop for delay iterations */
void EVMDM642_wait(Uint32 delay)
{
volatile Uint32 i, n;
n = 0;
for (i = 0; i < delay; i++)
{
n = n + 1;
}
}
/* Spin in a delay loop for delay microseconds */
void EVMDM642_waitusec(Uint32 delay)
{
EVMDM642_wait(delay * 21);
}
void _IIC_write(I2C_Handle hI2C,
Uint8 devAddress,
Uint32 subAddress,
Uint8 data
)
{
I2C_Config prevI2CCfg;
/* Wait until bus is free */
while (I2C_bb(hI2C));
/* Save old settings */
I2C_getConfig(hI2C, &prevI2CCfg);
/* Restore settings for AIC23 */
SEEDDM642IIC_Configt.i2csar = devAddress;
I2C_config(hI2C, &SEEDDM642IIC_Configt);
/* Submit the MSB for transmit */
I2C_RSETH(hI2C, I2CDXR, (subAddress) & 0xff);
/* Generate start condition, starts transmission */
I2C_start(hI2C);
/* Wait until MSB transmit is done */
while(!I2C_xrdy(hI2C));
/* Submit the LSB for transmit */
I2C_RSETH(hI2C, I2CDXR,data);
// EVMDM642_waitusec(350);
/* Generate stop condition */
I2C_sendStop(hI2C);
/* Wait until bus is free */
while (I2C_bb(hI2C));
EVMDM642_waitusec(350);
/* Reconfigure I2C with old settings */
I2C_config(hI2C, &prevI2CCfg);
}
/*
* ======== _IIC_read ========
* This function performs read from operation via I2C bus.
*/
void _IIC_read(I2C_Handle hI2C,
Uint8 devAddress,
Uint32 subAddress,
Uint8 *data
)
{
I2C_Config prevI2CCfg;
/* Wait until bus is free */
while (I2C_bb(hI2C));
/* Save old settings */
I2C_getConfig(hI2C, &prevI2CCfg);
/* Restore settings for AIC23 */
SEEDDM642IIC_Configt.i2csar = devAddress;
I2C_config(hI2C, &SEEDDM642IIC_Configt);
/* Submit the MSB for transmit */
I2C_RSETH(hI2C, I2CDXR, (subAddress) & 0xff);
/* Generate start condition, starts transmission */
I2C_start(hI2C);
/* Wait until MSB transmit is done */
while(!I2C_xrdy(hI2C));
/* Generate stop condition */
I2C_sendStop(hI2C);
EVMDM642_waitusec(20);
/* Reconfigure I2C with old settings */
I2C_config(hI2C, &prevI2CCfg);
I2C_getConfig(hI2C, &prevI2CCfg);
/*从发送到接收需一段时间转换*/
EVMDM642_waitusec(0x200);
/* Restore settings for AIC23 */
SEEDDM642IIC_Configr.i2csar = devAddress;
I2C_config(hI2C, &SEEDDM642IIC_Configr);
/* Generate start condition, starts transmission */
I2C_start(hI2C);
while(I2C_FGETH(hI2C,I2CSTR,ARDY));
/* Wait until MSB transmit is done */
while(!I2C_rrdy(hI2C));
/* Submit the MSB for transmit */
*data = I2C_RGETH(hI2C, I2CDRR);
/* Generate stop condition */
I2C_sendStop(hI2C);
/* Wait until bus is free */
while (I2C_bb(hI2C));
/* Short delay for AIC23 to accept command */
EVMDM642_waitusec(20);
/* Reconfigure I2C with old settings */
I2C_config(hI2C, &prevI2CCfg);
}
iic.rar_DM642_DM642 IIC_I2C DM642 _RTC_dm642 i2c
版权申诉
72 浏览量
2022-09-24
00:41:38
上传
评论
收藏 1KB RAR 举报
钱亚锋
- 粉丝: 90
- 资源: 1万+
最新资源
- JAVAWML信息查询与后端信息发布系统实现-WML信息查询设计(源代码+论文)
- 6回路比赛抢答器PLC程序.opt
- 最终结果-信贷可得性.xlsx
- 基于python和模拟退火算法的拆装流水线问题解决方案(免费提供源码)
- 使用 SSM(Spring MVC + Spring + MyBatis)框架实现申报项目信息管理系统实验报告
- 这本书深入探讨了MySQL数据库系统的内部工作原理,特别适合高级用户、数据库管理员和开发者,希望了解MySQL在低层次上如何运行
- 停车场车位自动检测系统电路图
- 所有指定格式的Excel文件的工作表合并到一个新的Excel文件中
- 从零开始三天学会微信小程序开发
- GZ099 集成电路应用开发赛题第1套
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈