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

📄 i2c.c

📁 ARM7 lpc2132+vs1003+sdcard 制作的 MP3 此程序在ADS1.2环境下编译
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                 上海新时达电气有限公司
**                                     研  发  中  心
**                                        研发一部 
**
**                                 http://www.stepelevatar.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: I2C.c
**创   建   人: 吕海安
**最后修改日期: 2007年01月10日
**描        述: I2C的底层函数
**注        意: IIC属于共享资源,所以使用了一个互斥信号量,每一个互斥信号量需要一个优先
**              等级,因此需要空闲一个任务优先级给IIC资源。   
**           
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 吕海安
** 版  本: v1.0
** 日 期: 2007年01月10日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2007年07月04
** 描 述: For MP3 语音报站器
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"


void InitI2CGPIO(void)
{
// Init I2C1 for LPC2134
// PINSEL0 = (PINSEL0 & (~(0x03 << 22))) | (0x03 << 22) |
//   			 (PINSEL0 & (~(0x03 << 28))) | (0x03 << 28);

// Init I2C1 for LPC2119
   PINSEL0 = (PINSEL0 & (~(0x03 << 4))) | (0x01 << 4) |
     			 (PINSEL0 & (~(0x3 << 6))) | (0x01 << 6);

}


void InitI2c(INT8U  Baud)
{
// FM24CL64 最高支持 1MHz; 使用 750 KHz;    RTC  PCF8563T 最高支持 400 KHz; 使用 300 KHz

    if (Baud)   // 800KHz
    {
        I2C0SCLH = 20;
        I2C0SCLL = 20;
    }
    else        // 300 KHz
    {
        I2C0SCLH = 50;
        I2C0SCLL = 50;
    }
}


void StartI2C(void)
{
    I2C0CONCLR = 0xff;
    I2C0CONSET = 0x40;
    I2C0CONSET = 0x60;
    while ((I2C0CONSET & 0x08) == 0); //等待SI为1
}


void SendByte(INT8U ch)
{
    I2C0DAT = ch;
    I2C0CONCLR = 0x28;  // 清除标志位STA,SI
    while ((I2C0CONSET & 0x08) == 0); //等待SI为1
}


INT32U RcvByteNA(void)
{
    I2C0CONCLR = 0xc;  // 清除标志位AA,SI
    while ((I2C0CONSET & 0x08) == 0); //等待SI为1
    return (I2C0DAT);
}


INT32U RcvByteA(void)
{
    I2C0CONCLR = 0x8;  // 清除标志位 SI
    I2C0CONSET = 0x4;  // 置位AA,即发送应答位.
    while ((I2C0CONSET & 0x08) == 0); //等待SI为1
    return (I2C0DAT);
}


void wait(void)
{
	INT32U	i;

	for (i = 0; i < 20000; i++);
}


void StopI2C(void)
{
    I2C0CONCLR = 0x28;  // 清除标志位STA,SI
    I2C0CONSET = 0x50; // 发送结束总线信号
    wait();
}


/*********************************************************************************************************
**                            End Of File
*********************************************************************************************************/

⌨️ 快捷键说明

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