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

📄 i2cprivate.h

📁 《μCOS-II微小内核分析与程序设计-基于LPC2300》配套例程 第四章 电脑自动打铃器设计与实现
💻 H
字号:
/***********************************************Copyright (c)*********************************************
**                                Guangzou ZLG-MCU Development Co.,LTD.
**                                     
**                                       http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			    IICPrivate.h
** Last modified Date:      2007-10-15
** Last Version:		    1.0
** Descriptions:		    IIC私有头文件
**
**--------------------------------------------------------------------------------------------------------
** Created by:			    lixiaocheng
** Created date:		    2007-10-15
** Version:				    1.0
** Descriptions:		    该头文件只要在I2C.c中包括就好了,在CONFIG.h中不要包括
**
**--------------------------------------------------------------------------------------------------------
** Modified by:			    
** Modified Date:		    
** Version:				    
** Descriptions:		    
**
*********************************************************************************************************/
#ifndef __I2CPRIVATE_H
#define __I2CPRIVATE_H

/*********************************************************************************************************
   I2C器件信息结构结构体
*********************************************************************************************************/
struct __i2cinfo {
                uint32      uiID;                                         /*  标识该结构体是那个部件      */
                uint32      uiOffBase;                                  /*  I2C寄存器间隔= 1 << OffBase */                         
    volatile    uint8      *pucAddrBase;                                /*  I2C寄存器基地址             */            
    volatile    uint8       ucIICflag;			                        /*  I2C_IDLE		:   空闲    */
							                                            /*  I2C_ERR    	:   读写错误    */
							                                            /*  I2C_BUSY	    :   忙      */		
        						 	                                    /*  I2C_WRITE_END  :   写完成   */
         							                                    /*  I2C_READ_END   :   读完成   */
                uint8       ucSlave;                                    /*  是否是从机标志              */
   	            uint8 	    ucSLAddr;		                            /*  需要访问的从机地址          */
	            uint16		usSubAddr;		                            /*  从机内部子地址              */ 
	            uint8 		ucSubAddrNum;	                            /*  从机内部子地址字节数        */	
	            uint8      	ucI2CSubAddrCtl;                            /*  子地址控制。                */
									                                    /*  0--子地址已经处理-->        */
									                                    /*  -->或者不需要子地址         */
									                                    /*  1--读取操作                 */
									                                    /*  2--写操作                   */
	volatile    uint8	   *pucDataBuf;
	volatile    uint16		usDataNum;		                            /*  待处理的数据个数            */     	
}; 

typedef struct __i2cinfo    __I2C_INFO;                                 /*  定义类型                    */
typedef __I2C_INFO         *__PI2C_INFO;                                /*  定义指针                    */

/*********************************************************************************************************
   宏定义报错系统
*********************************************************************************************************/
#ifndef OPERATE_FAIL
#define OPERATE_FAIL        I2C_NOK
#endif

#ifndef OPERATE_SUCCESS
#define OPERATE_SUCCESS     I2C_OK
#endif

/*********************************************************************************************************
   定义I2C器件数目
*********************************************************************************************************/
#define __IIC_MAX_NUM                 3

/*********************************************************************************************************
   I2c作为主机或从机定义
*********************************************************************************************************/
#define __IIC_MASTER                  1                                 /*  标识IIC为主机               */
#define __IIC_SLAVER                  0                                 /*  标识IIC为从机               */

/*********************************************************************************************************
   自地址控制宏定义
*********************************************************************************************************/
#define __IIC_SUB_W                   2                                 /*  写操作标识符                */
#define __IIC_SUB_R                   1                                 /*  读操作标识符                */
#define __IIC_SUB_NONE                0                                 /*  子地址已处理或无子地址      */

/*********************************************************************************************************
  定义使用到的寄存器偏移地址
*********************************************************************************************************/
#define __B_IIC_SET                   0                                 /*  I20CONSET                   */
#define __B_IIC_STAT                  1                                 /*  I20STAT                     */
#define __B_IIC_DAT                   2                                 /*  I20DAT                      */
#define __B_IIC_ADR                   3                                 /*  I20ADR                      */
#define __B_IIC_SCLH                  4                                 /*  I20SCLH                     */
#define __B_IIC_SCLL                  5                                 /*  I20SCLL                     */
#define __B_IIC_CLR                   6                                 /*  I20CONCLR                   */

/*********************************************************************************************************
  中断状态宏定义
*********************************************************************************************************/
#define __SEND_START                  0x08                              /*  发送起始信号                */
#define __SEND_RESTART                0x10                              /*  发送重起信号                */
#define __SEND_SLA_W_ACK              0x18                              /*  发送SLA+W 收到ACK           */
#define __SEND_DATA_ACK               0x28                              /*  发送数据 收到ACK            */
#define __SEND_SLA_W_NOACK            0x20                              /*  发送SLA+W 收到非ACK         */
#define __SEND_DATA_NOACK             0x30                              /*  发送数据 收到非ACK          */
#define __LOSS_BUS                    0x38                              /*  丢失总线仲裁                */
#define __SEND_SLA_R_NOACK            0x48                              /*  发送SLA+R 收到非ACK         */
#define __SEND_SLA_R_ACK              0x40                              /*  发送SLA+R 收到ACK           */
#define __RECV_DATA_ACK               0x50                              /*  接收数据字节,返回ACK       */
#define __RECV_DATA_NOACK             0x58                              /*  接收数据字节,返回非ACK     */

/*********************************************************************************************************
  是否该驱动在UCOSII上使用
*********************************************************************************************************/
#define __UCOSII_EN                   1                                 /*  1使用UCOS,0禁用UCOS         */

/*********************************************************************************************************
  定义一些与操作系统相关的操作宏,移植不需要关系
*********************************************************************************************************/

#if __UCOSII_EN > 0
                                                                        /*  给I2C上锁                   */
#define __I2C_LOCK(nblock)  do {                                        \
                                uint8   ucErr;                          \
                                OSSemPend(nblock, 0, &ucErr);           \
                                if (ucErr != OS_NO_ERR) {               \
                                    return  (OPERATE_FAIL);             \
                                }                                       \
                            } while (0)

                                                                        /*  给I2C解锁                   */
#define __I2C_UNLOCK(nblock) do {                                       \
                                OSSemPost(nblock);                      \
                             } while(0)
                             
#define __OS_ENTER_CIRCT()              OS_ENTER_CRITICAL()             /*  关中断                      */
#define __OS_EXIT_CIRCT()               OS_EXIT_CRITICAL()              /*  开中断                      */

#else

#define __I2C_LOCK(nblock)
#define __I2C_UNLOCK(nblock)

#define __OS_ENTER_CIRCT()              
#define __OS_EXIT_CIRCT()               

#endif                                                                  /*  __UCOSII_EN                 */

#endif                                                                  /*  __I2CPRIVATE_H              */
/*********************************************************************************************************
   END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -