SMARTEST lib for MPS2

Dependents:   MSP2_LCD_HOLA

Committer:
FelipeVR
Date:
Thu Aug 23 13:39:38 2018 +0000
Revision:
0:f1a413971403
SMARTEST LCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FelipeVR 0:f1a413971403 1 /*
FelipeVR 0:f1a413971403 2 *-----------------------------------------------------------------------------
FelipeVR 0:f1a413971403 3 * The confidential and proprietary information contained in this file may
FelipeVR 0:f1a413971403 4 * only be used by a person authorised under and to the extent permitted
FelipeVR 0:f1a413971403 5 * by a subsisting licensing agreement from ARM Limited.
FelipeVR 0:f1a413971403 6 *
FelipeVR 0:f1a413971403 7 * (C) COPYRIGHT 2010-2011 ARM Limited.
FelipeVR 0:f1a413971403 8 * ALL RIGHTS RESERVED
FelipeVR 0:f1a413971403 9 *
FelipeVR 0:f1a413971403 10 * This entire notice must be reproduced on all copies of this file
FelipeVR 0:f1a413971403 11 * and copies of this file may only be made by a person if such person is
FelipeVR 0:f1a413971403 12 * permitted to do so under the terms of a subsisting license agreement
FelipeVR 0:f1a413971403 13 * from ARM Limited.
FelipeVR 0:f1a413971403 14 *
FelipeVR 0:f1a413971403 15 * SVN Information
FelipeVR 0:f1a413971403 16 *
FelipeVR 0:f1a413971403 17 * Checked In : $Date: 2012-05-28 18:02:18 +0100 (Mon, 28 May 2012) $
FelipeVR 0:f1a413971403 18 *
FelipeVR 0:f1a413971403 19 * Revision : $Revision: 210377 $
FelipeVR 0:f1a413971403 20 *
FelipeVR 0:f1a413971403 21 * Release Information : CM3DesignStart-r0p0-01rel0
FelipeVR 0:f1a413971403 22 *-----------------------------------------------------------------------------
FelipeVR 0:f1a413971403 23 */
FelipeVR 0:f1a413971403 24 /*********************************************************************//******
FelipeVR 0:f1a413971403 25 * @file CMSDK_driver.c
FelipeVR 0:f1a413971403 26 * @brief CMSDK Example Device Driver C File
FelipeVR 0:f1a413971403 27 * @version $State:CM3DesignStart-r0p0-00rel0$
FelipeVR 0:f1a413971403 28 * @date $Date: 2012-05-28 18:02:18 +0100 (Mon, 28 May 2012) $
FelipeVR 0:f1a413971403 29 *
FelipeVR 0:f1a413971403 30 ******************************************************************************/
FelipeVR 0:f1a413971403 31
FelipeVR 0:f1a413971403 32 #include "CMSDK_driver.h"
FelipeVR 0:f1a413971403 33
FelipeVR 0:f1a413971403 34
FelipeVR 0:f1a413971403 35
FelipeVR 0:f1a413971403 36 /** \mainpage ARM CMSDK LIBRARY
FelipeVR 0:f1a413971403 37 *
FelipeVR 0:f1a413971403 38 *
FelipeVR 0:f1a413971403 39 * This user manual describes the ARM Corex M Series CMSDK Library which utilises the
FelipeVR 0:f1a413971403 40 * Cortex Microcontroller Software Interface Standard (CMSIS). it also includes drivers
FelipeVR 0:f1a413971403 41 * for the following modules:
FelipeVR 0:f1a413971403 42 *
FelipeVR 0:f1a413971403 43 * - UART
FelipeVR 0:f1a413971403 44 * - Timer
FelipeVR 0:f1a413971403 45 * - GPIO
FelipeVR 0:f1a413971403 46 *
FelipeVR 0:f1a413971403 47 * The library contains C and assembly functions that have been ported and tested on the MDK
FelipeVR 0:f1a413971403 48 * toolchain.
FelipeVR 0:f1a413971403 49 */
FelipeVR 0:f1a413971403 50
FelipeVR 0:f1a413971403 51
FelipeVR 0:f1a413971403 52 /**
FelipeVR 0:f1a413971403 53 *
FelipeVR 0:f1a413971403 54 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 55 * @return none
FelipeVR 0:f1a413971403 56 *
FelipeVR 0:f1a413971403 57 * @brief Enable the microcontroller timer interrupts.
FelipeVR 0:f1a413971403 58 */
FelipeVR 0:f1a413971403 59
FelipeVR 0:f1a413971403 60 void CMSDK_timer_EnableIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
FelipeVR 0:f1a413971403 61 {
FelipeVR 0:f1a413971403 62 CMSDK_TIMER->CTRL |= CMSDK_TIMER_CTRL_IRQEN_Msk;
FelipeVR 0:f1a413971403 63 }
FelipeVR 0:f1a413971403 64
FelipeVR 0:f1a413971403 65 /**
FelipeVR 0:f1a413971403 66 *
FelipeVR 0:f1a413971403 67 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 68 * @return none
FelipeVR 0:f1a413971403 69 *
FelipeVR 0:f1a413971403 70 * @brief Disable the microcontroller timer interrutps.
FelipeVR 0:f1a413971403 71 */
FelipeVR 0:f1a413971403 72
FelipeVR 0:f1a413971403 73 void CMSDK_timer_DisableIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
FelipeVR 0:f1a413971403 74 {
FelipeVR 0:f1a413971403 75 CMSDK_TIMER->CTRL &= ~CMSDK_TIMER_CTRL_IRQEN_Msk;
FelipeVR 0:f1a413971403 76 }
FelipeVR 0:f1a413971403 77
FelipeVR 0:f1a413971403 78 /**
FelipeVR 0:f1a413971403 79 *
FelipeVR 0:f1a413971403 80 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 81 * @return none
FelipeVR 0:f1a413971403 82 *
FelipeVR 0:f1a413971403 83 * @brief Start the Timer.
FelipeVR 0:f1a413971403 84 */
FelipeVR 0:f1a413971403 85
FelipeVR 0:f1a413971403 86 void CMSDK_timer_StartTimer(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
FelipeVR 0:f1a413971403 87 {
FelipeVR 0:f1a413971403 88 CMSDK_TIMER->CTRL |= CMSDK_TIMER_CTRL_EN_Msk;
FelipeVR 0:f1a413971403 89 }
FelipeVR 0:f1a413971403 90
FelipeVR 0:f1a413971403 91 /**
FelipeVR 0:f1a413971403 92 *
FelipeVR 0:f1a413971403 93 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 94 * @return none
FelipeVR 0:f1a413971403 95 *
FelipeVR 0:f1a413971403 96 * @brief Stop the Timer.
FelipeVR 0:f1a413971403 97 */
FelipeVR 0:f1a413971403 98
FelipeVR 0:f1a413971403 99 void CMSDK_timer_StopTimer(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
FelipeVR 0:f1a413971403 100 {
FelipeVR 0:f1a413971403 101 CMSDK_TIMER->CTRL &= ~CMSDK_TIMER_CTRL_EN_Msk;
FelipeVR 0:f1a413971403 102 }
FelipeVR 0:f1a413971403 103
FelipeVR 0:f1a413971403 104 /**
FelipeVR 0:f1a413971403 105 *
FelipeVR 0:f1a413971403 106 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 107 * @return TimerValue
FelipeVR 0:f1a413971403 108 *
FelipeVR 0:f1a413971403 109 * @brief Returns the current value of the timer.
FelipeVR 0:f1a413971403 110 */
FelipeVR 0:f1a413971403 111
FelipeVR 0:f1a413971403 112 uint32_t CMSDK_timer_GetValue(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
FelipeVR 0:f1a413971403 113 {
FelipeVR 0:f1a413971403 114 return CMSDK_TIMER->VALUE;
FelipeVR 0:f1a413971403 115 }
FelipeVR 0:f1a413971403 116
FelipeVR 0:f1a413971403 117 /**
FelipeVR 0:f1a413971403 118 *
FelipeVR 0:f1a413971403 119 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 120 * @param value the value to which the timer is to be set
FelipeVR 0:f1a413971403 121 * @return TimerValue
FelipeVR 0:f1a413971403 122 *
FelipeVR 0:f1a413971403 123 * @brief Sets the timer to the specified value.
FelipeVR 0:f1a413971403 124 */
FelipeVR 0:f1a413971403 125
FelipeVR 0:f1a413971403 126 void CMSDK_timer_SetValue(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t value)
FelipeVR 0:f1a413971403 127 {
FelipeVR 0:f1a413971403 128 CMSDK_TIMER->VALUE = value;
FelipeVR 0:f1a413971403 129 }
FelipeVR 0:f1a413971403 130
FelipeVR 0:f1a413971403 131 /**
FelipeVR 0:f1a413971403 132 *
FelipeVR 0:f1a413971403 133 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 134 * @return TimerReload
FelipeVR 0:f1a413971403 135 *
FelipeVR 0:f1a413971403 136 * @brief Returns the reload value of the timer. The reload value is the value which the timer is set to after an underflow occurs.
FelipeVR 0:f1a413971403 137 */
FelipeVR 0:f1a413971403 138
FelipeVR 0:f1a413971403 139 uint32_t CMSDK_timer_GetReload(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
FelipeVR 0:f1a413971403 140 {
FelipeVR 0:f1a413971403 141 return CMSDK_TIMER->RELOAD;
FelipeVR 0:f1a413971403 142 }
FelipeVR 0:f1a413971403 143
FelipeVR 0:f1a413971403 144 /**
FelipeVR 0:f1a413971403 145 *
FelipeVR 0:f1a413971403 146 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 147 * @param value Value to be loaded
FelipeVR 0:f1a413971403 148 * @return none
FelipeVR 0:f1a413971403 149 *
FelipeVR 0:f1a413971403 150 * @brief Sets the reload value of the timer to the specified value. The reload value is the value which the timer is set to after an underflow occurs.
FelipeVR 0:f1a413971403 151 */
FelipeVR 0:f1a413971403 152
FelipeVR 0:f1a413971403 153 void CMSDK_timer_SetReload(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t value)
FelipeVR 0:f1a413971403 154 {
FelipeVR 0:f1a413971403 155 CMSDK_TIMER->RELOAD = value;
FelipeVR 0:f1a413971403 156 }
FelipeVR 0:f1a413971403 157
FelipeVR 0:f1a413971403 158 /**
FelipeVR 0:f1a413971403 159 *
FelipeVR 0:f1a413971403 160 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 161 * @return none
FelipeVR 0:f1a413971403 162 *
FelipeVR 0:f1a413971403 163 * @brief Clears the timer IRQ if set.
FelipeVR 0:f1a413971403 164 */
FelipeVR 0:f1a413971403 165
FelipeVR 0:f1a413971403 166 void CMSDK_timer_ClearIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
FelipeVR 0:f1a413971403 167 {
FelipeVR 0:f1a413971403 168 CMSDK_TIMER->INTCLEAR = CMSDK_TIMER_INTCLEAR_Msk;
FelipeVR 0:f1a413971403 169 }
FelipeVR 0:f1a413971403 170
FelipeVR 0:f1a413971403 171 /**
FelipeVR 0:f1a413971403 172 *
FelipeVR 0:f1a413971403 173 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 174 * @return none
FelipeVR 0:f1a413971403 175 *
FelipeVR 0:f1a413971403 176 * @brief Returns the IRQ status of the timer in question.
FelipeVR 0:f1a413971403 177 */
FelipeVR 0:f1a413971403 178
FelipeVR 0:f1a413971403 179 uint32_t CMSDK_timer_StatusIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
FelipeVR 0:f1a413971403 180 {
FelipeVR 0:f1a413971403 181 return CMSDK_TIMER->INTSTATUS;
FelipeVR 0:f1a413971403 182 }
FelipeVR 0:f1a413971403 183
FelipeVR 0:f1a413971403 184 /**
FelipeVR 0:f1a413971403 185 *
FelipeVR 0:f1a413971403 186 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 187 * @param reload The value to which the timer is to be set after an underflow has occurred
FelipeVR 0:f1a413971403 188 * @param irq_en Defines whether the timer IRQ is to be enabled
FelipeVR 0:f1a413971403 189 * @return none
FelipeVR 0:f1a413971403 190 *
FelipeVR 0:f1a413971403 191 * @brief Initialises the timer to use the internal clock and specifies the timer reload value and whether IRQ is enabled or not.
FelipeVR 0:f1a413971403 192 */
FelipeVR 0:f1a413971403 193
FelipeVR 0:f1a413971403 194 void CMSDK_timer_Init_IntClock(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t reload,
FelipeVR 0:f1a413971403 195 uint32_t irq_en)
FelipeVR 0:f1a413971403 196 {
FelipeVR 0:f1a413971403 197 CMSDK_TIMER->CTRL = 0;
FelipeVR 0:f1a413971403 198 CMSDK_TIMER->VALUE = reload;
FelipeVR 0:f1a413971403 199 CMSDK_TIMER->RELOAD = reload;
FelipeVR 0:f1a413971403 200 if (irq_en!=0) /* non zero - enable IRQ */
FelipeVR 0:f1a413971403 201 CMSDK_TIMER->CTRL = (CMSDK_TIMER_CTRL_IRQEN_Msk | CMSDK_TIMER_CTRL_EN_Msk);
FelipeVR 0:f1a413971403 202 else{ /* zero - do not enable IRQ */
FelipeVR 0:f1a413971403 203 CMSDK_TIMER->CTRL = ( CMSDK_TIMER_CTRL_EN_Msk); /* enable timer */
FelipeVR 0:f1a413971403 204 }
FelipeVR 0:f1a413971403 205 }
FelipeVR 0:f1a413971403 206
FelipeVR 0:f1a413971403 207 /**
FelipeVR 0:f1a413971403 208 *
FelipeVR 0:f1a413971403 209 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 210 * @param reload The value to which the timer is to be set after an underflow has occurred
FelipeVR 0:f1a413971403 211 * @param irq_en Defines whether the timer IRQ is to be enabled
FelipeVR 0:f1a413971403 212 * @return none
FelipeVR 0:f1a413971403 213 *
FelipeVR 0:f1a413971403 214 * @brief Initialises the timer to use the external clock and specifies the timer reload value and whether IRQ is enabled or not.
FelipeVR 0:f1a413971403 215 */
FelipeVR 0:f1a413971403 216
FelipeVR 0:f1a413971403 217 void CMSDK_timer_Init_ExtClock(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t reload,
FelipeVR 0:f1a413971403 218 uint32_t irq_en)
FelipeVR 0:f1a413971403 219 {
FelipeVR 0:f1a413971403 220 CMSDK_TIMER->CTRL = 0;
FelipeVR 0:f1a413971403 221 CMSDK_TIMER->VALUE = reload;
FelipeVR 0:f1a413971403 222 CMSDK_TIMER->RELOAD = reload;
FelipeVR 0:f1a413971403 223 if (irq_en!=0) /* non zero - enable IRQ */
FelipeVR 0:f1a413971403 224 CMSDK_TIMER->CTRL = (CMSDK_TIMER_CTRL_IRQEN_Msk |
FelipeVR 0:f1a413971403 225 CMSDK_TIMER_CTRL_SELEXTCLK_Msk |CMSDK_TIMER_CTRL_EN_Msk);
FelipeVR 0:f1a413971403 226 else { /* zero - do not enable IRQ */
FelipeVR 0:f1a413971403 227 CMSDK_TIMER->CTRL = ( CMSDK_TIMER_CTRL_EN_Msk |
FelipeVR 0:f1a413971403 228 CMSDK_TIMER_CTRL_SELEXTCLK_Msk); /* enable timer */
FelipeVR 0:f1a413971403 229 }
FelipeVR 0:f1a413971403 230 }
FelipeVR 0:f1a413971403 231
FelipeVR 0:f1a413971403 232 /**
FelipeVR 0:f1a413971403 233 *
FelipeVR 0:f1a413971403 234 * @brief Initialises the timer to use the internal clock but with an external enable. It also specifies the timer reload value and whether IRQ is enabled or not.
FelipeVR 0:f1a413971403 235 *
FelipeVR 0:f1a413971403 236 * @param *CMSDK_TIMER Timer Pointer
FelipeVR 0:f1a413971403 237 * @param reload The value to which the timer is to be set after an underflow has occurred
FelipeVR 0:f1a413971403 238 * @param irq_en Defines whether the timer IRQ is to be enabled
FelipeVR 0:f1a413971403 239 * @return none
FelipeVR 0:f1a413971403 240 *
FelipeVR 0:f1a413971403 241 *
FelipeVR 0:f1a413971403 242 */
FelipeVR 0:f1a413971403 243
FelipeVR 0:f1a413971403 244 void CMSDK_timer_Init_ExtEnable(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t reload,
FelipeVR 0:f1a413971403 245 uint32_t irq_en)
FelipeVR 0:f1a413971403 246 {
FelipeVR 0:f1a413971403 247 CMSDK_TIMER->CTRL = 0;
FelipeVR 0:f1a413971403 248 CMSDK_TIMER->VALUE = reload;
FelipeVR 0:f1a413971403 249 CMSDK_TIMER->RELOAD = reload;
FelipeVR 0:f1a413971403 250 if (irq_en!=0) /* non zero - enable IRQ */
FelipeVR 0:f1a413971403 251 CMSDK_TIMER->CTRL = (CMSDK_TIMER_CTRL_IRQEN_Msk |
FelipeVR 0:f1a413971403 252 CMSDK_TIMER_CTRL_SELEXTEN_Msk | CMSDK_TIMER_CTRL_EN_Msk);
FelipeVR 0:f1a413971403 253 else { /* zero - do not enable IRQ */
FelipeVR 0:f1a413971403 254 CMSDK_TIMER->CTRL = ( CMSDK_TIMER_CTRL_EN_Msk |
FelipeVR 0:f1a413971403 255 CMSDK_TIMER_CTRL_SELEXTEN_Msk); /* enable timer */
FelipeVR 0:f1a413971403 256 }
FelipeVR 0:f1a413971403 257 }
FelipeVR 0:f1a413971403 258
FelipeVR 0:f1a413971403 259
FelipeVR 0:f1a413971403 260 /*UART driver functions*/
FelipeVR 0:f1a413971403 261
FelipeVR 0:f1a413971403 262 /**
FelipeVR 0:f1a413971403 263 *
FelipeVR 0:f1a413971403 264 * @brief Initialises the UART specifying the UART Baud rate divider value and whether the send and recieve functionality is enabled. It also specifies which of the various interrupts are enabled.
FelipeVR 0:f1a413971403 265 *
FelipeVR 0:f1a413971403 266 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 267 * @param divider The value to which the UART baud rate divider is to be set
FelipeVR 0:f1a413971403 268 * @param tx_en Defines whether the UART transmit is to be enabled
FelipeVR 0:f1a413971403 269 * @param rx_en Defines whether the UART receive is to be enabled
FelipeVR 0:f1a413971403 270 * @param tx_irq_en Defines whether the UART transmit buffer full interrupt is to be enabled
FelipeVR 0:f1a413971403 271 * @param rx_irq_en Defines whether the UART receive buffer full interrupt is to be enabled
FelipeVR 0:f1a413971403 272 * @param tx_ovrirq_en Defines whether the UART transmit buffer overrun interrupt is to be enabled
FelipeVR 0:f1a413971403 273 * @param rx_ovrirq_en Defines whether the UART receive buffer overrun interrupt is to be enabled
FelipeVR 0:f1a413971403 274 * @return 1 if initialisation failed, 0 if successful.
FelipeVR 0:f1a413971403 275 */
FelipeVR 0:f1a413971403 276
FelipeVR 0:f1a413971403 277 uint32_t CMSDK_uart_init(CMSDK_UART_TypeDef *CMSDK_UART, uint32_t divider, uint32_t tx_en,
FelipeVR 0:f1a413971403 278 uint32_t rx_en, uint32_t tx_irq_en, uint32_t rx_irq_en, uint32_t tx_ovrirq_en, uint32_t rx_ovrirq_en)
FelipeVR 0:f1a413971403 279 {
FelipeVR 0:f1a413971403 280 uint32_t new_ctrl=0;
FelipeVR 0:f1a413971403 281
FelipeVR 0:f1a413971403 282 if (tx_en!=0) new_ctrl |= CMSDK_UART_CTRL_TXEN_Msk;
FelipeVR 0:f1a413971403 283 if (rx_en!=0) new_ctrl |= CMSDK_UART_CTRL_RXEN_Msk;
FelipeVR 0:f1a413971403 284 if (tx_irq_en!=0) new_ctrl |= CMSDK_UART_CTRL_TXIRQEN_Msk;
FelipeVR 0:f1a413971403 285 if (rx_irq_en!=0) new_ctrl |= CMSDK_UART_CTRL_RXIRQEN_Msk;
FelipeVR 0:f1a413971403 286 if (tx_ovrirq_en!=0) new_ctrl |= CMSDK_UART_CTRL_TXORIRQEN_Msk;
FelipeVR 0:f1a413971403 287 if (rx_ovrirq_en!=0) new_ctrl |= CMSDK_UART_CTRL_RXORIRQEN_Msk;
FelipeVR 0:f1a413971403 288
FelipeVR 0:f1a413971403 289 CMSDK_UART->CTRL = 0; /* Disable UART when changing configuration */
FelipeVR 0:f1a413971403 290 CMSDK_UART->BAUDDIV = divider;
FelipeVR 0:f1a413971403 291 CMSDK_UART->CTRL = new_ctrl; /* Update CTRL register to new value */
FelipeVR 0:f1a413971403 292
FelipeVR 0:f1a413971403 293 if((CMSDK_UART->STATE & (CMSDK_UART_STATE_RXOR_Msk | CMSDK_UART_STATE_TXOR_Msk))) return 1;
FelipeVR 0:f1a413971403 294 else return 0;
FelipeVR 0:f1a413971403 295 }
FelipeVR 0:f1a413971403 296
FelipeVR 0:f1a413971403 297 /**
FelipeVR 0:f1a413971403 298 *
FelipeVR 0:f1a413971403 299 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 300 * @return RxBufferFull
FelipeVR 0:f1a413971403 301 *
FelipeVR 0:f1a413971403 302 * @brief Returns whether the RX buffer is full.
FelipeVR 0:f1a413971403 303 */
FelipeVR 0:f1a413971403 304
FelipeVR 0:f1a413971403 305 uint32_t CMSDK_uart_GetRxBufferFull(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 306 {
FelipeVR 0:f1a413971403 307 return ((CMSDK_UART->STATE & CMSDK_UART_STATE_RXBF_Msk)>> CMSDK_UART_STATE_RXBF_Pos);
FelipeVR 0:f1a413971403 308 }
FelipeVR 0:f1a413971403 309
FelipeVR 0:f1a413971403 310 /**
FelipeVR 0:f1a413971403 311 *
FelipeVR 0:f1a413971403 312 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 313 * @return TxBufferFull
FelipeVR 0:f1a413971403 314 *
FelipeVR 0:f1a413971403 315 * @brief Returns whether the TX buffer is full.
FelipeVR 0:f1a413971403 316 */
FelipeVR 0:f1a413971403 317
FelipeVR 0:f1a413971403 318 uint32_t CMSDK_uart_GetTxBufferFull(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 319 {
FelipeVR 0:f1a413971403 320 return ((CMSDK_UART->STATE & CMSDK_UART_STATE_TXBF_Msk)>> CMSDK_UART_STATE_TXBF_Pos);
FelipeVR 0:f1a413971403 321 }
FelipeVR 0:f1a413971403 322
FelipeVR 0:f1a413971403 323 /**
FelipeVR 0:f1a413971403 324 *
FelipeVR 0:f1a413971403 325 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 326 * @param txchar Character to be sent
FelipeVR 0:f1a413971403 327 * @return none
FelipeVR 0:f1a413971403 328 *
FelipeVR 0:f1a413971403 329 * @brief Sends a character to the TX buffer for transmission.
FelipeVR 0:f1a413971403 330 */
FelipeVR 0:f1a413971403 331
FelipeVR 0:f1a413971403 332 void CMSDK_uart_SendChar(CMSDK_UART_TypeDef *CMSDK_UART, char txchar)
FelipeVR 0:f1a413971403 333 {
FelipeVR 0:f1a413971403 334 while(CMSDK_UART->STATE & CMSDK_UART_STATE_TXBF_Msk);
FelipeVR 0:f1a413971403 335 CMSDK_UART->DATA = (uint32_t)txchar;
FelipeVR 0:f1a413971403 336 }
FelipeVR 0:f1a413971403 337
FelipeVR 0:f1a413971403 338 /**
FelipeVR 0:f1a413971403 339 *
FelipeVR 0:f1a413971403 340 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 341 * @return rxchar
FelipeVR 0:f1a413971403 342 *
FelipeVR 0:f1a413971403 343 * @brief returns the character from the RX buffer which has been received.
FelipeVR 0:f1a413971403 344 */
FelipeVR 0:f1a413971403 345
FelipeVR 0:f1a413971403 346 char CMSDK_uart_ReceiveChar(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 347 {
FelipeVR 0:f1a413971403 348 while(!(CMSDK_UART->STATE & CMSDK_UART_STATE_RXBF_Msk));
FelipeVR 0:f1a413971403 349 return (char)(CMSDK_UART->DATA);
FelipeVR 0:f1a413971403 350 }
FelipeVR 0:f1a413971403 351
FelipeVR 0:f1a413971403 352 /**
FelipeVR 0:f1a413971403 353 *
FelipeVR 0:f1a413971403 354 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 355 * @return 0 - No overrun
FelipeVR 0:f1a413971403 356 * @return 1 - TX overrun
FelipeVR 0:f1a413971403 357 * @return 2 - RX overrun
FelipeVR 0:f1a413971403 358 * @return 3 - TX & RX overrun
FelipeVR 0:f1a413971403 359 *
FelipeVR 0:f1a413971403 360 * @brief returns the current overrun status of both the RX & TX buffers.
FelipeVR 0:f1a413971403 361 */
FelipeVR 0:f1a413971403 362
FelipeVR 0:f1a413971403 363
FelipeVR 0:f1a413971403 364 uint32_t CMSDK_uart_GetOverrunStatus(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 365 {
FelipeVR 0:f1a413971403 366 return ((CMSDK_UART->STATE & (CMSDK_UART_STATE_RXOR_Msk | CMSDK_UART_STATE_TXOR_Msk))>>CMSDK_UART_STATE_TXOR_Pos);
FelipeVR 0:f1a413971403 367 }
FelipeVR 0:f1a413971403 368
FelipeVR 0:f1a413971403 369 /**
FelipeVR 0:f1a413971403 370 *
FelipeVR 0:f1a413971403 371 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 372 * @return 0 - No overrun
FelipeVR 0:f1a413971403 373 * @return 1 - TX overrun
FelipeVR 0:f1a413971403 374 * @return 2 - RX overrun
FelipeVR 0:f1a413971403 375 * @return 3 - TX & RX overrun
FelipeVR 0:f1a413971403 376 *
FelipeVR 0:f1a413971403 377 * @brief Clears the overrun status of both the RX & TX buffers and then returns the current overrun status.
FelipeVR 0:f1a413971403 378 */
FelipeVR 0:f1a413971403 379
FelipeVR 0:f1a413971403 380 uint32_t CMSDK_uart_ClearOverrunStatus(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 381 {
FelipeVR 0:f1a413971403 382 CMSDK_UART->STATE = (CMSDK_UART_STATE_RXOR_Msk | CMSDK_UART_STATE_TXOR_Msk);
FelipeVR 0:f1a413971403 383 return ((CMSDK_UART->STATE & (CMSDK_UART_STATE_RXOR_Msk | CMSDK_UART_STATE_TXOR_Msk))>>CMSDK_UART_STATE_TXOR_Pos);
FelipeVR 0:f1a413971403 384 }
FelipeVR 0:f1a413971403 385
FelipeVR 0:f1a413971403 386 /**
FelipeVR 0:f1a413971403 387 *
FelipeVR 0:f1a413971403 388 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 389 * @return BaudDiv
FelipeVR 0:f1a413971403 390 *
FelipeVR 0:f1a413971403 391 * @brief Returns the current UART Baud rate divider. Note that the Baud rate divider is the difference between the clock frequency and the Baud frequency.
FelipeVR 0:f1a413971403 392 */
FelipeVR 0:f1a413971403 393
FelipeVR 0:f1a413971403 394 uint32_t CMSDK_uart_GetBaudDivider(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 395 {
FelipeVR 0:f1a413971403 396 return CMSDK_UART->BAUDDIV;
FelipeVR 0:f1a413971403 397 }
FelipeVR 0:f1a413971403 398
FelipeVR 0:f1a413971403 399 /**
FelipeVR 0:f1a413971403 400 *
FelipeVR 0:f1a413971403 401 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 402 * @return TXStatus
FelipeVR 0:f1a413971403 403 *
FelipeVR 0:f1a413971403 404 * @brief Returns the TX interrupt status.
FelipeVR 0:f1a413971403 405 */
FelipeVR 0:f1a413971403 406
FelipeVR 0:f1a413971403 407 uint32_t CMSDK_uart_GetTxIRQStatus(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 408 {
FelipeVR 0:f1a413971403 409 return ((CMSDK_UART->INTSTATUS & CMSDK_UART_CTRL_TXIRQ_Msk)>>CMSDK_UART_CTRL_TXIRQ_Pos);
FelipeVR 0:f1a413971403 410 }
FelipeVR 0:f1a413971403 411
FelipeVR 0:f1a413971403 412 /**
FelipeVR 0:f1a413971403 413 *
FelipeVR 0:f1a413971403 414 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 415 * @return RXStatus
FelipeVR 0:f1a413971403 416 *
FelipeVR 0:f1a413971403 417 * @brief Returns the RX interrupt status.
FelipeVR 0:f1a413971403 418 */
FelipeVR 0:f1a413971403 419
FelipeVR 0:f1a413971403 420 uint32_t CMSDK_uart_GetRxIRQStatus(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 421 {
FelipeVR 0:f1a413971403 422 return ((CMSDK_UART->INTSTATUS & CMSDK_UART_CTRL_RXIRQ_Msk)>>CMSDK_UART_CTRL_RXIRQ_Pos);
FelipeVR 0:f1a413971403 423 }
FelipeVR 0:f1a413971403 424
FelipeVR 0:f1a413971403 425 /**
FelipeVR 0:f1a413971403 426 *
FelipeVR 0:f1a413971403 427 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 428 * @return none
FelipeVR 0:f1a413971403 429 *
FelipeVR 0:f1a413971403 430 * @brief Clears the TX buffer full interrupt status.
FelipeVR 0:f1a413971403 431 */
FelipeVR 0:f1a413971403 432
FelipeVR 0:f1a413971403 433 void CMSDK_uart_ClearTxIRQ(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 434 {
FelipeVR 0:f1a413971403 435 CMSDK_UART->INTCLEAR = CMSDK_UART_CTRL_TXIRQ_Msk;
FelipeVR 0:f1a413971403 436 }
FelipeVR 0:f1a413971403 437
FelipeVR 0:f1a413971403 438 /**
FelipeVR 0:f1a413971403 439 *
FelipeVR 0:f1a413971403 440 * @param *CMSDK_UART UART Pointer
FelipeVR 0:f1a413971403 441 * @return none
FelipeVR 0:f1a413971403 442 *
FelipeVR 0:f1a413971403 443 * @brief Clears the RX interrupt status.
FelipeVR 0:f1a413971403 444 */
FelipeVR 0:f1a413971403 445
FelipeVR 0:f1a413971403 446 void CMSDK_uart_ClearRxIRQ(CMSDK_UART_TypeDef *CMSDK_UART)
FelipeVR 0:f1a413971403 447 {
FelipeVR 0:f1a413971403 448 CMSDK_UART->INTCLEAR = CMSDK_UART_CTRL_RXIRQ_Msk;
FelipeVR 0:f1a413971403 449 }
FelipeVR 0:f1a413971403 450
FelipeVR 0:f1a413971403 451
FelipeVR 0:f1a413971403 452 /*GPIO driver functions*/
FelipeVR 0:f1a413971403 453
FelipeVR 0:f1a413971403 454 /**
FelipeVR 0:f1a413971403 455 *
FelipeVR 0:f1a413971403 456 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 457 * @param outenable Bit pattern to be used to set output enable register
FelipeVR 0:f1a413971403 458 * @return none
FelipeVR 0:f1a413971403 459 *
FelipeVR 0:f1a413971403 460 * @brief Sets pins on a port as an output. Set the bit corresponding to the pin number to 1 for output i.e. Set bit 1 of outenable to 1 to set pin 1 as an output. This function is thread safe.
FelipeVR 0:f1a413971403 461 */
FelipeVR 0:f1a413971403 462
FelipeVR 0:f1a413971403 463 void CMSDK_gpio_SetOutEnable(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t outenableset)
FelipeVR 0:f1a413971403 464 {
FelipeVR 0:f1a413971403 465 CMSDK_GPIO->OUTENABLESET = outenableset;
FelipeVR 0:f1a413971403 466 }
FelipeVR 0:f1a413971403 467
FelipeVR 0:f1a413971403 468 /**
FelipeVR 0:f1a413971403 469 *
FelipeVR 0:f1a413971403 470 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 471 * @param outenable Bit pattern to be used to set output enable register
FelipeVR 0:f1a413971403 472 * @return none
FelipeVR 0:f1a413971403 473 *
FelipeVR 0:f1a413971403 474 * @brief Sets pins on a port as an input. Set the bit corresponding to the pin number to 1 for input i.e. Set bit 1 of outenable to 1 to set pin 1 as an input. This function is thread safe.
FelipeVR 0:f1a413971403 475 */
FelipeVR 0:f1a413971403 476
FelipeVR 0:f1a413971403 477 void CMSDK_gpio_ClrOutEnable(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t outenableclr)
FelipeVR 0:f1a413971403 478 {
FelipeVR 0:f1a413971403 479 CMSDK_GPIO->OUTENABLECLR = outenableclr;
FelipeVR 0:f1a413971403 480 }
FelipeVR 0:f1a413971403 481
FelipeVR 0:f1a413971403 482 /**
FelipeVR 0:f1a413971403 483 *
FelipeVR 0:f1a413971403 484 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 485 * @return outputstatus
FelipeVR 0:f1a413971403 486 *
FelipeVR 0:f1a413971403 487 * @brief returns a uint32_t which defines the whether pins on a port are set as inputs or outputs i.e. if bit 1 of the returned uint32_t is set to 1 then this means that pin 1 is an output.
FelipeVR 0:f1a413971403 488 */
FelipeVR 0:f1a413971403 489
FelipeVR 0:f1a413971403 490 uint32_t CMSDK_gpio_GetOutEnable(CMSDK_GPIO_TypeDef *CMSDK_GPIO)
FelipeVR 0:f1a413971403 491 {
FelipeVR 0:f1a413971403 492 return CMSDK_GPIO->OUTENABLESET;
FelipeVR 0:f1a413971403 493 }
FelipeVR 0:f1a413971403 494
FelipeVR 0:f1a413971403 495 /**
FelipeVR 0:f1a413971403 496 *
FelipeVR 0:f1a413971403 497 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 498 * @param AltFunc uint32_t to specify whether the alternate function for the pins on the port is enabled
FelipeVR 0:f1a413971403 499 * @return none
FelipeVR 0:f1a413971403 500 *
FelipeVR 0:f1a413971403 501 * @brief enables the alternative function for pins. Set the bit corresponding to the pin number to 1 for alternate function i.e. Set bit 1 of ALtFunc to 1 to set pin 1 to its alternative function. This function is thread safe.
FelipeVR 0:f1a413971403 502 */
FelipeVR 0:f1a413971403 503
FelipeVR 0:f1a413971403 504 void CMSDK_gpio_SetAltFunc(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t AltFuncset)
FelipeVR 0:f1a413971403 505 {
FelipeVR 0:f1a413971403 506 CMSDK_GPIO->ALTFUNCSET = AltFuncset;
FelipeVR 0:f1a413971403 507 }
FelipeVR 0:f1a413971403 508
FelipeVR 0:f1a413971403 509 /**
FelipeVR 0:f1a413971403 510 *
FelipeVR 0:f1a413971403 511 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 512 * @param AltFunc uint32_t to specify whether the alternate function for the pins on the port is enabled
FelipeVR 0:f1a413971403 513 * @return none
FelipeVR 0:f1a413971403 514 *
FelipeVR 0:f1a413971403 515 * @brief disables the alternative function for pins. Set the bit corresponding to the pin number to 1 to disable alternate function i.e. Set bit 1 of ALtFunc to 1 to set pin 1 to the orignal output function. This function is thread safe.
FelipeVR 0:f1a413971403 516 */
FelipeVR 0:f1a413971403 517
FelipeVR 0:f1a413971403 518 void CMSDK_gpio_ClrAltFunc(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t AltFuncclr)
FelipeVR 0:f1a413971403 519 {
FelipeVR 0:f1a413971403 520 CMSDK_GPIO->ALTFUNCCLR = AltFuncclr;
FelipeVR 0:f1a413971403 521 }
FelipeVR 0:f1a413971403 522
FelipeVR 0:f1a413971403 523 /**
FelipeVR 0:f1a413971403 524 *
FelipeVR 0:f1a413971403 525 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 526 * @return AltFuncStatus
FelipeVR 0:f1a413971403 527 *
FelipeVR 0:f1a413971403 528 * @brief returns a uint32_t which defines the whether pins on a port are set to their alternative or their original output functionality i.e. if bit 1 of the returned uint32_t is set to 1 then this means that pin 1 is set to its alternative function.
FelipeVR 0:f1a413971403 529 */
FelipeVR 0:f1a413971403 530
FelipeVR 0:f1a413971403 531 uint32_t CMSDK_gpio_GetAltFunc(CMSDK_GPIO_TypeDef *CMSDK_GPIO)
FelipeVR 0:f1a413971403 532 {
FelipeVR 0:f1a413971403 533 return CMSDK_GPIO->ALTFUNCSET;
FelipeVR 0:f1a413971403 534 }
FelipeVR 0:f1a413971403 535
FelipeVR 0:f1a413971403 536 /**
FelipeVR 0:f1a413971403 537 *
FelipeVR 0:f1a413971403 538 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 539 * @param Num The pin number for which to clear the Interrupt
FelipeVR 0:f1a413971403 540 * @return NewIntStatus
FelipeVR 0:f1a413971403 541 *
FelipeVR 0:f1a413971403 542 * @brief Clears the interrupt flag for the specified pin and then returns the new interrupt status of the pin. This function is thread safe.
FelipeVR 0:f1a413971403 543 */
FelipeVR 0:f1a413971403 544
FelipeVR 0:f1a413971403 545 uint32_t CMSDK_gpio_IntClear(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t Num)
FelipeVR 0:f1a413971403 546 {
FelipeVR 0:f1a413971403 547 CMSDK_GPIO->INTCLEAR = (1 << Num);
FelipeVR 0:f1a413971403 548
FelipeVR 0:f1a413971403 549 return CMSDK_GPIO->INTSTATUS;
FelipeVR 0:f1a413971403 550 }
FelipeVR 0:f1a413971403 551
FelipeVR 0:f1a413971403 552 /**
FelipeVR 0:f1a413971403 553 *
FelipeVR 0:f1a413971403 554 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 555 * @param Num The pin number for which to enable the Interrupt
FelipeVR 0:f1a413971403 556 * @return NewIntEnStatus
FelipeVR 0:f1a413971403 557 *
FelipeVR 0:f1a413971403 558 * @brief Enables interrupts for the specified pin and then returns the new interrupt enable status of the pin. This function is thread safe.
FelipeVR 0:f1a413971403 559 */
FelipeVR 0:f1a413971403 560
FelipeVR 0:f1a413971403 561 uint32_t CMSDK_gpio_SetIntEnable(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t Num)
FelipeVR 0:f1a413971403 562 {
FelipeVR 0:f1a413971403 563 CMSDK_GPIO->INTENSET = (1 << Num);
FelipeVR 0:f1a413971403 564
FelipeVR 0:f1a413971403 565 return CMSDK_GPIO->INTENSET;
FelipeVR 0:f1a413971403 566 }
FelipeVR 0:f1a413971403 567
FelipeVR 0:f1a413971403 568 /**
FelipeVR 0:f1a413971403 569 *
FelipeVR 0:f1a413971403 570 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 571 * @param Num The pin number for which to disable the Interrupt
FelipeVR 0:f1a413971403 572 * @return NewIntEnStatus
FelipeVR 0:f1a413971403 573 *
FelipeVR 0:f1a413971403 574 * @brief Disables interrupts for the specified pin and then returns the new interrupt enable status of the pin. This function is thread safe.
FelipeVR 0:f1a413971403 575 */
FelipeVR 0:f1a413971403 576
FelipeVR 0:f1a413971403 577 uint32_t CMSDK_gpio_ClrIntEnable(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t Num)
FelipeVR 0:f1a413971403 578 {
FelipeVR 0:f1a413971403 579 CMSDK_GPIO->INTENCLR = (1 << Num);
FelipeVR 0:f1a413971403 580
FelipeVR 0:f1a413971403 581 return CMSDK_GPIO->INTENCLR;
FelipeVR 0:f1a413971403 582 }
FelipeVR 0:f1a413971403 583
FelipeVR 0:f1a413971403 584 /**
FelipeVR 0:f1a413971403 585 *
FelipeVR 0:f1a413971403 586 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 587 * @param Num The pin number for which to set the Interrupt type
FelipeVR 0:f1a413971403 588 * @return none
FelipeVR 0:f1a413971403 589 *
FelipeVR 0:f1a413971403 590 * @brief Changes the interrupt type for the specified pin to a high level interrupt. This function is thread safe.
FelipeVR 0:f1a413971403 591 */
FelipeVR 0:f1a413971403 592
FelipeVR 0:f1a413971403 593 void CMSDK_gpio_SetIntHighLevel(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t Num)
FelipeVR 0:f1a413971403 594 {
FelipeVR 0:f1a413971403 595 CMSDK_GPIO->INTTYPECLR = (1 << Num); /* Clear INT TYPE bit */
FelipeVR 0:f1a413971403 596 CMSDK_GPIO->INTPOLSET = (1 << Num); /* Set INT POLarity bit */
FelipeVR 0:f1a413971403 597 }
FelipeVR 0:f1a413971403 598
FelipeVR 0:f1a413971403 599 /**
FelipeVR 0:f1a413971403 600 *
FelipeVR 0:f1a413971403 601 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 602 * @param Num The pin number for which to set the Interrupt type
FelipeVR 0:f1a413971403 603 * @return none
FelipeVR 0:f1a413971403 604 *
FelipeVR 0:f1a413971403 605 * @brief Changes the interrupt type for the specified pin to a rising edge interrupt. This function is thread safe.
FelipeVR 0:f1a413971403 606 */
FelipeVR 0:f1a413971403 607
FelipeVR 0:f1a413971403 608 void CMSDK_gpio_SetIntRisingEdge(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t Num)
FelipeVR 0:f1a413971403 609 {
FelipeVR 0:f1a413971403 610 CMSDK_GPIO->INTTYPESET = (1 << Num); /* Set INT TYPE bit */
FelipeVR 0:f1a413971403 611 CMSDK_GPIO->INTPOLSET = (1 << Num); /* Set INT POLarity bit */
FelipeVR 0:f1a413971403 612 }
FelipeVR 0:f1a413971403 613
FelipeVR 0:f1a413971403 614 /**
FelipeVR 0:f1a413971403 615 *
FelipeVR 0:f1a413971403 616 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 617 * @param Num The pin number for which to set the Interrupt type
FelipeVR 0:f1a413971403 618 * @return none
FelipeVR 0:f1a413971403 619 *
FelipeVR 0:f1a413971403 620 * @brief Changes the interrupt type for the specified pin to a low level interrupt. This function is thread safe.
FelipeVR 0:f1a413971403 621 */
FelipeVR 0:f1a413971403 622
FelipeVR 0:f1a413971403 623 void CMSDK_gpio_SetIntLowLevel(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t Num)
FelipeVR 0:f1a413971403 624 {
FelipeVR 0:f1a413971403 625 CMSDK_GPIO->INTTYPECLR = (1 << Num); /* Clear INT TYPE bit */
FelipeVR 0:f1a413971403 626 CMSDK_GPIO->INTPOLCLR = (1 << Num); /* Clear INT POLarity bit */
FelipeVR 0:f1a413971403 627 }
FelipeVR 0:f1a413971403 628
FelipeVR 0:f1a413971403 629 /**
FelipeVR 0:f1a413971403 630 *
FelipeVR 0:f1a413971403 631 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 632 * @param Num The pin number for which to set the Interrupt type
FelipeVR 0:f1a413971403 633 * @return none
FelipeVR 0:f1a413971403 634 *
FelipeVR 0:f1a413971403 635 * @brief Changes the interrupt type for the specified pin to a falling edge interrupt. This function is thread safe.
FelipeVR 0:f1a413971403 636 */
FelipeVR 0:f1a413971403 637
FelipeVR 0:f1a413971403 638 void CMSDK_gpio_SetIntFallingEdge(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t Num)
FelipeVR 0:f1a413971403 639 {
FelipeVR 0:f1a413971403 640 CMSDK_GPIO->INTTYPESET = (1 << Num); /* Set INT TYPE bit */
FelipeVR 0:f1a413971403 641 CMSDK_GPIO->INTPOLCLR = (1 << Num); /* Clear INT POLarity bit */
FelipeVR 0:f1a413971403 642 }
FelipeVR 0:f1a413971403 643
FelipeVR 0:f1a413971403 644 /**
FelipeVR 0:f1a413971403 645 *
FelipeVR 0:f1a413971403 646 * @param *CMSDK_GPIO GPIO Pointer
FelipeVR 0:f1a413971403 647 * @param mask The output port mask
FelipeVR 0:f1a413971403 648 * @param value The value to output to the specified port
FelipeVR 0:f1a413971403 649 * @return none
FelipeVR 0:f1a413971403 650 *
FelipeVR 0:f1a413971403 651 * @brief Outputs the specified value on the desired port using the user defined mask to perform Masked access.
FelipeVR 0:f1a413971403 652 */
FelipeVR 0:f1a413971403 653
FelipeVR 0:f1a413971403 654 void CMSDK_gpio_MaskedWrite(CMSDK_GPIO_TypeDef *CMSDK_GPIO, uint32_t value, uint32_t mask)
FelipeVR 0:f1a413971403 655 {
FelipeVR 0:f1a413971403 656 CMSDK_GPIO->LB_MASKED[0x00FF & mask] = value;
FelipeVR 0:f1a413971403 657 CMSDK_GPIO->UB_MASKED[((0xFF00 & mask) >> 8)] = value;
FelipeVR 0:f1a413971403 658 }
FelipeVR 0:f1a413971403 659