mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
188:bcfe06ba3d64
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 188:bcfe06ba3d64 1 /*
AnnaBridge 188:bcfe06ba3d64 2 * mbed Microcontroller Library
AnnaBridge 188:bcfe06ba3d64 3 * Copyright (c) 2017-2018 Future Electronics
AnnaBridge 189:f392fc9709a3 4 * Copyright (c) 2018-2019 Cypress Semiconductor Corporation
AnnaBridge 189:f392fc9709a3 5 * SPDX-License-Identifier: Apache-2.0
AnnaBridge 188:bcfe06ba3d64 6 *
AnnaBridge 188:bcfe06ba3d64 7 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 188:bcfe06ba3d64 8 * you may not use this file except in compliance with the License.
AnnaBridge 188:bcfe06ba3d64 9 * You may obtain a copy of the License at
AnnaBridge 188:bcfe06ba3d64 10 *
AnnaBridge 188:bcfe06ba3d64 11 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 188:bcfe06ba3d64 12 *
AnnaBridge 188:bcfe06ba3d64 13 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 188:bcfe06ba3d64 14 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 188:bcfe06ba3d64 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 188:bcfe06ba3d64 16 * See the License for the specific language governing permissions and
AnnaBridge 188:bcfe06ba3d64 17 * limitations under the License.
AnnaBridge 188:bcfe06ba3d64 18 */
AnnaBridge 188:bcfe06ba3d64 19
AnnaBridge 188:bcfe06ba3d64 20 #ifndef _PSOC6_UTILS_H_
AnnaBridge 188:bcfe06ba3d64 21 #define _PSOC6_UTILS_H_
AnnaBridge 188:bcfe06ba3d64 22
AnnaBridge 188:bcfe06ba3d64 23 #if defined(__MBED__)
AnnaBridge 188:bcfe06ba3d64 24
AnnaBridge 188:bcfe06ba3d64 25 #include <stdint.h>
AnnaBridge 188:bcfe06ba3d64 26 #include <device.h>
AnnaBridge 189:f392fc9709a3 27 #include "cy_gpio.h"
AnnaBridge 189:f392fc9709a3 28 #include "cy_sysclk.h"
AnnaBridge 188:bcfe06ba3d64 29
AnnaBridge 188:bcfe06ba3d64 30 #else
AnnaBridge 188:bcfe06ba3d64 31
AnnaBridge 188:bcfe06ba3d64 32 #include "project.h"
AnnaBridge 188:bcfe06ba3d64 33
AnnaBridge 188:bcfe06ba3d64 34 #endif
AnnaBridge 188:bcfe06ba3d64 35
AnnaBridge 188:bcfe06ba3d64 36 #include "PinNamesTypes.h"
AnnaBridge 188:bcfe06ba3d64 37 #include "PinNames.h"
AnnaBridge 188:bcfe06ba3d64 38
AnnaBridge 188:bcfe06ba3d64 39 #if defined(__cplusplus)
AnnaBridge 188:bcfe06ba3d64 40 extern "C" {
AnnaBridge 188:bcfe06ba3d64 41 #endif /* __cplusplus */
AnnaBridge 188:bcfe06ba3d64 42
AnnaBridge 188:bcfe06ba3d64 43 #define CY_INVALID_DIVIDER 0xFF
AnnaBridge 188:bcfe06ba3d64 44
AnnaBridge 188:bcfe06ba3d64 45 /** \brief Allocates clock divider to be used for a new clock signal.
AnnaBridge 188:bcfe06ba3d64 46 *
AnnaBridge 188:bcfe06ba3d64 47 * \param div_type cy_en_divider_types_t Divider type.
AnnaBridge 188:bcfe06ba3d64 48 * \return uint32_t Divider number (id) or CY_CLK_INVALID_DIVIDER if unavailable.
AnnaBridge 188:bcfe06ba3d64 49 *
AnnaBridge 188:bcfe06ba3d64 50 */
AnnaBridge 188:bcfe06ba3d64 51 uint32_t cy_clk_allocate_divider(cy_en_divider_types_t div_type);
AnnaBridge 188:bcfe06ba3d64 52
AnnaBridge 188:bcfe06ba3d64 53 /** \brief Reserves clock divider to be used for a new clock signal.
AnnaBridge 188:bcfe06ba3d64 54 *
AnnaBridge 188:bcfe06ba3d64 55 * \param div_type cy_en_divider_types_t Divider type.
AnnaBridge 188:bcfe06ba3d64 56 * \param div_num Divider number to be reserved.
AnnaBridge 188:bcfe06ba3d64 57 * \return uint32_t Divider number (id) or CY_CLK_INVALID_DIVIDER if unavailable.
AnnaBridge 188:bcfe06ba3d64 58 *
AnnaBridge 188:bcfe06ba3d64 59 */
AnnaBridge 188:bcfe06ba3d64 60 uint32_t cy_clk_reserve_divider(cy_en_divider_types_t div_type, uint32_t div_num);
AnnaBridge 188:bcfe06ba3d64 61
AnnaBridge 188:bcfe06ba3d64 62 /** \brief Releases already reserved clock divider.
AnnaBridge 188:bcfe06ba3d64 63 *
AnnaBridge 188:bcfe06ba3d64 64 * \param div_type cy_en_divider_types_t Divider type.
AnnaBridge 188:bcfe06ba3d64 65 * \param div_num Divider number to be released.
AnnaBridge 188:bcfe06ba3d64 66 *
AnnaBridge 188:bcfe06ba3d64 67 */
AnnaBridge 188:bcfe06ba3d64 68 void cy_clk_free_divider(cy_en_divider_types_t div_type, uint32_t div_num);
AnnaBridge 188:bcfe06ba3d64 69
AnnaBridge 188:bcfe06ba3d64 70 #ifdef TARGET_MCU_PSOC6_M0
AnnaBridge 188:bcfe06ba3d64 71
AnnaBridge 188:bcfe06ba3d64 72 #include "gpio_irq_api.h"
AnnaBridge 188:bcfe06ba3d64 73
AnnaBridge 188:bcfe06ba3d64 74 /** \brief On PSoC6 M0 core interrupts are routed into NVIC via additional multiplexer.
AnnaBridge 188:bcfe06ba3d64 75 * This function allocates free NVIC channel to be used by particular interrupt.
AnnaBridge 188:bcfe06ba3d64 76 *
AnnaBridge 188:bcfe06ba3d64 77 * \param allocation_id Unique identifier (for debug purposes).
AnnaBridge 188:bcfe06ba3d64 78 * \return IRQ channel allocated or (-1) if no free channel is available.
AnnaBridge 188:bcfe06ba3d64 79 *
AnnaBridge 188:bcfe06ba3d64 80 */
AnnaBridge 188:bcfe06ba3d64 81 IRQn_Type cy_m0_nvic_allocate_channel(uint32_t allocation_id);
AnnaBridge 188:bcfe06ba3d64 82
AnnaBridge 188:bcfe06ba3d64 83 /** \brief Reserves particular NVIC channel if it is available.
AnnaBridge 188:bcfe06ba3d64 84 *
AnnaBridge 188:bcfe06ba3d64 85 * \param channel IRQn_Type Channel to be reserved.
AnnaBridge 188:bcfe06ba3d64 86 * \param allocation_id uint32_t Identifier.
AnnaBridge 188:bcfe06ba3d64 87 * \return IRQ channel allocated or (-1) if no free channel is available.
AnnaBridge 188:bcfe06ba3d64 88 *
AnnaBridge 188:bcfe06ba3d64 89 */
AnnaBridge 188:bcfe06ba3d64 90 IRQn_Type cy_m0_nvic_reserve_channel(IRQn_Type channel, uint32_t allocation_id);
AnnaBridge 188:bcfe06ba3d64 91
AnnaBridge 188:bcfe06ba3d64 92 /** \brief Releases NVIC channel.
AnnaBridge 188:bcfe06ba3d64 93 *
AnnaBridge 188:bcfe06ba3d64 94 * \param channel IRQn_Type Channel to be released.
AnnaBridge 188:bcfe06ba3d64 95 * \param allocation_id uint32_t Id used during allocation (for cross check).
AnnaBridge 188:bcfe06ba3d64 96 * \return void
AnnaBridge 188:bcfe06ba3d64 97 *
AnnaBridge 188:bcfe06ba3d64 98 */
AnnaBridge 188:bcfe06ba3d64 99 void cy_m0_nvic_release_channel(IRQn_Type channel, uint32_t allocation_id);
AnnaBridge 188:bcfe06ba3d64 100
AnnaBridge 188:bcfe06ba3d64 101 #endif /* M0+ core */
AnnaBridge 188:bcfe06ba3d64 102
AnnaBridge 188:bcfe06ba3d64 103
AnnaBridge 188:bcfe06ba3d64 104 /** \brief Request allocation of SCB block.
AnnaBridge 188:bcfe06ba3d64 105 *
AnnaBridge 188:bcfe06ba3d64 106 * \param scb_num uint32_t Id of the SCB block.
AnnaBridge 188:bcfe06ba3d64 107 * \return (0) when OK, (-1) when reservation conflict occurs.
AnnaBridge 188:bcfe06ba3d64 108 *
AnnaBridge 188:bcfe06ba3d64 109 */
AnnaBridge 188:bcfe06ba3d64 110 int cy_reserve_scb(uint32_t scb_num);
AnnaBridge 188:bcfe06ba3d64 111
AnnaBridge 188:bcfe06ba3d64 112 /** \brief Releases SCB block.
AnnaBridge 188:bcfe06ba3d64 113 *
AnnaBridge 188:bcfe06ba3d64 114 * \param scb_num uint32_t Id of the SCB block.
AnnaBridge 188:bcfe06ba3d64 115 * \return void
AnnaBridge 188:bcfe06ba3d64 116 *
AnnaBridge 188:bcfe06ba3d64 117 */
AnnaBridge 188:bcfe06ba3d64 118 void cy_free_scb(uint32_t scb_num);
AnnaBridge 188:bcfe06ba3d64 119
AnnaBridge 188:bcfe06ba3d64 120 /** \brief Request allocation of TCPWM block.
AnnaBridge 188:bcfe06ba3d64 121 *
AnnaBridge 188:bcfe06ba3d64 122 * \param tcpwm_num uint32_t Id of the TCPWM block.
AnnaBridge 188:bcfe06ba3d64 123 * \return (0) when OK, (-1) when reservation conflict occurs.
AnnaBridge 188:bcfe06ba3d64 124 *
AnnaBridge 188:bcfe06ba3d64 125 */
AnnaBridge 188:bcfe06ba3d64 126 int cy_reserve_tcpwm(uint32_t tcpwm_num);
AnnaBridge 188:bcfe06ba3d64 127
AnnaBridge 188:bcfe06ba3d64 128 /** \brief Releases TCPWM block.
AnnaBridge 188:bcfe06ba3d64 129 *
AnnaBridge 188:bcfe06ba3d64 130 * \param tcpwm_num uint32_t Id of the TCPWM block.
AnnaBridge 188:bcfe06ba3d64 131 * \return void
AnnaBridge 188:bcfe06ba3d64 132 *
AnnaBridge 188:bcfe06ba3d64 133 */
AnnaBridge 188:bcfe06ba3d64 134 void cy_free_tcpwm(uint32_t tcpwm_num);
AnnaBridge 188:bcfe06ba3d64 135
AnnaBridge 188:bcfe06ba3d64 136 /** \brief Request allocation of i/o pin.
AnnaBridge 188:bcfe06ba3d64 137 *
AnnaBridge 188:bcfe06ba3d64 138 * \param pin PinName Id of the pin to allocate.
AnnaBridge 188:bcfe06ba3d64 139 * \return (0) when OK, (-1) when reservation conflict occurs.
AnnaBridge 188:bcfe06ba3d64 140 *
AnnaBridge 188:bcfe06ba3d64 141 */
AnnaBridge 188:bcfe06ba3d64 142 int cy_reserve_io_pin(PinName pin);
AnnaBridge 188:bcfe06ba3d64 143
AnnaBridge 188:bcfe06ba3d64 144
AnnaBridge 188:bcfe06ba3d64 145 /** \brief Releases i/o pin.
AnnaBridge 188:bcfe06ba3d64 146 *
AnnaBridge 188:bcfe06ba3d64 147 * \param pin PinName Id of the pin.
AnnaBridge 188:bcfe06ba3d64 148 * \return void
AnnaBridge 188:bcfe06ba3d64 149 *
AnnaBridge 188:bcfe06ba3d64 150 */
AnnaBridge 188:bcfe06ba3d64 151 void cy_free_io_pin(PinName pin);
AnnaBridge 188:bcfe06ba3d64 152
AnnaBridge 188:bcfe06ba3d64 153 /** \brief Initializes shared resource manager.
AnnaBridge 188:bcfe06ba3d64 154 *
AnnaBridge 188:bcfe06ba3d64 155 * \param none.
AnnaBridge 188:bcfe06ba3d64 156 * \return void
AnnaBridge 188:bcfe06ba3d64 157 *
AnnaBridge 188:bcfe06ba3d64 158 */
AnnaBridge 188:bcfe06ba3d64 159 void cy_srm_initialize(void);
AnnaBridge 188:bcfe06ba3d64 160
AnnaBridge 188:bcfe06ba3d64 161
AnnaBridge 188:bcfe06ba3d64 162 /** \brief Returns board-specific hardware MAC address.
AnnaBridge 188:bcfe06ba3d64 163 *
AnnaBridge 188:bcfe06ba3d64 164 * \param uint8_t *buffer Buffer where address will be returned.
AnnaBridge 188:bcfe06ba3d64 165 * \return void.
AnnaBridge 188:bcfe06ba3d64 166 *
AnnaBridge 188:bcfe06ba3d64 167 */
AnnaBridge 189:f392fc9709a3 168 void cy_get_bd_mac_address(uint8_t *buffer);
AnnaBridge 188:bcfe06ba3d64 169
AnnaBridge 188:bcfe06ba3d64 170
AnnaBridge 188:bcfe06ba3d64 171 /** \brief Determines proper PSoC6 pin drive mode settings.
AnnaBridge 188:bcfe06ba3d64 172 *
AnnaBridge 188:bcfe06ba3d64 173 * \param dir PinDirection Pin direction, in or out.
AnnaBridge 188:bcfe06ba3d64 174 * \param mode PinMode Mbed pin mode.
AnnaBridge 188:bcfe06ba3d64 175 * \return PSoC6 pin drive mode.
AnnaBridge 188:bcfe06ba3d64 176 *
AnnaBridge 188:bcfe06ba3d64 177 */
AnnaBridge 188:bcfe06ba3d64 178 static inline uint32_t gpio_get_cy_drive_mode(PinDirection dir, PinMode mode)
AnnaBridge 188:bcfe06ba3d64 179 {
AnnaBridge 188:bcfe06ba3d64 180 uint32_t cymode = 0;
AnnaBridge 188:bcfe06ba3d64 181
AnnaBridge 188:bcfe06ba3d64 182 switch (mode) {
AnnaBridge 188:bcfe06ba3d64 183 case PullNone:
AnnaBridge 188:bcfe06ba3d64 184 switch (dir) {
AnnaBridge 188:bcfe06ba3d64 185 case PIN_INPUT:
AnnaBridge 188:bcfe06ba3d64 186 cymode = CY_GPIO_DM_HIGHZ;
AnnaBridge 188:bcfe06ba3d64 187 break;
AnnaBridge 188:bcfe06ba3d64 188 case PIN_OUTPUT:
AnnaBridge 188:bcfe06ba3d64 189 cymode = CY_GPIO_DM_STRONG;
AnnaBridge 188:bcfe06ba3d64 190 break;
AnnaBridge 188:bcfe06ba3d64 191 }
AnnaBridge 188:bcfe06ba3d64 192 break;
AnnaBridge 188:bcfe06ba3d64 193
AnnaBridge 188:bcfe06ba3d64 194 case PushPull:
AnnaBridge 188:bcfe06ba3d64 195 cymode = CY_GPIO_DM_STRONG;
AnnaBridge 188:bcfe06ba3d64 196 break;
AnnaBridge 188:bcfe06ba3d64 197
AnnaBridge 188:bcfe06ba3d64 198 case PullUp:
AnnaBridge 188:bcfe06ba3d64 199 cymode = CY_GPIO_DM_PULLUP;
AnnaBridge 188:bcfe06ba3d64 200 break;
AnnaBridge 188:bcfe06ba3d64 201 case PullDown:
AnnaBridge 188:bcfe06ba3d64 202 cymode = CY_GPIO_DM_PULLDOWN;
AnnaBridge 188:bcfe06ba3d64 203 break;
AnnaBridge 188:bcfe06ba3d64 204 case OpenDrainDriveLow:
AnnaBridge 188:bcfe06ba3d64 205 cymode = CY_GPIO_DM_OD_DRIVESLOW;
AnnaBridge 188:bcfe06ba3d64 206 break;
AnnaBridge 188:bcfe06ba3d64 207 case OpenDrainDriveHigh:
AnnaBridge 188:bcfe06ba3d64 208 cymode = CY_GPIO_DM_OD_DRIVESHIGH;
AnnaBridge 188:bcfe06ba3d64 209 break;
AnnaBridge 188:bcfe06ba3d64 210 case AnalogMode:
AnnaBridge 188:bcfe06ba3d64 211 cymode = CY_GPIO_DM_ANALOG;
AnnaBridge 188:bcfe06ba3d64 212 break;
AnnaBridge 188:bcfe06ba3d64 213 }
AnnaBridge 188:bcfe06ba3d64 214
AnnaBridge 188:bcfe06ba3d64 215 return cymode;
AnnaBridge 188:bcfe06ba3d64 216 }
AnnaBridge 188:bcfe06ba3d64 217
AnnaBridge 189:f392fc9709a3 218 typedef enum
AnnaBridge 189:f392fc9709a3 219 {
AnnaBridge 189:f392fc9709a3 220 CY_CRYPTO_TRNG_HW,
AnnaBridge 189:f392fc9709a3 221 CY_CRYPTO_CRC_HW,
AnnaBridge 189:f392fc9709a3 222 CY_CRYPTO_VU_HW,
AnnaBridge 189:f392fc9709a3 223 CY_CRYPTO_COMMON_HW
AnnaBridge 189:f392fc9709a3 224 } cy_en_crypto_submodule_t;
AnnaBridge 189:f392fc9709a3 225
AnnaBridge 189:f392fc9709a3 226 #define NUM_CRYPTO_HW ((uint32_t)CY_CRYPTO_COMMON_HW + 1u)
AnnaBridge 189:f392fc9709a3 227
AnnaBridge 189:f392fc9709a3 228 /** \brief Request allocation of CRYPTO block.
AnnaBridge 189:f392fc9709a3 229 *
AnnaBridge 189:f392fc9709a3 230 * \param module_num Id of the CRYPTO submodule.
AnnaBridge 189:f392fc9709a3 231 * \return (0) when OK, (-1) when reservation conflict occurs.
AnnaBridge 189:f392fc9709a3 232 *
AnnaBridge 189:f392fc9709a3 233 */
AnnaBridge 189:f392fc9709a3 234 int cy_reserve_crypto(cy_en_crypto_submodule_t module_num);
AnnaBridge 189:f392fc9709a3 235
AnnaBridge 189:f392fc9709a3 236 /** \brief Releases CRYPTO block.
AnnaBridge 189:f392fc9709a3 237 *
AnnaBridge 189:f392fc9709a3 238 * \param module_num Id of the CRYPTO submodule.
AnnaBridge 189:f392fc9709a3 239 * \return void
AnnaBridge 189:f392fc9709a3 240 *
AnnaBridge 189:f392fc9709a3 241 */
AnnaBridge 189:f392fc9709a3 242 void cy_free_crypto(cy_en_crypto_submodule_t module_num);
AnnaBridge 188:bcfe06ba3d64 243
AnnaBridge 188:bcfe06ba3d64 244
AnnaBridge 188:bcfe06ba3d64 245 #if defined(__cplusplus)
AnnaBridge 188:bcfe06ba3d64 246 }
AnnaBridge 188:bcfe06ba3d64 247 #endif /* __cplusplus */
AnnaBridge 188:bcfe06ba3d64 248
AnnaBridge 188:bcfe06ba3d64 249
AnnaBridge 188:bcfe06ba3d64 250 #endif // _PSOC6_UTILS_H_