Rewrite the NokiaLCD lib with SWSPI lib in order to fit in with 9 bits SPI mode

Dependents:   KL46Z_NokiaLCD

Committer:
jppang
Date:
Fri Feb 21 00:04:26 2014 +0000
Revision:
2:046bfae72c0c
combine SWSPI lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jppang 2:046bfae72c0c 1 /* SWSPI, Software SPI library
jppang 2:046bfae72c0c 2 * Copyright (c) 2012-2014, David R. Van Wagner, http://techwithdave.blogspot.com
jppang 2:046bfae72c0c 3 *
jppang 2:046bfae72c0c 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
jppang 2:046bfae72c0c 5 * of this software and associated documentation files (the "Software"), to deal
jppang 2:046bfae72c0c 6 * in the Software without restriction, including without limitation the rights
jppang 2:046bfae72c0c 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
jppang 2:046bfae72c0c 8 * copies of the Software, and to permit persons to whom the Software is
jppang 2:046bfae72c0c 9 * furnished to do so, subject to the following conditions:
jppang 2:046bfae72c0c 10 *
jppang 2:046bfae72c0c 11 * The above copyright notice and this permission notice shall be included in
jppang 2:046bfae72c0c 12 * all copies or substantial portions of the Software.
jppang 2:046bfae72c0c 13 *
jppang 2:046bfae72c0c 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
jppang 2:046bfae72c0c 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
jppang 2:046bfae72c0c 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
jppang 2:046bfae72c0c 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
jppang 2:046bfae72c0c 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
jppang 2:046bfae72c0c 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
jppang 2:046bfae72c0c 20 * THE SOFTWARE.
jppang 2:046bfae72c0c 21 */
jppang 2:046bfae72c0c 22
jppang 2:046bfae72c0c 23 #ifndef SWSPI_H
jppang 2:046bfae72c0c 24 #define SWSPI_H
jppang 2:046bfae72c0c 25
jppang 2:046bfae72c0c 26 /** A software implemented SPI that can use any digital pins
jppang 2:046bfae72c0c 27 *
jppang 2:046bfae72c0c 28 * Useful when don't want to share a single SPI hardware among attached devices
jppang 2:046bfae72c0c 29 * or when pinout doesn't match exactly to the target's SPI pins
jppang 2:046bfae72c0c 30 *
jppang 2:046bfae72c0c 31 * @code
jppang 2:046bfae72c0c 32 * #include "mbed.h"
jppang 2:046bfae72c0c 33 * #include "SWSPI.h"
jppang 2:046bfae72c0c 34 *
jppang 2:046bfae72c0c 35 * SWSPI spi(p5, p6, p7); // mosi, miso, sclk
jppang 2:046bfae72c0c 36 *
jppang 2:046bfae72c0c 37 * int main()
jppang 2:046bfae72c0c 38 * {
jppang 2:046bfae72c0c 39 * DigitalOut cs(p8);
jppang 2:046bfae72c0c 40 * spi.format(8, 0);
jppang 2:046bfae72c0c 41 * spi.frequency(10000000);
jppang 2:046bfae72c0c 42 * cs.write(0);
jppang 2:046bfae72c0c 43 * spi.write(0x9f);
jppang 2:046bfae72c0c 44 * int jedecid = (spi.write(0) << 16) | (spi.write(0) << 8) | spi.write(0);
jppang 2:046bfae72c0c 45 * cs.write(1);
jppang 2:046bfae72c0c 46 * }
jppang 2:046bfae72c0c 47 * @endcode
jppang 2:046bfae72c0c 48 */
jppang 2:046bfae72c0c 49 class SWSPI
jppang 2:046bfae72c0c 50 {
jppang 2:046bfae72c0c 51 private:
jppang 2:046bfae72c0c 52 DigitalOut* mosi;
jppang 2:046bfae72c0c 53 DigitalIn* miso;
jppang 2:046bfae72c0c 54 DigitalOut* sclk;
jppang 2:046bfae72c0c 55 int port;
jppang 2:046bfae72c0c 56 int bits;
jppang 2:046bfae72c0c 57 int mode;
jppang 2:046bfae72c0c 58 int polarity; // idle clock value
jppang 2:046bfae72c0c 59 int phase; // 0=sample on leading (first) clock edge, 1=trailing (second)
jppang 2:046bfae72c0c 60 int freq;
jppang 2:046bfae72c0c 61
jppang 2:046bfae72c0c 62 public:
jppang 2:046bfae72c0c 63 /** Create SWSPI object
jppang 2:046bfae72c0c 64 *
jppang 2:046bfae72c0c 65 * @param mosi_pin
jppang 2:046bfae72c0c 66 * @param miso_pin
jppang 2:046bfae72c0c 67 * @param sclk_pin
jppang 2:046bfae72c0c 68 */
jppang 2:046bfae72c0c 69 SWSPI(PinName mosi_pin, PinName miso_pin, PinName sclk_pin);
jppang 2:046bfae72c0c 70
jppang 2:046bfae72c0c 71 /** Destructor */
jppang 2:046bfae72c0c 72 ~SWSPI();
jppang 2:046bfae72c0c 73
jppang 2:046bfae72c0c 74 /** Specify SPI format
jppang 2:046bfae72c0c 75 *
jppang 2:046bfae72c0c 76 * @param bits 8 or 16 are typical values
jppang 2:046bfae72c0c 77 * @param mode 0, 1, 2, or 3 phase (bit1) and idle clock (bit0)
jppang 2:046bfae72c0c 78 */
jppang 2:046bfae72c0c 79 void format(int bits, int mode = 0);
jppang 2:046bfae72c0c 80
jppang 2:046bfae72c0c 81 /** Specify SPI clock frequency
jppang 2:046bfae72c0c 82 *
jppang 2:046bfae72c0c 83 * @param hz frequency (optional, defaults to 10000000)
jppang 2:046bfae72c0c 84 */
jppang 2:046bfae72c0c 85 void frequency(int hz = 10000000);
jppang 2:046bfae72c0c 86
jppang 2:046bfae72c0c 87 /** Write data and read result
jppang 2:046bfae72c0c 88 *
jppang 2:046bfae72c0c 89 * @param value data to write (see format for bit size)
jppang 2:046bfae72c0c 90 * returns value read from device
jppang 2:046bfae72c0c 91 */
jppang 2:046bfae72c0c 92 int write(int value);
jppang 2:046bfae72c0c 93 };
jppang 2:046bfae72c0c 94
jppang 2:046bfae72c0c 95 #endif // SWSPI_H