MAV'RIC
|
00001 /******************************************************************************* 00002 * Copyright (c) 2009-2016, MAV'RIC Development Team 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * 00008 * 1. Redistributions of source code must retain the above copyright notice, 00009 * this list of conditions and the following disclaimer. 00010 * 00011 * 2. Redistributions in binary form must reproduce the above copyright notice, 00012 * this list of conditions and the following disclaimer in the documentation 00013 * and/or other materials provided with the distribution. 00014 * 00015 * 3. Neither the name of the copyright holder nor the names of its contributors 00016 * may be used to endorse or promote products derived from this software without 00017 * specific prior written permission. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 00023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00029 * POSSIBILITY OF SUCH DAMAGE. 00030 ******************************************************************************/ 00031 00032 /******************************************************************************* 00033 * \file spi_avr32.hpp 00034 * 00035 * \author MAV'RIC Team 00036 * 00037 * \brief Implementation of spi peripheral for avr32 00038 * 00039 ******************************************************************************/ 00040 00041 #ifndef SPI_AVR32_HPP_ 00042 #define SPI_AVR32_HPP_ 00043 00044 #include "hal/common/spi.hpp" 00045 00046 extern "C" 00047 { 00048 #include "libs/asf/avr32/drivers/spi/spi.h" 00049 } 00050 00054 typedef enum 00055 { 00056 AVR32_SPI_0 = 0, 00057 AVR32_SPI_1 = 1, 00058 AVR32_SPI_2 = 2, 00059 AVR32_SPI_3 = 3, 00060 AVR32_SPI_4 = 4, 00061 AVR32_SPI_MAX_NUMBER = 5, 00062 } spi_avr32_devices_t; 00063 00064 00068 typedef enum 00069 { 00070 AVR32_SPI_OFF = 0, 00071 AVR32_SPI_IN = 1, 00072 AVR32_SPI_OUT = 2, 00073 AVR32_SPI_IN_OUT = 3, 00074 } spi_avr32_mode_t; 00075 00076 00080 typedef struct 00081 { 00082 uint8_t pin; 00083 uint8_t function; 00084 } spi_avr32_gpio_map_t; 00085 00089 typedef struct 00090 { 00091 spi_avr32_devices_t spi_device; 00092 spi_avr32_mode_t mode; 00093 spi_options_t options; 00094 spi_avr32_gpio_map_t mosi_pin_map; 00095 spi_avr32_gpio_map_t miso_pin_map; 00096 spi_avr32_gpio_map_t sck_pin_map; 00097 spi_avr32_gpio_map_t ss_pin_map; 00098 } spi_avr32_conf_t; 00099 00100 00104 class Spi_avr32: public Spi 00105 { 00106 public: 00107 00113 Spi_avr32(spi_avr32_conf_t config); 00114 00115 00122 bool init(void); 00123 00124 00134 bool write(const uint8_t* bytes, const uint32_t size = 1); 00135 00136 00147 bool read(uint16_t command, uint8_t* bytes, const uint32_t size = 1); 00148 00159 bool transfer(uint8_t* out_buffer, uint8_t* in_buffer, uint32_t nbytes); 00160 00161 00162 private: 00163 spi_avr32_conf_t config_; 00164 volatile avr32_spi_t* spi_; 00165 00166 }; 00167 00168 00169 #endif /* SPI_AVR32_HPP_ */