mbed libraries for KL25Z

Dependents:   FRDM_RGBLED

Committer:
emilmont
Date:
Wed Oct 10 14:14:12 2012 +0000
Revision:
2:e9a661555b58
Parent:
0:8024c367e29f
Child:
8:c14af7958ef5
Add PWM and I2C implementation;

Who changed what in which revision?

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