/*!
* COPYRIGHT NOTICE
* Copyright (c) 2013,山外科技
* All rights reserved.
* 技术讨论:山外论坛 http://www.vcan123.com
*
* 除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
* 修改内容时必须保留山外科技的版权声明。
*
* @file MK60_i2c.c
* @brief i2c驱动函数
* @author 山外科技
* @version v5.0
* @date 2013-07-12
*/
#include "common.h"
#include "MKL_port.h"
#include "MKL_i2c.h"
unsigned char MasterTransmission;
unsigned char SlaveID;
I2C_MemMapPtr I2CN[2] = {
I2C0_BASE_PTR, I2C1_BASE_PTR
}; //定义两个指针数组保存 I2CN 的地址
/*
* 把I2C通信的每个小步骤都用宏定义来实现,方便编写顶层函数
* 此宏定义参考飞思卡尔公司例程修改所得
*/
//启动信号
#define i2c_Start(I2Cn) I2C_C1_REG(I2CN[I2Cn]) |= (I2C_C1_TX_MASK );I2C_C1_REG(I2CN[I2Cn]) |= ( I2C_C1_MST_MASK) //MST 由0变1,产生起始信号,TX = 1 进入发送模式
//停止信号
#define i2c_Stop(I2Cn) I2C_C1_REG(I2CN[I2Cn]) &= ~(I2C_C1_MST_MASK );I2C_C1_REG(I2CN[I2Cn]) &= ~(I2C_C1_TX_MASK) ; //MST 由1变0,产生停止信号,TX = 0 进入接收模式
//重复启动
#define i2c_RepeatedStart(I2Cn) I2C_C1_REG(I2CN[I2Cn]) |= I2C_C1_RSTA_MASK
//进入接收模式(应答,需要接收多个数据,接收最后一个字