mbed libraries for KL25Z

Dependents:   FRDM_RGBLED

Committer:
emilmont
Date:
Fri Oct 05 09:16:41 2012 +0000
Revision:
0:8024c367e29f
Child:
2:e9a661555b58
First release of the mbed libraries for KL25Z

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 0:8024c367e29f 1 /* mbed Microcontroller Library - SPISlave
emilmont 0:8024c367e29f 2 * Copyright (c) 2010-2011 ARM Limited. All rights reserved.
emilmont 0:8024c367e29f 3 */
emilmont 0:8024c367e29f 4
emilmont 0:8024c367e29f 5 #ifndef MBED_SPISLAVE_H
emilmont 0:8024c367e29f 6 #define MBED_SPISLAVE_H
emilmont 0:8024c367e29f 7
emilmont 0:8024c367e29f 8 #include "device.h"
emilmont 0:8024c367e29f 9
emilmont 0:8024c367e29f 10 #if DEVICE_SPISLAVE
emilmont 0:8024c367e29f 11
emilmont 0:8024c367e29f 12 #include "platform.h"
emilmont 0:8024c367e29f 13 #include "PinNames.h"
emilmont 0:8024c367e29f 14 #include "PeripheralNames.h"
emilmont 0:8024c367e29f 15 #include "Base.h"
emilmont 0:8024c367e29f 16
emilmont 0:8024c367e29f 17 namespace mbed {
emilmont 0:8024c367e29f 18
emilmont 0:8024c367e29f 19 /* Class: SPISlave
emilmont 0:8024c367e29f 20 * A SPI slave, used for communicating with a SPI Master device
emilmont 0:8024c367e29f 21 *
emilmont 0:8024c367e29f 22 * The default format is set to 8-bits, mode 0, and a clock frequency of 1MHz
emilmont 0:8024c367e29f 23 *
emilmont 0:8024c367e29f 24 * Example:
emilmont 0:8024c367e29f 25 * > // Reply to a SPI master as slave
emilmont 0:8024c367e29f 26 * >
emilmont 0:8024c367e29f 27 * > #include "mbed.h"
emilmont 0:8024c367e29f 28 * >
emilmont 0:8024c367e29f 29 * > SPISlave device(p5, p6, p7, p8); // mosi, miso, sclk, ssel
emilmont 0:8024c367e29f 30 * >
emilmont 0:8024c367e29f 31 * > int main() {
emilmont 0:8024c367e29f 32 * > device.reply(0x00); // Prime SPI with first reply
emilmont 0:8024c367e29f 33 * > while(1) {
emilmont 0:8024c367e29f 34 * > if(device.receive()) {
emilmont 0:8024c367e29f 35 * > int v = device.read(); // Read byte from master
emilmont 0:8024c367e29f 36 * > v = (v + 1) % 0x100; // Add one to it, modulo 256
emilmont 0:8024c367e29f 37 * > device.reply(v); // Make this the next reply
emilmont 0:8024c367e29f 38 * > }
emilmont 0:8024c367e29f 39 * > }
emilmont 0:8024c367e29f 40 * > }
emilmont 0:8024c367e29f 41 */
emilmont 0:8024c367e29f 42 class SPISlave : public Base {
emilmont 0:8024c367e29f 43
emilmont 0:8024c367e29f 44 public:
emilmont 0:8024c367e29f 45
emilmont 0:8024c367e29f 46 /* Constructor: SPI
emilmont 0:8024c367e29f 47 * Create a SPI slave connected to the specified pins
emilmont 0:8024c367e29f 48 *
emilmont 0:8024c367e29f 49 * Variables:
emilmont 0:8024c367e29f 50 * mosi - SPI Master Out, Slave In pin
emilmont 0:8024c367e29f 51 * miso - SPI Master In, Slave Out pin
emilmont 0:8024c367e29f 52 * sclk - SPI Clock pin
emilmont 0:8024c367e29f 53 * ssel - SPI chip select pin
emilmont 0:8024c367e29f 54 * name - (optional) A string to identify the object
emilmont 0:8024c367e29f 55 *
emilmont 0:8024c367e29f 56 * Pin Options:
emilmont 0:8024c367e29f 57 * (5, 6, 7i, 8) or (11, 12, 13, 14)
emilmont 0:8024c367e29f 58 *
emilmont 0:8024c367e29f 59 * mosi or miso can be specfied as NC if not used
emilmont 0:8024c367e29f 60 */
emilmont 0:8024c367e29f 61 SPISlave(PinName mosi, PinName miso, PinName sclk, PinName ssel,
emilmont 0:8024c367e29f 62 const char *name = NULL);
emilmont 0:8024c367e29f 63
emilmont 0:8024c367e29f 64 /* Function: format
emilmont 0:8024c367e29f 65 * Configure the data transmission format
emilmont 0:8024c367e29f 66 *
emilmont 0:8024c367e29f 67 * Variables:
emilmont 0:8024c367e29f 68 * bits - Number of bits per SPI frame (4 - 16)
emilmont 0:8024c367e29f 69 * mode - Clock polarity and phase mode (0 - 3)
emilmont 0:8024c367e29f 70 *
emilmont 0:8024c367e29f 71 * > mode | POL PHA
emilmont 0:8024c367e29f 72 * > -----+--------
emilmont 0:8024c367e29f 73 * > 0 | 0 0
emilmont 0:8024c367e29f 74 * > 1 | 0 1
emilmont 0:8024c367e29f 75 * > 2 | 1 0
emilmont 0:8024c367e29f 76 * > 3 | 1 1
emilmont 0:8024c367e29f 77 */
emilmont 0:8024c367e29f 78 void format(int bits, int mode = 0);
emilmont 0:8024c367e29f 79
emilmont 0:8024c367e29f 80 /* Function: frequency
emilmont 0:8024c367e29f 81 * Set the spi bus clock frequency
emilmont 0:8024c367e29f 82 *
emilmont 0:8024c367e29f 83 * Variables:
emilmont 0:8024c367e29f 84 * hz - SCLK frequency in hz (default = 1MHz)
emilmont 0:8024c367e29f 85 */
emilmont 0:8024c367e29f 86 void frequency(int hz = 1000000);
emilmont 0:8024c367e29f 87
emilmont 0:8024c367e29f 88 /* Function: receive
emilmont 0:8024c367e29f 89 * Polls the SPI to see if data has been received
emilmont 0:8024c367e29f 90 *
emilmont 0:8024c367e29f 91 * Variables:
emilmont 0:8024c367e29f 92 * returns - zero if no data, 1 otherwise
emilmont 0:8024c367e29f 93 */
emilmont 0:8024c367e29f 94 int receive(void);
emilmont 0:8024c367e29f 95
emilmont 0:8024c367e29f 96 /* Function: read
emilmont 0:8024c367e29f 97 * Retrieve data from receive buffer as slave
emilmont 0:8024c367e29f 98 *
emilmont 0:8024c367e29f 99 * Variables:
emilmont 0:8024c367e29f 100 * returns - the data in the receive buffer
emilmont 0:8024c367e29f 101 */
emilmont 0:8024c367e29f 102 int read(void);
emilmont 0:8024c367e29f 103
emilmont 0:8024c367e29f 104 /* Function: reply
emilmont 0:8024c367e29f 105 * Fill the transmission buffer with the value to be written out
emilmont 0:8024c367e29f 106 * as slave on the next received message from the master.
emilmont 0:8024c367e29f 107 *
emilmont 0:8024c367e29f 108 * Variables:
emilmont 0:8024c367e29f 109 * value - the data to be transmitted next
emilmont 0:8024c367e29f 110 */
emilmont 0:8024c367e29f 111 void reply(int value);
emilmont 0:8024c367e29f 112
emilmont 0:8024c367e29f 113 protected:
emilmont 0:8024c367e29f 114
emilmont 0:8024c367e29f 115 SPIName _spi;
emilmont 0:8024c367e29f 116
emilmont 0:8024c367e29f 117 int _bits;
emilmont 0:8024c367e29f 118 int _mode;
emilmont 0:8024c367e29f 119 int _hz;
emilmont 0:8024c367e29f 120
emilmont 0:8024c367e29f 121 };
emilmont 0:8024c367e29f 122
emilmont 0:8024c367e29f 123 } // namespace mbed
emilmont 0:8024c367e29f 124
emilmont 0:8024c367e29f 125 #endif
emilmont 0:8024c367e29f 126
emilmont 0:8024c367e29f 127 #endif