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

📄 eeprom.c

📁 easyARM8962 EEPROM读写操作源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************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 + -