RTC auf true

Committer:
kevman
Date:
Wed Nov 28 15:10:15 2018 +0000
Revision:
0:38ceb79fef03
RTC modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:38ceb79fef03 1
kevman 0:38ceb79fef03 2 /** \addtogroup hal */
kevman 0:38ceb79fef03 3 /** @{*/
kevman 0:38ceb79fef03 4 /* mbed Microcontroller Library
kevman 0:38ceb79fef03 5 * Copyright (c) 2017 ARM Limited
kevman 0:38ceb79fef03 6 *
kevman 0:38ceb79fef03 7 * Licensed under the Apache License, Version 2.0 (the "License");
kevman 0:38ceb79fef03 8 * you may not use this file except in compliance with the License.
kevman 0:38ceb79fef03 9 * You may obtain a copy of the License at
kevman 0:38ceb79fef03 10 *
kevman 0:38ceb79fef03 11 * http://www.apache.org/licenses/LICENSE-2.0
kevman 0:38ceb79fef03 12 *
kevman 0:38ceb79fef03 13 * Unless required by applicable law or agreed to in writing, software
kevman 0:38ceb79fef03 14 * distributed under the License is distributed on an "AS IS" BASIS,
kevman 0:38ceb79fef03 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kevman 0:38ceb79fef03 16 * See the License for the specific language governing permissions and
kevman 0:38ceb79fef03 17 * limitations under the License.
kevman 0:38ceb79fef03 18 */
kevman 0:38ceb79fef03 19 #ifndef MBED_QSPI_API_H
kevman 0:38ceb79fef03 20 #define MBED_QSPI_API_H
kevman 0:38ceb79fef03 21
kevman 0:38ceb79fef03 22 #include "device.h"
kevman 0:38ceb79fef03 23 #include <stdbool.h>
kevman 0:38ceb79fef03 24
kevman 0:38ceb79fef03 25 #if DEVICE_QSPI
kevman 0:38ceb79fef03 26
kevman 0:38ceb79fef03 27 #ifdef __cplusplus
kevman 0:38ceb79fef03 28 extern "C" {
kevman 0:38ceb79fef03 29 #endif
kevman 0:38ceb79fef03 30
kevman 0:38ceb79fef03 31 /**
kevman 0:38ceb79fef03 32 * \defgroup hal_qspi QSPI HAL
kevman 0:38ceb79fef03 33 * @{
kevman 0:38ceb79fef03 34 */
kevman 0:38ceb79fef03 35
kevman 0:38ceb79fef03 36 /** QSPI HAL object
kevman 0:38ceb79fef03 37 */
kevman 0:38ceb79fef03 38 typedef struct qspi_s qspi_t;
kevman 0:38ceb79fef03 39
kevman 0:38ceb79fef03 40 /** QSPI Bus width
kevman 0:38ceb79fef03 41 *
kevman 0:38ceb79fef03 42 * Some parts of commands provide variable bus width
kevman 0:38ceb79fef03 43 */
kevman 0:38ceb79fef03 44 typedef enum qspi_bus_width {
kevman 0:38ceb79fef03 45 QSPI_CFG_BUS_SINGLE,
kevman 0:38ceb79fef03 46 QSPI_CFG_BUS_DUAL,
kevman 0:38ceb79fef03 47 QSPI_CFG_BUS_QUAD,
kevman 0:38ceb79fef03 48 } qspi_bus_width_t;
kevman 0:38ceb79fef03 49
kevman 0:38ceb79fef03 50 /** Address size in bits
kevman 0:38ceb79fef03 51 */
kevman 0:38ceb79fef03 52 typedef enum qspi_address_size {
kevman 0:38ceb79fef03 53 QSPI_CFG_ADDR_SIZE_8,
kevman 0:38ceb79fef03 54 QSPI_CFG_ADDR_SIZE_16,
kevman 0:38ceb79fef03 55 QSPI_CFG_ADDR_SIZE_24,
kevman 0:38ceb79fef03 56 QSPI_CFG_ADDR_SIZE_32,
kevman 0:38ceb79fef03 57 } qspi_address_size_t;
kevman 0:38ceb79fef03 58
kevman 0:38ceb79fef03 59 /** Alternative size in bits
kevman 0:38ceb79fef03 60 */
kevman 0:38ceb79fef03 61 typedef enum qspi_alt_size {
kevman 0:38ceb79fef03 62 QSPI_CFG_ALT_SIZE_8,
kevman 0:38ceb79fef03 63 QSPI_CFG_ALT_SIZE_16,
kevman 0:38ceb79fef03 64 QSPI_CFG_ALT_SIZE_24,
kevman 0:38ceb79fef03 65 QSPI_CFG_ALT_SIZE_32,
kevman 0:38ceb79fef03 66 } qspi_alt_size_t;
kevman 0:38ceb79fef03 67
kevman 0:38ceb79fef03 68 /** QSPI command
kevman 0:38ceb79fef03 69 *
kevman 0:38ceb79fef03 70 * Defines a frame format. It consists of instruction, address, alternative, dummy count and data
kevman 0:38ceb79fef03 71 */
kevman 0:38ceb79fef03 72 typedef struct qspi_command {
kevman 0:38ceb79fef03 73 struct {
kevman 0:38ceb79fef03 74 qspi_bus_width_t bus_width; /**< Bus width for the instruction >*/
kevman 0:38ceb79fef03 75 uint8_t value; /**< Instruction value >*/
kevman 0:38ceb79fef03 76 bool disabled; /**< Instruction phase skipped if disabled is set to true >*/
kevman 0:38ceb79fef03 77 } instruction;
kevman 0:38ceb79fef03 78 struct {
kevman 0:38ceb79fef03 79 qspi_bus_width_t bus_width; /**< Bus width for the address >*/
kevman 0:38ceb79fef03 80 qspi_address_size_t size; /**< Address size >*/
kevman 0:38ceb79fef03 81 uint32_t value; /**< Address value >*/
kevman 0:38ceb79fef03 82 bool disabled; /**< Address phase skipped if disabled is set to true >*/
kevman 0:38ceb79fef03 83 } address;
kevman 0:38ceb79fef03 84 struct {
kevman 0:38ceb79fef03 85 qspi_bus_width_t bus_width; /**< Bus width for alternative >*/
kevman 0:38ceb79fef03 86 qspi_alt_size_t size; /**< Alternative size >*/
kevman 0:38ceb79fef03 87 uint32_t value; /**< Alternative value >*/
kevman 0:38ceb79fef03 88 bool disabled; /**< Alternative phase skipped if disabled is set to true >*/
kevman 0:38ceb79fef03 89 } alt;
kevman 0:38ceb79fef03 90 uint8_t dummy_count; /**< Dummy cycles count >*/
kevman 0:38ceb79fef03 91 struct {
kevman 0:38ceb79fef03 92 qspi_bus_width_t bus_width; /**< Bus width for data >*/
kevman 0:38ceb79fef03 93 } data;
kevman 0:38ceb79fef03 94 } qspi_command_t;
kevman 0:38ceb79fef03 95
kevman 0:38ceb79fef03 96 /** QSPI return status
kevman 0:38ceb79fef03 97 */
kevman 0:38ceb79fef03 98 typedef enum qspi_status {
kevman 0:38ceb79fef03 99 QSPI_STATUS_ERROR = -1, /**< Generic error >*/
kevman 0:38ceb79fef03 100 QSPI_STATUS_INVALID_PARAMETER = -2, /**< The parameter is invalid >*/
kevman 0:38ceb79fef03 101 QSPI_STATUS_OK = 0, /**< Function executed sucessfully >*/
kevman 0:38ceb79fef03 102 } qspi_status_t;
kevman 0:38ceb79fef03 103
kevman 0:38ceb79fef03 104 /** Initialize QSPI peripheral.
kevman 0:38ceb79fef03 105 *
kevman 0:38ceb79fef03 106 * It should initialize QSPI pins (io0-io3, sclk and ssel), set frequency, clock polarity and phase mode. The clock for the peripheral should be enabled
kevman 0:38ceb79fef03 107 *
kevman 0:38ceb79fef03 108 * @param obj QSPI object
kevman 0:38ceb79fef03 109 * @param io0 Data pin 0
kevman 0:38ceb79fef03 110 * @param io1 Data pin 1
kevman 0:38ceb79fef03 111 * @param io2 Data pin 2
kevman 0:38ceb79fef03 112 * @param io3 Data pin 3
kevman 0:38ceb79fef03 113 * @param sclk The clock pin
kevman 0:38ceb79fef03 114 * @param ssel The chip select pin
kevman 0:38ceb79fef03 115 * @param hz The bus frequency
kevman 0:38ceb79fef03 116 * @param mode Clock polarity and phase mode (0 - 3)
kevman 0:38ceb79fef03 117 * @return QSPI_STATUS_OK if initialisation successfully executed
kevman 0:38ceb79fef03 118 QSPI_STATUS_INVALID_PARAMETER if invalid parameter found
kevman 0:38ceb79fef03 119 QSPI_STATUS_ERROR otherwise
kevman 0:38ceb79fef03 120 */
kevman 0:38ceb79fef03 121 qspi_status_t qspi_init(qspi_t *obj, PinName io0, PinName io1, PinName io2, PinName io3, PinName sclk, PinName ssel, uint32_t hz, uint8_t mode);
kevman 0:38ceb79fef03 122
kevman 0:38ceb79fef03 123 /** Deinitilize QSPI peripheral
kevman 0:38ceb79fef03 124 *
kevman 0:38ceb79fef03 125 * It should release pins that are associated with the QSPI object, and disable clocks for QSPI peripheral module that was associated with the object
kevman 0:38ceb79fef03 126 *
kevman 0:38ceb79fef03 127 * @param obj QSPI object
kevman 0:38ceb79fef03 128 * @return QSPI_STATUS_OK if deinitialisation successfully executed
kevman 0:38ceb79fef03 129 QSPI_STATUS_INVALID_PARAMETER if invalid parameter found
kevman 0:38ceb79fef03 130 QSPI_STATUS_ERROR otherwise
kevman 0:38ceb79fef03 131 */
kevman 0:38ceb79fef03 132 qspi_status_t qspi_free(qspi_t *obj);
kevman 0:38ceb79fef03 133
kevman 0:38ceb79fef03 134 /** Set the QSPI baud rate
kevman 0:38ceb79fef03 135 *
kevman 0:38ceb79fef03 136 * Actual frequency may differ from the desired frequency due to available dividers and the bus clock
kevman 0:38ceb79fef03 137 * Configures the QSPI peripheral's baud rate
kevman 0:38ceb79fef03 138 * @param obj The SPI object to configure
kevman 0:38ceb79fef03 139 * @param hz The baud rate in Hz
kevman 0:38ceb79fef03 140 * @return QSPI_STATUS_OK if frequency was set
kevman 0:38ceb79fef03 141 QSPI_STATUS_INVALID_PARAMETER if invalid parameter found
kevman 0:38ceb79fef03 142 QSPI_STATUS_ERROR otherwise
kevman 0:38ceb79fef03 143 */
kevman 0:38ceb79fef03 144 qspi_status_t qspi_frequency(qspi_t *obj, int hz);
kevman 0:38ceb79fef03 145
kevman 0:38ceb79fef03 146 /** Send a command and block of data
kevman 0:38ceb79fef03 147 *
kevman 0:38ceb79fef03 148 * @param obj QSPI object
kevman 0:38ceb79fef03 149 * @param command QSPI command
kevman 0:38ceb79fef03 150 * @param data TX buffer
kevman 0:38ceb79fef03 151 * @param[in,out] length in - TX buffer length in bytes, out - number of bytes written
kevman 0:38ceb79fef03 152 * @return QSPI_STATUS_OK if the data has been succesfully sent
kevman 0:38ceb79fef03 153 QSPI_STATUS_INVALID_PARAMETER if invalid parameter found
kevman 0:38ceb79fef03 154 QSPI_STATUS_ERROR otherwise
kevman 0:38ceb79fef03 155 */
kevman 0:38ceb79fef03 156 qspi_status_t qspi_write(qspi_t *obj, const qspi_command_t *command, const void *data, size_t *length);
kevman 0:38ceb79fef03 157
kevman 0:38ceb79fef03 158 /** Send a command (and optionally data) and get the response. Can be used to send/receive device specific commands
kevman 0:38ceb79fef03 159 *
kevman 0:38ceb79fef03 160 * @param obj QSPI object
kevman 0:38ceb79fef03 161 * @param command QSPI command
kevman 0:38ceb79fef03 162 * @param tx_data TX buffer
kevman 0:38ceb79fef03 163 * @param tx_size TX buffer length in bytes
kevman 0:38ceb79fef03 164 * @param rx_data RX buffer
kevman 0:38ceb79fef03 165 * @param rx_size RX buffer length in bytes
kevman 0:38ceb79fef03 166 * @return QSPI_STATUS_OK if the data has been succesfully sent
kevman 0:38ceb79fef03 167 QSPI_STATUS_INVALID_PARAMETER if invalid parameter found
kevman 0:38ceb79fef03 168 QSPI_STATUS_ERROR otherwise
kevman 0:38ceb79fef03 169 */
kevman 0:38ceb79fef03 170 qspi_status_t qspi_command_transfer(qspi_t *obj, const qspi_command_t *command, const void *tx_data, size_t tx_size, void *rx_data, size_t rx_size);
kevman 0:38ceb79fef03 171
kevman 0:38ceb79fef03 172 /** Receive a command and block of data
kevman 0:38ceb79fef03 173 *
kevman 0:38ceb79fef03 174 * @param obj QSPI object
kevman 0:38ceb79fef03 175 * @param command QSPI command
kevman 0:38ceb79fef03 176 * @param data RX buffer
kevman 0:38ceb79fef03 177 * @param[in,out] length in - RX buffer length in bytes, out - number of bytes read
kevman 0:38ceb79fef03 178 * @return QSPI_STATUS_OK if data has been succesfully received
kevman 0:38ceb79fef03 179 QSPI_STATUS_INVALID_PARAMETER if invalid parameter found
kevman 0:38ceb79fef03 180 QSPI_STATUS_ERROR otherwise
kevman 0:38ceb79fef03 181 */
kevman 0:38ceb79fef03 182 qspi_status_t qspi_read(qspi_t *obj, const qspi_command_t *command, void *data, size_t *length);
kevman 0:38ceb79fef03 183
kevman 0:38ceb79fef03 184 /**@}*/
kevman 0:38ceb79fef03 185
kevman 0:38ceb79fef03 186 #ifdef __cplusplus
kevman 0:38ceb79fef03 187 }
kevman 0:38ceb79fef03 188 #endif
kevman 0:38ceb79fef03 189
kevman 0:38ceb79fef03 190 #endif
kevman 0:38ceb79fef03 191
kevman 0:38ceb79fef03 192 #endif
kevman 0:38ceb79fef03 193
kevman 0:38ceb79fef03 194 /** @}*/