mbed library sources. Supersedes mbed-src.

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

Committer:
AnnaBridge
Date:
Thu Nov 08 11:46:34 2018 +0000
Revision:
188:bcfe06ba3d64
Child:
189:f392fc9709a3
mbed-dev library. Release version 164

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