ChibiOS/RT Architecture - Reference Manual - Guides |
00001 /* 00002 ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. 00003 00004 This file is part of ChibiOS/RT. 00005 00006 ChibiOS/RT is free software; you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 3 of the License, or 00009 (at your option) any later version. 00010 00011 ChibiOS/RT is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program. If not, see <http://www.gnu.org/licenses/>. 00018 00019 --- 00020 00021 A special exception to the GPL can be applied should you wish to distribute 00022 a combined work that includes ChibiOS/RT, without being obliged to provide 00023 the source code for any proprietary components. See the file exception.txt 00024 for full details of how and when the exception can be applied. 00025 */ 00026 00027 /** 00028 * @file spi.h 00029 * @brief SPI Driver macros and structures. 00030 * 00031 * @addtogroup SPI 00032 * @{ 00033 */ 00034 00035 #ifndef _SPI_H_ 00036 #define _SPI_H_ 00037 00038 #if CH_HAL_USE_SPI || defined(__DOXYGEN__) 00039 00040 /*===========================================================================*/ 00041 /* Driver constants. */ 00042 /*===========================================================================*/ 00043 00044 /*===========================================================================*/ 00045 /* Driver pre-compile time settings. */ 00046 /*===========================================================================*/ 00047 00048 /** 00049 * @brief Enables the mutual exclusion APIs on the SPI bus. 00050 */ 00051 #if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) 00052 #define SPI_USE_MUTUAL_EXCLUSION TRUE 00053 #endif 00054 00055 /*===========================================================================*/ 00056 /* Derived constants and error checks. */ 00057 /*===========================================================================*/ 00058 00059 #if SPI_USE_MUTUAL_EXCLUSION && !CH_USE_MUTEXES && !CH_USE_SEMAPHORES 00060 #error "SPI_USE_MUTUAL_EXCLUSION requires CH_USE_MUTEXES and/or CH_USE_SEMAPHORES" 00061 #endif 00062 00063 /*===========================================================================*/ 00064 /* Driver data structures and types. */ 00065 /*===========================================================================*/ 00066 00067 /** 00068 * @brief Driver state machine possible states. 00069 */ 00070 typedef enum { 00071 SPI_UNINIT = 0, /**< @brief Not initialized. */ 00072 SPI_STOP = 1, /**< @brief Stopped. */ 00073 SPI_READY = 2, /**< @brief Ready. */ 00074 SPI_ACTIVE = 3 /**< @brief Slave selected. */ 00075 } spistate_t; 00076 00077 #include "spi_lld.h" 00078 00079 /*===========================================================================*/ 00080 /* Driver macros. */ 00081 /*===========================================================================*/ 00082 00083 /*===========================================================================*/ 00084 /* External declarations. */ 00085 /*===========================================================================*/ 00086 00087 #ifdef __cplusplus 00088 extern "C" { 00089 #endif 00090 void spiInit(void); 00091 void spiObjectInit(SPIDriver *spip); 00092 void spiStart(SPIDriver *spip, const SPIConfig *config); 00093 void spiStop(SPIDriver *spip); 00094 void spiSelect(SPIDriver *spip); 00095 void spiUnselect(SPIDriver *spip); 00096 void spiIgnore(SPIDriver *spip, size_t n); 00097 void spiExchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf); 00098 void spiSend(SPIDriver *spip, size_t n, const void *txbuf); 00099 void spiReceive(SPIDriver *spip, size_t n, void *rxbuf); 00100 #if SPI_USE_MUTUAL_EXCLUSION 00101 void spiAcquireBus(SPIDriver *spip); 00102 void spiReleaseBus(SPIDriver *spip); 00103 #endif /* SPI_USE_MUTUAL_EXCLUSION */ 00104 #ifdef __cplusplus 00105 } 00106 #endif 00107 00108 #endif /* CH_HAL_USE_SPI */ 00109 00110 #endif /* _SPI_H_ */ 00111 00112 /** @} */