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

📄 main.c

📁 基于CORTEX-M3内核的I2C总线的应用
💻 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 + -