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.
QuadSpiInterface.cpp
00001 /******************************************************************************* 00002 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a 00005 * copy of this software and associated documentation files (the "Software"), 00006 * to deal in the Software without restriction, including without limitation 00007 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00008 * and/or sell copies of the Software, and to permit persons to whom the 00009 * Software is furnished to do so, subject to the following conditions: 00010 * 00011 * The above copyright notice and this permission notice shall be included 00012 * in all copies or substantial portions of the Software. 00013 * 00014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00015 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00016 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00017 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES 00018 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 00019 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00020 * OTHER DEALINGS IN THE SOFTWARE. 00021 * 00022 * Except as contained in this notice, the name of Maxim Integrated 00023 * Products, Inc. shall not be used except as stated in the Maxim Integrated 00024 * Products, Inc. Branding Policy. 00025 * 00026 * The mere transfer of this software does not imply any licenses 00027 * of trade secrets, proprietary technology, copyrights, patents, 00028 * trademarks, maskwork rights, or any other form of intellectual 00029 * property whatsoever. Maxim Integrated Products, Inc. retains all 00030 * ownership rights. 00031 ******************************************************************************* 00032 */ 00033 #include "QuadSpiInterface.h" 00034 00035 /** 00036 * @brief Constructor that accepts pin names for the QUAD SPI interface 00037 * @param mosi master out slave in pin name 00038 * @param miso master in slave out pin name 00039 * @param sclk serial clock pin name 00040 * @param cs chip select pin name 00041 */ 00042 QuadSpiInterface::QuadSpiInterface(PinName mosi, PinName miso, PinName sclk, 00043 PinName cs) 00044 : spi(mosi, miso, sclk), csPin(cs) { 00045 00046 } 00047 00048 /** 00049 * @brief Transmit and recieve QUAD SPI data 00050 * @param tx_buf pointer to transmit byte buffer 00051 * @param tx_size number of bytes to transmit 00052 * @param rx_buf pointer to the recieve buffer 00053 * @param rx_size number of bytes to recieve 00054 * @param last flag to indicate if this is the last QUAD SPI transaction for the 00055 * current chip select cycle 00056 */ 00057 int QuadSpiInterface::SPI_Transmit(const uint8_t *tx_buf, uint32_t tx_size, 00058 uint8_t *rx_buf, uint32_t rx_size, 00059 int last) { 00060 uint32_t i; 00061 int result = 0; 00062 int index = 0; 00063 // lower chip select 00064 csPin = 0; 00065 // write bytes out QUAD SPI 00066 spi.setQuadMode(); 00067 for (i = 0; i < tx_size; i++) { 00068 rx_buf[index] = spi.write((int)tx_buf[i]); 00069 index++; 00070 } 00071 // read in bytes from QUAD SPI 00072 for (i = 0; i < rx_size; i++) { 00073 rx_buf[index] = (uint8_t)spi.read(); 00074 index++; 00075 } 00076 // raise chip select if this is the last transaction 00077 if (last) csPin = 1; 00078 return result; 00079 } 00080 00081 /** 00082 * @brief Transmit and recieve QUAD SPI data 00083 * @param tx_buf pointer to transmit byte buffer 00084 * @param tx_size number of bytes to transmit 00085 * @param rx_buf pointer to the recieve buffer 00086 * @param rx_size number of bytes to recieve 00087 * @param last flag to indicate if this is the last QUAD SPI transaction for the 00088 * current chip select cycle 00089 */ 00090 int QuadSpiInterface::SPI_Transmit4Wire(const uint8_t *tx_buf, uint32_t tx_size, 00091 uint8_t *rx_buf, uint32_t rx_size, 00092 int last) { 00093 uint32_t i; 00094 int result = 0; 00095 int index = 0; 00096 // lower chip select 00097 csPin = 0; 00098 // write bytes out Single SPI 00099 spi.setSingleMode(); 00100 for (i = 0; i < tx_size; i++) { 00101 rx_buf[index] = spi.write((int)tx_buf[i]); 00102 index++; 00103 } 00104 // raise chip select if this is the last transaction 00105 if (last) csPin = 1; 00106 return result; 00107 } 00108
Generated on Wed Jul 13 2022 08:45:46 by
1.7.2