Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mtinterface/mtssp_spi_driver.cpp@0:6fca643f1aff, 2015-11-24 (annotated)
- Committer:
- tjerkhofmeijer
- Date:
- Tue Nov 24 13:35:07 2015 +0100
- Revision:
- 0:6fca643f1aff
Initial publication of embedded firmware updater example
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tjerkhofmeijer | 0:6fca643f1aff | 1 | /*! |
tjerkhofmeijer | 0:6fca643f1aff | 2 | * \file |
tjerkhofmeijer | 0:6fca643f1aff | 3 | * \copyright Copyright (C) Xsens Technologies B.V., 2015. |
tjerkhofmeijer | 0:6fca643f1aff | 4 | * |
tjerkhofmeijer | 0:6fca643f1aff | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
tjerkhofmeijer | 0:6fca643f1aff | 6 | * use this file except in compliance with the License. You may obtain a copy |
tjerkhofmeijer | 0:6fca643f1aff | 7 | * of the License at |
tjerkhofmeijer | 0:6fca643f1aff | 8 | * |
tjerkhofmeijer | 0:6fca643f1aff | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
tjerkhofmeijer | 0:6fca643f1aff | 10 | * |
tjerkhofmeijer | 0:6fca643f1aff | 11 | * Unless required by applicable law or agreed to in writing, software |
tjerkhofmeijer | 0:6fca643f1aff | 12 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
tjerkhofmeijer | 0:6fca643f1aff | 13 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
tjerkhofmeijer | 0:6fca643f1aff | 14 | * License for the specific language governing permissions and limitations |
tjerkhofmeijer | 0:6fca643f1aff | 15 | * under the License. |
tjerkhofmeijer | 0:6fca643f1aff | 16 | */ |
tjerkhofmeijer | 0:6fca643f1aff | 17 | #include "mtssp_spi_driver.h" |
tjerkhofmeijer | 0:6fca643f1aff | 18 | #include <string.h> |
tjerkhofmeijer | 0:6fca643f1aff | 19 | #include "board.h" |
tjerkhofmeijer | 0:6fca643f1aff | 20 | |
tjerkhofmeijer | 0:6fca643f1aff | 21 | |
tjerkhofmeijer | 0:6fca643f1aff | 22 | /*! \class MtsspSpiDriver |
tjerkhofmeijer | 0:6fca643f1aff | 23 | \brief Implementation of MtsspDriver for communicating over SPI. |
tjerkhofmeijer | 0:6fca643f1aff | 24 | |
tjerkhofmeijer | 0:6fca643f1aff | 25 | The low level SPI driver is provided by the mbed platform. |
tjerkhofmeijer | 0:6fca643f1aff | 26 | */ |
tjerkhofmeijer | 0:6fca643f1aff | 27 | |
tjerkhofmeijer | 0:6fca643f1aff | 28 | |
tjerkhofmeijer | 0:6fca643f1aff | 29 | /*! \brief Constructor |
tjerkhofmeijer | 0:6fca643f1aff | 30 | */ |
tjerkhofmeijer | 0:6fca643f1aff | 31 | MtsspSpiDriver::MtsspSpiDriver() |
tjerkhofmeijer | 0:6fca643f1aff | 32 | { |
tjerkhofmeijer | 0:6fca643f1aff | 33 | m_chipSelect = new DigitalOut(MT_nCS, 1); |
tjerkhofmeijer | 0:6fca643f1aff | 34 | *m_chipSelect = 1; |
tjerkhofmeijer | 0:6fca643f1aff | 35 | wait(0.1); |
tjerkhofmeijer | 0:6fca643f1aff | 36 | m_spi = new SPI(MT_MOSI, MT_MISO, MT_SCLK); |
tjerkhofmeijer | 0:6fca643f1aff | 37 | |
tjerkhofmeijer | 0:6fca643f1aff | 38 | m_spi->frequency(1000000); |
tjerkhofmeijer | 0:6fca643f1aff | 39 | m_spi->format(8, 3); |
tjerkhofmeijer | 0:6fca643f1aff | 40 | } |
tjerkhofmeijer | 0:6fca643f1aff | 41 | |
tjerkhofmeijer | 0:6fca643f1aff | 42 | |
tjerkhofmeijer | 0:6fca643f1aff | 43 | /*! \brief Destructor |
tjerkhofmeijer | 0:6fca643f1aff | 44 | */ |
tjerkhofmeijer | 0:6fca643f1aff | 45 | MtsspSpiDriver::~MtsspSpiDriver() |
tjerkhofmeijer | 0:6fca643f1aff | 46 | { |
tjerkhofmeijer | 0:6fca643f1aff | 47 | delete m_chipSelect; |
tjerkhofmeijer | 0:6fca643f1aff | 48 | delete m_spi; |
tjerkhofmeijer | 0:6fca643f1aff | 49 | } |
tjerkhofmeijer | 0:6fca643f1aff | 50 | |
tjerkhofmeijer | 0:6fca643f1aff | 51 | |
tjerkhofmeijer | 0:6fca643f1aff | 52 | /*! \brief Perform a blocking write transfer over SPI |
tjerkhofmeijer | 0:6fca643f1aff | 53 | \param opcode Opcode to use |
tjerkhofmeijer | 0:6fca643f1aff | 54 | \param data Pointer to data to be written |
tjerkhofmeijer | 0:6fca643f1aff | 55 | \param dataLength Number of data bytes to write |
tjerkhofmeijer | 0:6fca643f1aff | 56 | */ |
tjerkhofmeijer | 0:6fca643f1aff | 57 | void MtsspSpiDriver::write(uint8_t opcode, uint8_t const* data, int dataLength) |
tjerkhofmeijer | 0:6fca643f1aff | 58 | { |
tjerkhofmeijer | 0:6fca643f1aff | 59 | *m_chipSelect = 0; |
tjerkhofmeijer | 0:6fca643f1aff | 60 | m_spi->write(opcode); |
tjerkhofmeijer | 0:6fca643f1aff | 61 | m_spi->write(0); |
tjerkhofmeijer | 0:6fca643f1aff | 62 | m_spi->write(0); |
tjerkhofmeijer | 0:6fca643f1aff | 63 | m_spi->write(0); |
tjerkhofmeijer | 0:6fca643f1aff | 64 | |
tjerkhofmeijer | 0:6fca643f1aff | 65 | for (int i = 0; i < dataLength; i++) |
tjerkhofmeijer | 0:6fca643f1aff | 66 | { |
tjerkhofmeijer | 0:6fca643f1aff | 67 | m_spi->write(data[i]); |
tjerkhofmeijer | 0:6fca643f1aff | 68 | } |
tjerkhofmeijer | 0:6fca643f1aff | 69 | |
tjerkhofmeijer | 0:6fca643f1aff | 70 | *m_chipSelect = 1; |
tjerkhofmeijer | 0:6fca643f1aff | 71 | } |
tjerkhofmeijer | 0:6fca643f1aff | 72 | |
tjerkhofmeijer | 0:6fca643f1aff | 73 | |
tjerkhofmeijer | 0:6fca643f1aff | 74 | /*! \brief Perform a blocking read transfer over SPI |
tjerkhofmeijer | 0:6fca643f1aff | 75 | \param opcode Opcode to use |
tjerkhofmeijer | 0:6fca643f1aff | 76 | \param data Pointer to result buffer |
tjerkhofmeijer | 0:6fca643f1aff | 77 | \param dataLength Number of data bytes to read |
tjerkhofmeijer | 0:6fca643f1aff | 78 | */ |
tjerkhofmeijer | 0:6fca643f1aff | 79 | void MtsspSpiDriver::read(uint8_t opcode, uint8_t* data, int dataLength) |
tjerkhofmeijer | 0:6fca643f1aff | 80 | { |
tjerkhofmeijer | 0:6fca643f1aff | 81 | *m_chipSelect = 0; |
tjerkhofmeijer | 0:6fca643f1aff | 82 | |
tjerkhofmeijer | 0:6fca643f1aff | 83 | m_spi->write(opcode); |
tjerkhofmeijer | 0:6fca643f1aff | 84 | m_spi->write(0); |
tjerkhofmeijer | 0:6fca643f1aff | 85 | m_spi->write(0); |
tjerkhofmeijer | 0:6fca643f1aff | 86 | m_spi->write(0); |
tjerkhofmeijer | 0:6fca643f1aff | 87 | |
tjerkhofmeijer | 0:6fca643f1aff | 88 | for (int i = 0; i < dataLength; i++) |
tjerkhofmeijer | 0:6fca643f1aff | 89 | { |
tjerkhofmeijer | 0:6fca643f1aff | 90 | data[i] = m_spi->write(0); |
tjerkhofmeijer | 0:6fca643f1aff | 91 | } |
tjerkhofmeijer | 0:6fca643f1aff | 92 | *m_chipSelect = 1; |
tjerkhofmeijer | 0:6fca643f1aff | 93 | } |
tjerkhofmeijer | 0:6fca643f1aff | 94 | |
tjerkhofmeijer | 0:6fca643f1aff | 95 | |
tjerkhofmeijer | 0:6fca643f1aff | 96 | /*! \brief Perform a blocking write transfer over SPI |
tjerkhofmeijer | 0:6fca643f1aff | 97 | \param data Pointer to data to be written |
tjerkhofmeijer | 0:6fca643f1aff | 98 | \param dataLength Number of data bytes to write |
tjerkhofmeijer | 0:6fca643f1aff | 99 | */ |
tjerkhofmeijer | 0:6fca643f1aff | 100 | void MtsspSpiDriver::writeRaw(uint8_t const* data, int dataLength) |
tjerkhofmeijer | 0:6fca643f1aff | 101 | { |
tjerkhofmeijer | 0:6fca643f1aff | 102 | *m_chipSelect = 0; |
tjerkhofmeijer | 0:6fca643f1aff | 103 | for (int i = 0; i < dataLength; i++) |
tjerkhofmeijer | 0:6fca643f1aff | 104 | { |
tjerkhofmeijer | 0:6fca643f1aff | 105 | m_spi->write(data[i]); |
tjerkhofmeijer | 0:6fca643f1aff | 106 | } |
tjerkhofmeijer | 0:6fca643f1aff | 107 | *m_chipSelect = 1; |
tjerkhofmeijer | 0:6fca643f1aff | 108 | } |