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 #include <mbed.h>
jppang 2:046bfae72c0c 24 #include "SWSPI.h"
jppang 2:046bfae72c0c 25
jppang 2:046bfae72c0c 26 SWSPI::SWSPI(PinName mosi_pin, PinName miso_pin, PinName sclk_pin)
jppang 2:046bfae72c0c 27 {
jppang 2:046bfae72c0c 28 mosi = new DigitalOut(mosi_pin);
jppang 2:046bfae72c0c 29 miso = new DigitalIn(miso_pin);
jppang 2:046bfae72c0c 30 sclk = new DigitalOut(sclk_pin);
jppang 2:046bfae72c0c 31 format(8);
jppang 2:046bfae72c0c 32 frequency();
jppang 2:046bfae72c0c 33 }
jppang 2:046bfae72c0c 34
jppang 2:046bfae72c0c 35 SWSPI::~SWSPI()
jppang 2:046bfae72c0c 36 {
jppang 2:046bfae72c0c 37 delete mosi;
jppang 2:046bfae72c0c 38 delete miso;
jppang 2:046bfae72c0c 39 delete sclk;
jppang 2:046bfae72c0c 40 }
jppang 2:046bfae72c0c 41
jppang 2:046bfae72c0c 42 void SWSPI::format(int bits, int mode)
jppang 2:046bfae72c0c 43 {
jppang 2:046bfae72c0c 44 this->bits = bits;
jppang 2:046bfae72c0c 45 this->mode = mode;
jppang 2:046bfae72c0c 46 polarity = (mode >> 1) & 1;
jppang 2:046bfae72c0c 47 phase = mode & 1;
jppang 2:046bfae72c0c 48 sclk->write(polarity);
jppang 2:046bfae72c0c 49 }
jppang 2:046bfae72c0c 50
jppang 2:046bfae72c0c 51 void SWSPI::frequency(int hz)
jppang 2:046bfae72c0c 52 {
jppang 2:046bfae72c0c 53 this->freq = hz;
jppang 2:046bfae72c0c 54 }
jppang 2:046bfae72c0c 55
jppang 2:046bfae72c0c 56 int SWSPI::write(int value)
jppang 2:046bfae72c0c 57 {
jppang 2:046bfae72c0c 58 int read = 0;
jppang 2:046bfae72c0c 59 for (int bit = bits-1; bit >= 0; --bit)
jppang 2:046bfae72c0c 60 {
jppang 2:046bfae72c0c 61 mosi->write(((value >> bit) & 0x01) != 0);
jppang 2:046bfae72c0c 62
jppang 2:046bfae72c0c 63 if (phase == 0)
jppang 2:046bfae72c0c 64 {
jppang 2:046bfae72c0c 65 if (miso->read())
jppang 2:046bfae72c0c 66 read |= (1 << bit);
jppang 2:046bfae72c0c 67 }
jppang 2:046bfae72c0c 68
jppang 2:046bfae72c0c 69 sclk->write(!polarity);
jppang 2:046bfae72c0c 70
jppang 2:046bfae72c0c 71 wait(1.0/freq/2);
jppang 2:046bfae72c0c 72
jppang 2:046bfae72c0c 73 if (phase == 1)
jppang 2:046bfae72c0c 74 {
jppang 2:046bfae72c0c 75 if (miso->read())
jppang 2:046bfae72c0c 76 read |= (1 << bit);
jppang 2:046bfae72c0c 77 }
jppang 2:046bfae72c0c 78
jppang 2:046bfae72c0c 79 sclk->write(polarity);
jppang 2:046bfae72c0c 80
jppang 2:046bfae72c0c 81 wait(1.0/freq/2);
jppang 2:046bfae72c0c 82 }
jppang 2:046bfae72c0c 83
jppang 2:046bfae72c0c 84 return read;
jppang 2:046bfae72c0c 85 }
jppang 2:046bfae72c0c 86