174 lines
6.4 KiB
C
174 lines
6.4 KiB
C
/* ------------------------------------------
|
|
* Copyright (c) 2016, Synopsys, Inc. All rights reserved.
|
|
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
|
|
* 1) Redistributions of source code must retain the above copyright notice, this
|
|
* list of conditions and the following disclaimer.
|
|
|
|
* 2) Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation and/or
|
|
* other materials provided with the distribution.
|
|
|
|
* 3) Neither the name of the Synopsys, Inc., nor the names of its contributors may
|
|
* be used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* \version 2016.05
|
|
* \date 2014-06-16
|
|
* \author Huaqi Fang(Huaqi.Fang@synopsys.com)
|
|
--------------------------------------------- */
|
|
|
|
/**
|
|
* \defgroup DEVICE_HAL_COMMON Common Device Layer Definitions
|
|
* \ingroup DEVICE_HAL_DEF
|
|
* \brief common definitions for device layer (\ref dev_common.h)
|
|
*
|
|
* @{
|
|
*
|
|
* \file
|
|
* \brief header file to define common definitions for device layer
|
|
* \details Here in this file provide definitions that need by other
|
|
* devices in device layer
|
|
*/
|
|
|
|
#ifndef _DEVICE_HAL_COMMON_H_
|
|
#define _DEVICE_HAL_COMMON_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
/**
|
|
* \defgroup DEVICE_HAL_COMMON_DEVSTATE Common Device State
|
|
* \ingroup DEVICE_HAL_COMMON
|
|
* \brief definitions for device state
|
|
* \details here defines macros for device open/close,
|
|
* device working good/error, used in
|
|
* \ref DEVICE_HAL_UART, \ref DEVICE_HAL_SPI,
|
|
* \ref DEVICE_HAL_IIC, \ref DEVICE_HAL_GPIO
|
|
* @{
|
|
*/
|
|
/*
|
|
* macros for device open and close state
|
|
*/
|
|
#define DEV_CLOSED (0) /*!< Indicate that device was closed */
|
|
#define DEV_OPENED (1) /*!< Indicate that the device was opened */
|
|
|
|
/*
|
|
* macros for device good and error state
|
|
*/
|
|
#define DEV_GOOD (0) /*!< Indicate device is good */
|
|
#define DEV_ERROR (1) /*!< Indicate device error */
|
|
/** @} */
|
|
|
|
/**
|
|
* \defgroup DEVICE_HAL_COMMON_DEVMTHD Common Device Working Method
|
|
* \ingroup DEVICE_HAL_COMMON
|
|
* \brief definitions for device working method(interrupt or poll)
|
|
* \details here defines macros for working method,
|
|
* interrupt or poll method,used in
|
|
* \ref DEVICE_HAL_UART, \ref DEVICE_HAL_SPI,
|
|
* \ref DEVICE_HAL_IIC, \ref DEVICE_HAL_GPIO
|
|
* @{
|
|
*/
|
|
/*
|
|
* macros for device working method
|
|
*/
|
|
#define DEV_POLL_METHOD (0) /*!< Indicate that the device running in poll method */
|
|
#define DEV_INTERRUPT_METHOD (1) /*!< Indicate that the device running in interrupt method */
|
|
/** @} */
|
|
|
|
/**
|
|
* \defgroup DEVICE_HAL_COMMON_DEVMODE Common Device Working Mode
|
|
* \ingroup DEVICE_HAL_COMMON
|
|
* \brief definitions for device working mode(master or slave)
|
|
* \details here defines macros for working mode,
|
|
* Master or Slave mode,used in
|
|
* \ref DEV_HAL_IIC, \ref DEV_HAL_SPI.
|
|
* @{
|
|
*/
|
|
/*
|
|
* macros for device working mode
|
|
*/
|
|
#define DEV_MASTER_MODE (0) /*!< Indicate that the device working as master */
|
|
#define DEV_SLAVE_MODE (1) /*!< Indicate that the device working as slave */
|
|
/** @} */
|
|
|
|
/**
|
|
* \defgroup DEVICE_HAL_COMMON_DEVSTATUS Common Device Status
|
|
* \ingroup DEVICE_HAL_COMMON
|
|
* \brief definitions for device status, 1 bit for 1 function
|
|
* @{
|
|
*/
|
|
#define DEV_DISABLED (0) /*!< Bit 0 for device enabled state, disabled */
|
|
#define DEV_ENABLED (1<<0) /*!< Bit 0 for device enabled state, enabled */
|
|
#define DEV_IN_TX (1<<1) /*!< Bit 1 for device in transmit state */
|
|
#define DEV_IN_RX (1<<2) /*!< Bit 2 for device in receive state */
|
|
#define DEV_IN_XFER (1<<3) /*!< Bit 3 for device in transfer state */
|
|
#define DEV_IN_TX_ABRT (1<<4) /*!< Bit 4 for device in transmit abort state */
|
|
#define DEV_IN_RX_ABRT (1<<5) /*!< Bit 5 for device in receive abort state */
|
|
#define DEV_IN_XFER_ABRT (1<<6) /*!< Bit 6 for device in transfer abort state */
|
|
/** @} */
|
|
|
|
/**
|
|
* \defgroup DEVICE_HAL_COMMON_DEFCMD Common Device Defining Command
|
|
* \ingroup DEVICE_HAL_COMMON
|
|
* \brief definitions for defining command code
|
|
* \details here defines macros to define command code,
|
|
* in system code, use \ref DEV_SET_SYSCMD to define command code.
|
|
* in user code, use \ref DEV_SET_USRCMD to define command code.
|
|
* So that there will be no conflicts in system and user defined command code.
|
|
* this used used in
|
|
* \ref DEVICE_HAL_UART, \ref DEVICE_HAL_SPI,
|
|
* \ref DEVICE_HAL_IIC, \ref DEVICE_HAL_GPIO,
|
|
* and in user code
|
|
* @{
|
|
*/
|
|
/*
|
|
* macros for control command base
|
|
*/
|
|
#define DEV_SYS_CMDBSE (0x00000000) /*!< default system device control command base(defined by embARC) */
|
|
#define DEV_USR_CMDBSE (0x80000000) /*!< default user device control command base(defined by user) in user implementing */
|
|
#define DEV_SET_SYSCMD(cmd) (DEV_SYS_CMDBSE|(cmd)) /*!< set device system control command */
|
|
#define DEV_SET_USRCMD(cmd) (DEV_USR_CMDBSE|(cmd)) /*!< set device user control command */
|
|
|
|
#define CONV2VOID(param) ((void *)(param)) /*!< convert param into void * type */
|
|
/** @} */
|
|
|
|
/**
|
|
* Common Device Buffer Structure
|
|
*/
|
|
typedef struct dev_buffer {
|
|
void *buf; /*!< buffer pointer */
|
|
uint32_t len; /*!< buffer length in bytes */
|
|
uint32_t ofs; /*!< current offset in buffer */
|
|
} DEV_BUFFER;
|
|
|
|
/** Init device buffer */
|
|
#define DEV_BUFFER_INIT(devbuf, buffer, size) { \
|
|
(devbuf)->buf = (void *)(buffer); \
|
|
(devbuf)->len = (uint32_t)(size); \
|
|
(devbuf)->ofs = (uint32_t)(0); \
|
|
}
|
|
|
|
/**
|
|
* Device callback function typedef.
|
|
* This is usually used in device callback settings,
|
|
* and \ptr should be the device object pointer,
|
|
* such as DEV_IIC * */
|
|
typedef void (*DEV_CALLBACK) (void *ptr);
|
|
|
|
/** @} */
|
|
#endif /* _DEVICE_HAL_COMMON_H_ */
|