Contiki-Inga 3.x
mspi-mgr.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012, TU Braunschweig.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the Institute nor the names of its contributors
14  * may be used to endorse or promote products derived from this software
15  * without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 /**
31  * \file
32  * Master SPI Bus Manager definitions
33  * \author
34  * Ulf Kulau <kulau@ibr.cs.tu-bs.de>
35  */
36 
37 /**
38  * \addtogroup inga_bus_driver
39  * @{
40  */
41 
42 /**
43  * \defgroup spi_bus_manager Master SPI Bus Manager
44  *
45  * <p>The various SPI devices are all connected to the SPI Bus (SCK, MOSI/SDA,
46  * MISO/SDI) and only separated by the Chip Select. With a high probability,
47  * not every SPI Device will use the same SPI Bus configuration (SPI Mode), so
48  * you would have to change (or to check) the SPI mode whenever accessing another
49  * SPI device. But in higher software layers you are not interested in such
50  * details like SPI Mode. Therefore the SPI Bus Manager was implemented, to separate
51  * the low level hardware and register level from higher software layers.
52  * The SPI Bus Manager holds all devices, which are connected to the SPI Bus. With
53  * a checksum he can decide, if the SPI configuration has to change. So in some cases
54  * these reconfiguration can be avoid.</p>
55  * \note If you know what you are doing, it is possible to disable the SPI Bus Manager
56  * by setting MSPI_BUS_MANAGER in the mspi-drv.h to 0.
57  * @{
58  */
59 
60 #ifndef MSPIMGR_H_
61 #define MSPIMGR_H_
62 #include <avr/io.h>
63 
64 /*!
65  * Defines the maximum number of SPI devices
66  * \note In our case we have 7 (2³-1) possible SPI devices, because
67  * we are using 3 I/O pins and a BCD-to-decimal encoder for the
68  * chip select.
69  */
70 #define MAX_SPI_DEVICES 7
71 
72 typedef struct {
73  uint8_t dev_mode;
74  uint16_t dev_baud;
75  uint8_t checksum;
76 }spi_dev;
77 
78 /**
79  * \brief This function add a device to the SPI device table
80  * and calculates the specific checksum
81  *
82  * \param cs Chip Select: Device ID
83  * \param mode Select the (M)SPI mode (MSPI_MODE_0 ...
84  * MSPI_MODE_3)
85  * \param baud The MSPI BAUD rate. Sometimes it is necessary
86  * to reduce the SCK. Use MSPI_BAUD_MAX in common case.
87  *
88  */
89 void mspi_mgr_add(uint8_t cs, uint8_t mode, uint16_t baud);
90 
91 /**
92  * \brief This function changes the SPI configuration
93  *
94  * \param spi_dev The specified entry of the SPI Device Table
95  *
96  */
97 void mspi_mgr_change_mode(spi_dev new_config);
98 
99 
100 
101 
102 
103 #endif /* SPIMGR_H_ */