📄 eeprom.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http:// www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: eeprom.c
** Last modified Date: 2007.09.18
** Last Version: V1.0
** Description: The basic experiment of eeprom eeprom基础实验
**
**--------------------------------------------------------------------------------------------------------
** Created By: Kang qinhua
** Created date: 2007.09.18
** Version: V1.0
** Descriptions: The original version 初始版本
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*********************************************************************************************************/
#include "hw_i2c.h"
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "i2c.h"
#include "interrupt.h"
#include "sysctl.h"
void EEPROMWrite (unsigned char *pucData, unsigned long ulOffset, unsigned long ulCount);
void EEPROMRead (unsigned char *pucData, unsigned long ulOffset, unsigned long ulCount);
/*********************************************************************************************************
** Function name: Delays
** Descriptions: 延时子程序,当no的值越大延时的时间越长。
** input parameters: no: 延时参数
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void Delays (unsigned char no)
{
int i, j;
for ( ; no > 0; no--) {
for (i = 0; i < 150; i++) {
for (j = 0; j < 255; j++);
}
}
}
#define I2C_PIN GPIO_PIN_2 | GPIO_PIN_3
#define BUZZER GPIO_PIN_7 /* 数据判断指示灯的设置 */
#define writeaddr 0x00 /* 对24c02操作的子地址 */
#define readaddr 0x00
/*********************************************************************************************************
** Function name: main
**
** Descriptions: Main function of the project 工程的主函数
**
** Input parameters: None 无
** Returned value: None 无
**
** Used global variables: None 无
** Calling modules: SysCtlClockSet,SysCtlPeripheralEnable,IntMasterEnable,GPIOPinTypeI2C,
** GPIODirModeSet,GPIOPadConfigSet,I2CMasterInit,IntEnable,I2CMasterIntEnable
** GPIOPinWrite
**
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
int main(void)
{
unsigned char pucData[8];
unsigned long ulIdx;
SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ); /* 设置晶振为系统时钟 */
SysCtlPeripheralEnable (SYSCTL_PERIPH_I2C); /* 使能I2C外设 */
SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOB); /* 使能GPIO外设 */
SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOA); /* 使能GPIO外设 */
IntMasterEnable(); /* 使能处理器中断 */
GPIOPinTypeI2C (GPIO_PORTB_BASE, I2C_PIN); /* 配置相关引脚,以进行I2C操作 */
GPIODirModeSet (GPIO_PORTA_BASE, BUZZER, GPIO_DIR_MODE_OUT); /* 设置 GPIO PA6为输出口 */
GPIOPadConfigSet (GPIO_PORTA_BASE, BUZZER, /* GPIO PA6的端口配置 */
GPIO_STRENGTH_4MA,
GPIO_PIN_TYPE_STD);
I2CMasterInit (I2C_MASTER_BASE, false); /* 初始化I2C主机,设置主机为低速*/
IntEnable (INT_I2C); /* 使能I2C中断 */
I2CMasterIntEnable (I2C_MASTER_BASE); /* 使能I2C主机中断 */
GPIOPinWrite (GPIO_PORTA_BASE, BUZZER, ~BUZZER);
while(1) { /* 数据串写入EEPROM的前8个字节 */
for (ulIdx = 0; ulIdx < 8; ulIdx++) {
pucData[ulIdx] = ulIdx;
}
EEPROMWrite (pucData, writeaddr, 8); /* 向EEPROM的00地址单元中写入8个
数据(0~7) */
Delays(5); /* 延时5~10ms写数据入CAT24C02中*/
EEPROMRead (pucData, readaddr, 8); /* 从EEPROM的00地址单元中读取8个
数据 */
Delays(5); /* 延时5~10ms从CAT24C02中独处数
据 */
for (ulIdx = 0; ulIdx < 8; ulIdx++) {
if (pucData[ulIdx] != ulIdx) { /* 判断接收到的数据是否正确 */
GPIOPinWrite (GPIO_PORTA_BASE, BUZZER, ~BUZZER); /* 如果接收的数据出错,则蜂鸣
器长鸣 */
while(1) {
;
}
}
}
GPIOPinWrite (GPIO_PORTA_BASE, BUZZER, ~BUZZER); /* 如果接收到的数据正确,则蜂鸣
器蜂鸣一声 */
Delays(3);
GPIOPinWrite (GPIO_PORTA_BASE, BUZZER, BUZZER);
while(1) {
;
}
}
}
#define CSI24c02 0x50 /* 从机地址,注意需将原从机地址*/
/*********************************************************************************************************
I2C总线的相关的操作状态。
*********************************************************************************************************/
#define STATE_IDLE 0 /* 状态0,总线空闲状态 */
#define STATE_WRITE_NEXT 1 /* 状态1,写下一个数据状态 */
#define STATE_WRITE_FINAL 2 /* 状态2,写最后一个数据 */
#define STATE_WAIT_ACK 3 /* 状态3,返回一个应答信号,
以指示读操作已经完成 */
#define STATE_SEND_ACK 4 /* 状态4,等待应答信号 */
#define STATE_READ_ONE 5 /* 状态5,读取一个字节的数据 */
#define STATE_READ_FIRST 6 /* 状态6,读取字符串的首数据 */
#define STATE_READ_NEXT 7 /* 状态7,读取下一个数据 */
#define STATE_READ_FINAL 8 /* 状态8,读取最后一个数据 */
#define STATE_READ_WAIT 9 /* 状态9,读取数据的最终状态 */
/*********************************************************************************************************
此变量存储将被发送或接收的数据。
*********************************************************************************************************/
static unsigned char *g_pucData = 0;
static unsigned long g_ulCount = 0;
/*********************************************************************************************************
中断服务程序的当前状态。
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -