📄 main.c
字号:
/****************************************Copyright (c)*****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info----------------------------------------------------------------------------------
** File Name: Main.c
** Last modified Date: 2008.07.29
** Last Version: v1.0
** Description: LM5749模拟EEPROM24C02
**
**---------------------------------------------------------------------------------------------------------
** Created By: 胡鑫
** Created date: 2008.07.22
** Version: v1.0
** Descriptions:
**
**---------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
**********************************************************************************************************/
#include "hw_memmap.h"
#include "hw_ints.h"
#include "hw_types.h"
#include "hw_i2c.h"
#include "gpio.h"
#include "sysctl.h"
#include "i2c.h"
#include "interrupt.h"
/**********************************************************************************************************
I2C相关定义
**********************************************************************************************************/
#define CAT24C02 0x50 /* 24C02从机地址 */
/**********************************************************************************************************
全局变量定义
**********************************************************************************************************/
unsigned char Data[256] = {0}; /* 数据,24C02可存256字节 */
unsigned long DataAddr = 0; /* 数据地址变量 */
/**********************************************************************************************************
** Function name: I2C_Slave_ISR
** Descriptions: I2C从机中断服务函数
** 主机向24C02写数据的软件协议如下:
** Start | SlaveAddr +W | DataAddr | Data0 | Data1 |... | Stop
** 主机向24C02读数据的软件协议如下:
** Start | SlaveAddr +W | DataAddr | Start | SlaveAddr +R | Data0 | Data1 |... | Stop
** input parameters: 无
** output parameters: 无
** Reurned value: 无
**********************************************************************************************************/
void I2C_Slave_ISR(void)
{
unsigned long ulStatus; /* 读状态临时变量 */
I2CSlaveIntClear(I2C0_SLAVE_BASE); /* 清除中断状态 */
ulStatus = I2CSlaveStatus(I2C0_SLAVE_BASE); /* 读data中断状态 */
ulStatus = ulStatus & (I2C_SCSR_TREQ | I2C_SCSR_RREQ | I2C_SCSR_FBR);
/* 屏蔽其他位 */
/* 只判断FBR,RREQ,TREQ */
switch(ulStatus)
{
case I2C_SCSR_TREQ: /* 有发送请求 */
I2CSlaveDataPut(I2C0_SLAVE_BASE , Data[DataAddr]); /* 发送DataAddr中的数据 */
DataAddr++; /* 数据地址自增 */
break;
case I2C_SCSR_RREQ: /* 有读取请求 */
Data[DataAddr] = I2CSlaveDataGet(I2C0_SLAVE_BASE); /* 读取DataAddr中的数据 */
DataAddr++; /* 数据地址自增 */
break;
case (I2C_SCSR_RREQ | I2C_SCSR_FBR): /* 接收到的第一个字节 */
DataAddr = I2CSlaveDataGet(I2C0_SLAVE_BASE); /* 这个字节是数据地址 */
break;
}
}
/**********************************************************************************************************
** Function name: main
** Descriptions: 该范例程序演示了如何使用I2C从机功能模拟24C02的软件协议。
** 采用中断方式,根据接收到的数据地址,向主机发送或接收数据。
** 管教连接:PB2 -> SCL,PB3 -> SDA
** Returned value: 无
**********************************************************************************************************/
int main(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); /* 使能I2C模块 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); /* 使能I2C管脚所在的GPIO */
GPIOPinTypeI2C(GPIO_PORTB_BASE , GPIO_PIN_2 | GPIO_PIN_3); /* I2C管脚配置 */
I2CSlaveInit(I2C0_SLAVE_BASE , CAT24C02); /* I2C从模块初始化,从机地址0x50 */
IntMasterEnable(); /* 使能总中断 */
IntEnable(INT_I2C0); /* 使能I2C中断 */
I2CSlaveIntEnable(I2C0_SLAVE_BASE); /* 使能I2C从机中断 */
I2CSlaveIntClear(I2C0_SLAVE_BASE); /* 清除中断状态 */
while(1);
}
/**********************************************************************************************************
END FILE
**********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -