BA / SerialCom

Fork of OmniWheels by Gustav Atmel

Committer:
gustavatmel
Date:
Tue May 01 15:47:08 2018 +0000
Revision:
1:9c5af431a1f1
sdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gustavatmel 1:9c5af431a1f1 1 /**************************************************************************//**
gustavatmel 1:9c5af431a1f1 2 * @file usci_uart.c
gustavatmel 1:9c5af431a1f1 3 * @version V3.00
gustavatmel 1:9c5af431a1f1 4 * @brief M480 series USCI UART (UUART) driver source file
gustavatmel 1:9c5af431a1f1 5 *
gustavatmel 1:9c5af431a1f1 6 * @copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.
gustavatmel 1:9c5af431a1f1 7 *****************************************************************************/
gustavatmel 1:9c5af431a1f1 8
gustavatmel 1:9c5af431a1f1 9 #include <stdio.h>
gustavatmel 1:9c5af431a1f1 10 #include "M480.h"
gustavatmel 1:9c5af431a1f1 11
gustavatmel 1:9c5af431a1f1 12 /** @addtogroup M480_Device_Driver M480 Device Driver
gustavatmel 1:9c5af431a1f1 13 @{
gustavatmel 1:9c5af431a1f1 14 */
gustavatmel 1:9c5af431a1f1 15
gustavatmel 1:9c5af431a1f1 16 /** @addtogroup M480_USCI_UART_Driver USCI_UART Driver
gustavatmel 1:9c5af431a1f1 17 @{
gustavatmel 1:9c5af431a1f1 18 */
gustavatmel 1:9c5af431a1f1 19
gustavatmel 1:9c5af431a1f1 20 /** @addtogroup M480_USCI_UART_EXPORTED_FUNCTIONS USCI_UART Exported Functions
gustavatmel 1:9c5af431a1f1 21 @{
gustavatmel 1:9c5af431a1f1 22 */
gustavatmel 1:9c5af431a1f1 23
gustavatmel 1:9c5af431a1f1 24 /**
gustavatmel 1:9c5af431a1f1 25 * @brief Clear USCI_UART specified interrupt flag
gustavatmel 1:9c5af431a1f1 26 *
gustavatmel 1:9c5af431a1f1 27 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 28 * @param[in] u32Mask The combination of all related interrupt sources.
gustavatmel 1:9c5af431a1f1 29 * Each bit corresponds to a interrupt source.
gustavatmel 1:9c5af431a1f1 30 * This parameter decides which interrupt flags will be cleared. It could be the combination of:
gustavatmel 1:9c5af431a1f1 31 * - \ref UUART_ABR_INT_MASK
gustavatmel 1:9c5af431a1f1 32 * - \ref UUART_RLS_INT_MASK
gustavatmel 1:9c5af431a1f1 33 * - \ref UUART_BUF_RXOV_INT_MASK
gustavatmel 1:9c5af431a1f1 34 * - \ref UUART_TXST_INT_MASK
gustavatmel 1:9c5af431a1f1 35 * - \ref UUART_TXEND_INT_MASK
gustavatmel 1:9c5af431a1f1 36 * - \ref UUART_RXST_INT_MASK
gustavatmel 1:9c5af431a1f1 37 * - \ref UUART_RXEND_INT_MASK
gustavatmel 1:9c5af431a1f1 38 *
gustavatmel 1:9c5af431a1f1 39 * @return None
gustavatmel 1:9c5af431a1f1 40 *
gustavatmel 1:9c5af431a1f1 41 * @details The function is used to clear USCI_UART related interrupt flags specified by u32Mask parameter.
gustavatmel 1:9c5af431a1f1 42 */
gustavatmel 1:9c5af431a1f1 43
gustavatmel 1:9c5af431a1f1 44 void UUART_ClearIntFlag(UUART_T* uuart , uint32_t u32Mask)
gustavatmel 1:9c5af431a1f1 45 {
gustavatmel 1:9c5af431a1f1 46
gustavatmel 1:9c5af431a1f1 47 if(u32Mask & UUART_ABR_INT_MASK) { /* Clear Auto-baud Rate Interrupt */
gustavatmel 1:9c5af431a1f1 48 uuart->PROTSTS = UUART_PROTSTS_ABRDETIF_Msk;
gustavatmel 1:9c5af431a1f1 49 }
gustavatmel 1:9c5af431a1f1 50
gustavatmel 1:9c5af431a1f1 51 if(u32Mask & UUART_RLS_INT_MASK) { /* Clear Receive Line Status Interrupt */
gustavatmel 1:9c5af431a1f1 52 uuart->PROTSTS = (UUART_PROTSTS_BREAK_Msk | UUART_PROTSTS_FRMERR_Msk | UUART_PROTSTS_PARITYERR_Msk);
gustavatmel 1:9c5af431a1f1 53 }
gustavatmel 1:9c5af431a1f1 54
gustavatmel 1:9c5af431a1f1 55 if(u32Mask & UUART_BUF_RXOV_INT_MASK) { /* Clear Receive Buffer Over-run Error Interrupt */
gustavatmel 1:9c5af431a1f1 56 uuart->BUFSTS = UUART_BUFSTS_RXOVIF_Msk;
gustavatmel 1:9c5af431a1f1 57 }
gustavatmel 1:9c5af431a1f1 58
gustavatmel 1:9c5af431a1f1 59 if(u32Mask & UUART_TXST_INT_MASK) { /* Clear Transmit Start Interrupt */
gustavatmel 1:9c5af431a1f1 60 uuart->PROTSTS = UUART_PROTSTS_TXSTIF_Msk;
gustavatmel 1:9c5af431a1f1 61 }
gustavatmel 1:9c5af431a1f1 62
gustavatmel 1:9c5af431a1f1 63 if(u32Mask & UUART_TXEND_INT_MASK) { /* Clear Transmit End Interrupt */
gustavatmel 1:9c5af431a1f1 64 uuart->PROTSTS = UUART_PROTSTS_TXENDIF_Msk;
gustavatmel 1:9c5af431a1f1 65 }
gustavatmel 1:9c5af431a1f1 66
gustavatmel 1:9c5af431a1f1 67 if(u32Mask & UUART_RXST_INT_MASK) { /* Clear Receive Start Interrupt */
gustavatmel 1:9c5af431a1f1 68 uuart->PROTSTS = UUART_PROTSTS_RXSTIF_Msk;
gustavatmel 1:9c5af431a1f1 69 }
gustavatmel 1:9c5af431a1f1 70
gustavatmel 1:9c5af431a1f1 71 if(u32Mask & UUART_RXEND_INT_MASK) { /* Clear Receive End Interrupt */
gustavatmel 1:9c5af431a1f1 72 uuart->PROTSTS = UUART_PROTSTS_RXENDIF_Msk;
gustavatmel 1:9c5af431a1f1 73 }
gustavatmel 1:9c5af431a1f1 74
gustavatmel 1:9c5af431a1f1 75 }
gustavatmel 1:9c5af431a1f1 76
gustavatmel 1:9c5af431a1f1 77 /**
gustavatmel 1:9c5af431a1f1 78 * @brief Get USCI_UART specified interrupt flag
gustavatmel 1:9c5af431a1f1 79 *
gustavatmel 1:9c5af431a1f1 80 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 81 * @param[in] u32Mask The combination of all related interrupt sources.
gustavatmel 1:9c5af431a1f1 82 * Each bit corresponds to a interrupt source.
gustavatmel 1:9c5af431a1f1 83 * This parameter decides which interrupt flags will be read. It is combination of:
gustavatmel 1:9c5af431a1f1 84 * - \ref UUART_ABR_INT_MASK
gustavatmel 1:9c5af431a1f1 85 * - \ref UUART_RLS_INT_MASK
gustavatmel 1:9c5af431a1f1 86 * - \ref UUART_BUF_RXOV_INT_MASK
gustavatmel 1:9c5af431a1f1 87 * - \ref UUART_TXST_INT_MASK
gustavatmel 1:9c5af431a1f1 88 * - \ref UUART_TXEND_INT_MASK
gustavatmel 1:9c5af431a1f1 89 * - \ref UUART_RXST_INT_MASK
gustavatmel 1:9c5af431a1f1 90 * - \ref UUART_RXEND_INT_MASK
gustavatmel 1:9c5af431a1f1 91 *
gustavatmel 1:9c5af431a1f1 92 * @return Interrupt flags of selected sources.
gustavatmel 1:9c5af431a1f1 93 *
gustavatmel 1:9c5af431a1f1 94 * @details The function is used to get USCI_UART related interrupt flags specified by u32Mask parameter.
gustavatmel 1:9c5af431a1f1 95 */
gustavatmel 1:9c5af431a1f1 96
gustavatmel 1:9c5af431a1f1 97 uint32_t UUART_GetIntFlag(UUART_T* uuart , uint32_t u32Mask)
gustavatmel 1:9c5af431a1f1 98 {
gustavatmel 1:9c5af431a1f1 99 uint32_t u32IntFlag = 0ul;
gustavatmel 1:9c5af431a1f1 100 uint32_t u32Tmp1, u32Tmp2;
gustavatmel 1:9c5af431a1f1 101
gustavatmel 1:9c5af431a1f1 102 /* Check Auto-baud Rate Interrupt Flag */
gustavatmel 1:9c5af431a1f1 103 u32Tmp1 = (u32Mask & UUART_ABR_INT_MASK);
gustavatmel 1:9c5af431a1f1 104 u32Tmp2 = (uuart->PROTSTS & UUART_PROTSTS_ABRDETIF_Msk);
gustavatmel 1:9c5af431a1f1 105 if(u32Tmp1 && u32Tmp2) {
gustavatmel 1:9c5af431a1f1 106 u32IntFlag |= UUART_ABR_INT_MASK;
gustavatmel 1:9c5af431a1f1 107 }
gustavatmel 1:9c5af431a1f1 108
gustavatmel 1:9c5af431a1f1 109 /* Check Receive Line Status Interrupt Flag */
gustavatmel 1:9c5af431a1f1 110 u32Tmp1 = (u32Mask & UUART_RLS_INT_MASK);
gustavatmel 1:9c5af431a1f1 111 u32Tmp2 = (uuart->PROTSTS & (UUART_PROTSTS_BREAK_Msk | UUART_PROTSTS_FRMERR_Msk | UUART_PROTSTS_PARITYERR_Msk));
gustavatmel 1:9c5af431a1f1 112 if(u32Tmp1 && u32Tmp2) {
gustavatmel 1:9c5af431a1f1 113 u32IntFlag |= UUART_RLS_INT_MASK;
gustavatmel 1:9c5af431a1f1 114 }
gustavatmel 1:9c5af431a1f1 115
gustavatmel 1:9c5af431a1f1 116 /* Check Receive Buffer Over-run Error Interrupt Flag */
gustavatmel 1:9c5af431a1f1 117 u32Tmp1 = (u32Mask & UUART_BUF_RXOV_INT_MASK);
gustavatmel 1:9c5af431a1f1 118 u32Tmp2 = (uuart->BUFSTS & UUART_BUFSTS_RXOVIF_Msk);
gustavatmel 1:9c5af431a1f1 119 if(u32Tmp1 && u32Tmp2) {
gustavatmel 1:9c5af431a1f1 120 u32IntFlag |= UUART_BUF_RXOV_INT_MASK;
gustavatmel 1:9c5af431a1f1 121 }
gustavatmel 1:9c5af431a1f1 122
gustavatmel 1:9c5af431a1f1 123 /* Check Transmit Start Interrupt Flag */
gustavatmel 1:9c5af431a1f1 124 u32Tmp1 = (u32Mask & UUART_TXST_INT_MASK);
gustavatmel 1:9c5af431a1f1 125 u32Tmp2 = (uuart->PROTSTS & UUART_PROTSTS_TXSTIF_Msk);
gustavatmel 1:9c5af431a1f1 126 if(u32Tmp1 && u32Tmp2) {
gustavatmel 1:9c5af431a1f1 127 u32IntFlag |= UUART_TXST_INT_MASK;
gustavatmel 1:9c5af431a1f1 128 }
gustavatmel 1:9c5af431a1f1 129
gustavatmel 1:9c5af431a1f1 130 /* Check Transmit End Interrupt Flag */
gustavatmel 1:9c5af431a1f1 131 u32Tmp1 = (u32Mask & UUART_TXEND_INT_MASK);
gustavatmel 1:9c5af431a1f1 132 u32Tmp2 = (uuart->PROTSTS & UUART_PROTSTS_TXENDIF_Msk);
gustavatmel 1:9c5af431a1f1 133 if(u32Tmp1 && u32Tmp2) {
gustavatmel 1:9c5af431a1f1 134 u32IntFlag |= UUART_TXEND_INT_MASK;
gustavatmel 1:9c5af431a1f1 135 }
gustavatmel 1:9c5af431a1f1 136
gustavatmel 1:9c5af431a1f1 137 /* Check Receive Start Interrupt Flag */
gustavatmel 1:9c5af431a1f1 138 u32Tmp1 = (u32Mask & UUART_RXST_INT_MASK);
gustavatmel 1:9c5af431a1f1 139 u32Tmp2 = (uuart->PROTSTS & UUART_PROTSTS_RXSTIF_Msk);
gustavatmel 1:9c5af431a1f1 140 if(u32Tmp1 && u32Tmp2) {
gustavatmel 1:9c5af431a1f1 141 u32IntFlag |= UUART_RXST_INT_MASK;
gustavatmel 1:9c5af431a1f1 142 }
gustavatmel 1:9c5af431a1f1 143
gustavatmel 1:9c5af431a1f1 144 /* Check Receive End Interrupt Flag */
gustavatmel 1:9c5af431a1f1 145 u32Tmp1 = (u32Mask & UUART_RXEND_INT_MASK);
gustavatmel 1:9c5af431a1f1 146 u32Tmp2 = (uuart->PROTSTS & UUART_PROTSTS_RXENDIF_Msk);
gustavatmel 1:9c5af431a1f1 147 if(u32Tmp1 && u32Tmp2) {
gustavatmel 1:9c5af431a1f1 148 u32IntFlag |= UUART_RXEND_INT_MASK;
gustavatmel 1:9c5af431a1f1 149 }
gustavatmel 1:9c5af431a1f1 150
gustavatmel 1:9c5af431a1f1 151 return u32IntFlag;
gustavatmel 1:9c5af431a1f1 152
gustavatmel 1:9c5af431a1f1 153 }
gustavatmel 1:9c5af431a1f1 154
gustavatmel 1:9c5af431a1f1 155
gustavatmel 1:9c5af431a1f1 156 /**
gustavatmel 1:9c5af431a1f1 157 * @brief Disable USCI_UART function mode
gustavatmel 1:9c5af431a1f1 158 *
gustavatmel 1:9c5af431a1f1 159 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 160 *
gustavatmel 1:9c5af431a1f1 161 * @return None
gustavatmel 1:9c5af431a1f1 162 *
gustavatmel 1:9c5af431a1f1 163 * @details The function is used to disable USCI_UART function mode.
gustavatmel 1:9c5af431a1f1 164 */
gustavatmel 1:9c5af431a1f1 165 void UUART_Close(UUART_T* uuart)
gustavatmel 1:9c5af431a1f1 166 {
gustavatmel 1:9c5af431a1f1 167 uuart->CTL = 0ul;
gustavatmel 1:9c5af431a1f1 168 }
gustavatmel 1:9c5af431a1f1 169
gustavatmel 1:9c5af431a1f1 170
gustavatmel 1:9c5af431a1f1 171 /**
gustavatmel 1:9c5af431a1f1 172 * @brief Disable interrupt function.
gustavatmel 1:9c5af431a1f1 173 *
gustavatmel 1:9c5af431a1f1 174 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 175 * @param[in] u32Mask The combination of all related interrupt enable bits.
gustavatmel 1:9c5af431a1f1 176 * Each bit corresponds to a interrupt enable bit.
gustavatmel 1:9c5af431a1f1 177 * This parameter decides which interrupts will be disabled. It is combination of:
gustavatmel 1:9c5af431a1f1 178 * - \ref UUART_ABR_INT_MASK
gustavatmel 1:9c5af431a1f1 179 * - \ref UUART_RLS_INT_MASK
gustavatmel 1:9c5af431a1f1 180 * - \ref UUART_BUF_RXOV_INT_MASK
gustavatmel 1:9c5af431a1f1 181 * - \ref UUART_TXST_INT_MASK
gustavatmel 1:9c5af431a1f1 182 * - \ref UUART_TXEND_INT_MASK
gustavatmel 1:9c5af431a1f1 183 * - \ref UUART_RXST_INT_MASK
gustavatmel 1:9c5af431a1f1 184 * - \ref UUART_RXEND_INT_MASK
gustavatmel 1:9c5af431a1f1 185 *
gustavatmel 1:9c5af431a1f1 186 * @return None
gustavatmel 1:9c5af431a1f1 187 *
gustavatmel 1:9c5af431a1f1 188 * @details The function is used to disabled USCI_UART related interrupts specified by u32Mask parameter.
gustavatmel 1:9c5af431a1f1 189 */
gustavatmel 1:9c5af431a1f1 190 void UUART_DisableInt(UUART_T* uuart, uint32_t u32Mask)
gustavatmel 1:9c5af431a1f1 191 {
gustavatmel 1:9c5af431a1f1 192
gustavatmel 1:9c5af431a1f1 193 /* Disable Auto-baud rate interrupt flag */
gustavatmel 1:9c5af431a1f1 194 if((u32Mask & UUART_ABR_INT_MASK) == UUART_ABR_INT_MASK) {
gustavatmel 1:9c5af431a1f1 195 uuart->PROTIEN &= ~UUART_PROTIEN_ABRIEN_Msk;
gustavatmel 1:9c5af431a1f1 196 }
gustavatmel 1:9c5af431a1f1 197
gustavatmel 1:9c5af431a1f1 198 /* Disable receive line status interrupt flag */
gustavatmel 1:9c5af431a1f1 199 if((u32Mask & UUART_RLS_INT_MASK) == UUART_RLS_INT_MASK) {
gustavatmel 1:9c5af431a1f1 200 uuart->PROTIEN &= ~UUART_PROTIEN_RLSIEN_Msk;
gustavatmel 1:9c5af431a1f1 201 }
gustavatmel 1:9c5af431a1f1 202
gustavatmel 1:9c5af431a1f1 203 /* Disable RX overrun interrupt flag */
gustavatmel 1:9c5af431a1f1 204 if((u32Mask & UUART_BUF_RXOV_INT_MASK) == UUART_BUF_RXOV_INT_MASK) {
gustavatmel 1:9c5af431a1f1 205 uuart->BUFCTL &= ~UUART_BUFCTL_RXOVIEN_Msk;
gustavatmel 1:9c5af431a1f1 206 }
gustavatmel 1:9c5af431a1f1 207
gustavatmel 1:9c5af431a1f1 208 /* Disable TX start interrupt flag */
gustavatmel 1:9c5af431a1f1 209 if((u32Mask & UUART_TXST_INT_MASK) == UUART_TXST_INT_MASK) {
gustavatmel 1:9c5af431a1f1 210 uuart->INTEN &= ~UUART_INTEN_TXSTIEN_Msk;
gustavatmel 1:9c5af431a1f1 211 }
gustavatmel 1:9c5af431a1f1 212
gustavatmel 1:9c5af431a1f1 213 /* Disable TX end interrupt flag */
gustavatmel 1:9c5af431a1f1 214 if((u32Mask & UUART_TXEND_INT_MASK) == UUART_TXEND_INT_MASK) {
gustavatmel 1:9c5af431a1f1 215 uuart->INTEN &= ~UUART_INTEN_TXENDIEN_Msk;
gustavatmel 1:9c5af431a1f1 216 }
gustavatmel 1:9c5af431a1f1 217
gustavatmel 1:9c5af431a1f1 218 /* Disable RX start interrupt flag */
gustavatmel 1:9c5af431a1f1 219 if((u32Mask & UUART_RXST_INT_MASK) == UUART_RXST_INT_MASK) {
gustavatmel 1:9c5af431a1f1 220 uuart->INTEN &= ~UUART_INTEN_RXSTIEN_Msk;
gustavatmel 1:9c5af431a1f1 221 }
gustavatmel 1:9c5af431a1f1 222
gustavatmel 1:9c5af431a1f1 223 /* Disable RX end interrupt flag */
gustavatmel 1:9c5af431a1f1 224 if((u32Mask & UUART_RXEND_INT_MASK) == UUART_RXEND_INT_MASK) {
gustavatmel 1:9c5af431a1f1 225 uuart->INTEN &= ~UUART_INTEN_RXENDIEN_Msk;
gustavatmel 1:9c5af431a1f1 226 }
gustavatmel 1:9c5af431a1f1 227 }
gustavatmel 1:9c5af431a1f1 228
gustavatmel 1:9c5af431a1f1 229
gustavatmel 1:9c5af431a1f1 230 /**
gustavatmel 1:9c5af431a1f1 231 * @brief Enable interrupt function.
gustavatmel 1:9c5af431a1f1 232 *
gustavatmel 1:9c5af431a1f1 233 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 234 * @param[in] u32Mask The combination of all related interrupt enable bits.
gustavatmel 1:9c5af431a1f1 235 * Each bit corresponds to a interrupt enable bit.
gustavatmel 1:9c5af431a1f1 236 * This parameter decides which interrupts will be enabled. It is combination of:
gustavatmel 1:9c5af431a1f1 237 * - \ref UUART_ABR_INT_MASK
gustavatmel 1:9c5af431a1f1 238 * - \ref UUART_RLS_INT_MASK
gustavatmel 1:9c5af431a1f1 239 * - \ref UUART_BUF_RXOV_INT_MASK
gustavatmel 1:9c5af431a1f1 240 * - \ref UUART_TXST_INT_MASK
gustavatmel 1:9c5af431a1f1 241 * - \ref UUART_TXEND_INT_MASK
gustavatmel 1:9c5af431a1f1 242 * - \ref UUART_RXST_INT_MASK
gustavatmel 1:9c5af431a1f1 243 * - \ref UUART_RXEND_INT_MASK
gustavatmel 1:9c5af431a1f1 244 *
gustavatmel 1:9c5af431a1f1 245 * @return None
gustavatmel 1:9c5af431a1f1 246 *
gustavatmel 1:9c5af431a1f1 247 * @details The function is used to enable USCI_UART related interrupts specified by u32Mask parameter.
gustavatmel 1:9c5af431a1f1 248 */
gustavatmel 1:9c5af431a1f1 249 void UUART_EnableInt(UUART_T* uuart, uint32_t u32Mask)
gustavatmel 1:9c5af431a1f1 250 {
gustavatmel 1:9c5af431a1f1 251 /* Enable Auto-baud rate interrupt flag */
gustavatmel 1:9c5af431a1f1 252 if((u32Mask & UUART_ABR_INT_MASK) == UUART_ABR_INT_MASK) {
gustavatmel 1:9c5af431a1f1 253 uuart->PROTIEN |= UUART_PROTIEN_ABRIEN_Msk;
gustavatmel 1:9c5af431a1f1 254 }
gustavatmel 1:9c5af431a1f1 255
gustavatmel 1:9c5af431a1f1 256 /* Enable receive line status interrupt flag */
gustavatmel 1:9c5af431a1f1 257 if((u32Mask & UUART_RLS_INT_MASK) == UUART_RLS_INT_MASK) {
gustavatmel 1:9c5af431a1f1 258 uuart->PROTIEN |= UUART_PROTIEN_RLSIEN_Msk;
gustavatmel 1:9c5af431a1f1 259 }
gustavatmel 1:9c5af431a1f1 260
gustavatmel 1:9c5af431a1f1 261 /* Enable RX overrun interrupt flag */
gustavatmel 1:9c5af431a1f1 262 if((u32Mask & UUART_BUF_RXOV_INT_MASK) == UUART_BUF_RXOV_INT_MASK) {
gustavatmel 1:9c5af431a1f1 263 uuart->BUFCTL |= UUART_BUFCTL_RXOVIEN_Msk;
gustavatmel 1:9c5af431a1f1 264 }
gustavatmel 1:9c5af431a1f1 265
gustavatmel 1:9c5af431a1f1 266 /* Enable TX start interrupt flag */
gustavatmel 1:9c5af431a1f1 267 if((u32Mask & UUART_TXST_INT_MASK) == UUART_TXST_INT_MASK) {
gustavatmel 1:9c5af431a1f1 268 uuart->INTEN |= UUART_INTEN_TXSTIEN_Msk;
gustavatmel 1:9c5af431a1f1 269 }
gustavatmel 1:9c5af431a1f1 270
gustavatmel 1:9c5af431a1f1 271 /* Enable TX end interrupt flag */
gustavatmel 1:9c5af431a1f1 272 if((u32Mask & UUART_TXEND_INT_MASK) == UUART_TXEND_INT_MASK) {
gustavatmel 1:9c5af431a1f1 273 uuart->INTEN |= UUART_INTEN_TXENDIEN_Msk;
gustavatmel 1:9c5af431a1f1 274 }
gustavatmel 1:9c5af431a1f1 275
gustavatmel 1:9c5af431a1f1 276 /* Enable RX start interrupt flag */
gustavatmel 1:9c5af431a1f1 277 if((u32Mask & UUART_RXST_INT_MASK) == UUART_RXST_INT_MASK) {
gustavatmel 1:9c5af431a1f1 278 uuart->INTEN |= UUART_INTEN_RXSTIEN_Msk;
gustavatmel 1:9c5af431a1f1 279 }
gustavatmel 1:9c5af431a1f1 280
gustavatmel 1:9c5af431a1f1 281 /* Enable RX end interrupt flag */
gustavatmel 1:9c5af431a1f1 282 if((u32Mask & UUART_RXEND_INT_MASK) == UUART_RXEND_INT_MASK) {
gustavatmel 1:9c5af431a1f1 283 uuart->INTEN |= UUART_INTEN_RXENDIEN_Msk;
gustavatmel 1:9c5af431a1f1 284 }
gustavatmel 1:9c5af431a1f1 285 }
gustavatmel 1:9c5af431a1f1 286
gustavatmel 1:9c5af431a1f1 287
gustavatmel 1:9c5af431a1f1 288 /**
gustavatmel 1:9c5af431a1f1 289 * @brief Open and set USCI_UART function
gustavatmel 1:9c5af431a1f1 290 *
gustavatmel 1:9c5af431a1f1 291 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 292 * @param[in] u32baudrate The baud rate of USCI_UART module.
gustavatmel 1:9c5af431a1f1 293 *
gustavatmel 1:9c5af431a1f1 294 * @return Real baud rate of USCI_UART module.
gustavatmel 1:9c5af431a1f1 295 *
gustavatmel 1:9c5af431a1f1 296 * @details This function use to enable USCI_UART function and set baud-rate.
gustavatmel 1:9c5af431a1f1 297 */
gustavatmel 1:9c5af431a1f1 298 uint32_t UUART_Open(UUART_T* uuart, uint32_t u32baudrate)
gustavatmel 1:9c5af431a1f1 299 {
gustavatmel 1:9c5af431a1f1 300 uint32_t u32PCLKFreq, u32PDSClk, u32PDSCnt, u32DSCnt, u32ClkDiv;
gustavatmel 1:9c5af431a1f1 301 uint32_t u32Tmp, u32Tmp2, u32Min, u32MinClkDiv, u32MinDSCnt;
gustavatmel 1:9c5af431a1f1 302
gustavatmel 1:9c5af431a1f1 303 /* Get PCLK frequency */
gustavatmel 1:9c5af431a1f1 304 if( uuart == UUART0) {
gustavatmel 1:9c5af431a1f1 305 u32PDSClk = u32PCLKFreq = CLK_GetPCLK0Freq();
gustavatmel 1:9c5af431a1f1 306 } else {
gustavatmel 1:9c5af431a1f1 307 u32PDSClk = u32PCLKFreq = CLK_GetPCLK1Freq();
gustavatmel 1:9c5af431a1f1 308 }
gustavatmel 1:9c5af431a1f1 309
gustavatmel 1:9c5af431a1f1 310 for(u32PDSCnt = 1ul; u32PDSCnt <= 0x04ul; u32PDSCnt++) { /* PDSCNT could be 0~0x3 */
gustavatmel 1:9c5af431a1f1 311 u32PDSClk = u32PCLKFreq / u32PDSCnt;
gustavatmel 1:9c5af431a1f1 312
gustavatmel 1:9c5af431a1f1 313 if(u32PDSClk > (80000000ul/4ul)) { /* max. PCLK freq = 80MHz */
gustavatmel 1:9c5af431a1f1 314 } else {
gustavatmel 1:9c5af431a1f1 315 break;
gustavatmel 1:9c5af431a1f1 316 }
gustavatmel 1:9c5af431a1f1 317 }
gustavatmel 1:9c5af431a1f1 318
gustavatmel 1:9c5af431a1f1 319 /* Find best solution */
gustavatmel 1:9c5af431a1f1 320 u32Min = (uint32_t) - 1;
gustavatmel 1:9c5af431a1f1 321 u32MinDSCnt = 0ul;
gustavatmel 1:9c5af431a1f1 322 u32MinClkDiv = 0ul;
gustavatmel 1:9c5af431a1f1 323 for(u32DSCnt = 6ul; u32DSCnt <= 0x10ul; u32DSCnt++) { /* DSCNT could be 0x5~0xF */
gustavatmel 1:9c5af431a1f1 324 for(u32ClkDiv = 1ul; u32ClkDiv <= 0x400ul; u32ClkDiv++) { /* CLKDIV could be 0~0x3FF */
gustavatmel 1:9c5af431a1f1 325
gustavatmel 1:9c5af431a1f1 326 u32Tmp = u32PDSClk / u32DSCnt / u32ClkDiv;
gustavatmel 1:9c5af431a1f1 327
gustavatmel 1:9c5af431a1f1 328 u32Tmp2 = (u32Tmp > u32baudrate) ? u32Tmp - u32baudrate : u32baudrate - u32Tmp;
gustavatmel 1:9c5af431a1f1 329
gustavatmel 1:9c5af431a1f1 330 if(u32Tmp2 < u32Min) {
gustavatmel 1:9c5af431a1f1 331 u32Min = u32Tmp2;
gustavatmel 1:9c5af431a1f1 332 u32MinDSCnt = u32DSCnt;
gustavatmel 1:9c5af431a1f1 333 u32MinClkDiv = u32ClkDiv;
gustavatmel 1:9c5af431a1f1 334
gustavatmel 1:9c5af431a1f1 335 /* Break when get good results */
gustavatmel 1:9c5af431a1f1 336 if(u32Min == 0ul) {
gustavatmel 1:9c5af431a1f1 337 break;
gustavatmel 1:9c5af431a1f1 338 }
gustavatmel 1:9c5af431a1f1 339 }
gustavatmel 1:9c5af431a1f1 340 }
gustavatmel 1:9c5af431a1f1 341 }
gustavatmel 1:9c5af431a1f1 342
gustavatmel 1:9c5af431a1f1 343 /* Enable USCI_UART protocol */
gustavatmel 1:9c5af431a1f1 344 uuart->CTL &= ~UUART_CTL_FUNMODE_Msk;
gustavatmel 1:9c5af431a1f1 345 uuart->CTL = 2ul << UUART_CTL_FUNMODE_Pos;
gustavatmel 1:9c5af431a1f1 346
gustavatmel 1:9c5af431a1f1 347 /* Set USCI_UART line configuration */
gustavatmel 1:9c5af431a1f1 348 uuart->LINECTL = UUART_WORD_LEN_8 | UUART_LINECTL_LSB_Msk;
gustavatmel 1:9c5af431a1f1 349 uuart->DATIN0 = (2ul << UUART_DATIN0_EDGEDET_Pos); /* Set falling edge detection */
gustavatmel 1:9c5af431a1f1 350
gustavatmel 1:9c5af431a1f1 351 /* Set USCI_UART baud rate */
gustavatmel 1:9c5af431a1f1 352 uuart->BRGEN = ((u32MinClkDiv-1ul) << UUART_BRGEN_CLKDIV_Pos) |
gustavatmel 1:9c5af431a1f1 353 ((u32MinDSCnt-1ul) << UUART_BRGEN_DSCNT_Pos) |
gustavatmel 1:9c5af431a1f1 354 ((u32PDSCnt-1ul) << UUART_BRGEN_PDSCNT_Pos);
gustavatmel 1:9c5af431a1f1 355
gustavatmel 1:9c5af431a1f1 356 uuart->PROTCTL |= UUART_PROTCTL_PROTEN_Msk;
gustavatmel 1:9c5af431a1f1 357
gustavatmel 1:9c5af431a1f1 358 return (u32PCLKFreq/u32PDSCnt/u32MinDSCnt/u32MinClkDiv);
gustavatmel 1:9c5af431a1f1 359 }
gustavatmel 1:9c5af431a1f1 360
gustavatmel 1:9c5af431a1f1 361
gustavatmel 1:9c5af431a1f1 362 /**
gustavatmel 1:9c5af431a1f1 363 * @brief Read USCI_UART data
gustavatmel 1:9c5af431a1f1 364 *
gustavatmel 1:9c5af431a1f1 365 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 366 * @param[in] pu8RxBuf The buffer to receive the data of receive buffer.
gustavatmel 1:9c5af431a1f1 367 * @param[in] u32ReadBytes The read bytes number of data.
gustavatmel 1:9c5af431a1f1 368 *
gustavatmel 1:9c5af431a1f1 369 * @return Receive byte count
gustavatmel 1:9c5af431a1f1 370 *
gustavatmel 1:9c5af431a1f1 371 * @details The function is used to read Rx data from RX buffer and the data will be stored in pu8RxBuf.
gustavatmel 1:9c5af431a1f1 372 */
gustavatmel 1:9c5af431a1f1 373 uint32_t UUART_Read(UUART_T* uuart, uint8_t pu8RxBuf[], uint32_t u32ReadBytes)
gustavatmel 1:9c5af431a1f1 374 {
gustavatmel 1:9c5af431a1f1 375 uint32_t u32Count, u32delayno;
gustavatmel 1:9c5af431a1f1 376
gustavatmel 1:9c5af431a1f1 377 for(u32Count = 0ul; u32Count < u32ReadBytes; u32Count++) {
gustavatmel 1:9c5af431a1f1 378 u32delayno = 0ul;
gustavatmel 1:9c5af431a1f1 379
gustavatmel 1:9c5af431a1f1 380 while(uuart->BUFSTS & UUART_BUFSTS_RXEMPTY_Msk) { /* Check RX empty => failed */
gustavatmel 1:9c5af431a1f1 381 u32delayno++;
gustavatmel 1:9c5af431a1f1 382 if(u32delayno >= 0x40000000ul) {
gustavatmel 1:9c5af431a1f1 383 break;
gustavatmel 1:9c5af431a1f1 384 }
gustavatmel 1:9c5af431a1f1 385 }
gustavatmel 1:9c5af431a1f1 386
gustavatmel 1:9c5af431a1f1 387 if(u32delayno >= 0x40000000ul) {
gustavatmel 1:9c5af431a1f1 388 break;
gustavatmel 1:9c5af431a1f1 389 }
gustavatmel 1:9c5af431a1f1 390
gustavatmel 1:9c5af431a1f1 391 pu8RxBuf[u32Count] = (uint8_t)uuart->RXDAT; /* Get Data from USCI RX */
gustavatmel 1:9c5af431a1f1 392 }
gustavatmel 1:9c5af431a1f1 393
gustavatmel 1:9c5af431a1f1 394 return u32Count;
gustavatmel 1:9c5af431a1f1 395
gustavatmel 1:9c5af431a1f1 396 }
gustavatmel 1:9c5af431a1f1 397
gustavatmel 1:9c5af431a1f1 398
gustavatmel 1:9c5af431a1f1 399 /**
gustavatmel 1:9c5af431a1f1 400 * @brief Set USCI_UART line configuration
gustavatmel 1:9c5af431a1f1 401 *
gustavatmel 1:9c5af431a1f1 402 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 403 * @param[in] u32baudrate The register value of baud rate of USCI_UART module.
gustavatmel 1:9c5af431a1f1 404 * If u32baudrate = 0, USCI_UART baud rate will not change.
gustavatmel 1:9c5af431a1f1 405 * @param[in] u32data_width The data length of USCI_UART module.
gustavatmel 1:9c5af431a1f1 406 * - \ref UUART_WORD_LEN_6
gustavatmel 1:9c5af431a1f1 407 * - \ref UUART_WORD_LEN_7
gustavatmel 1:9c5af431a1f1 408 * - \ref UUART_WORD_LEN_8
gustavatmel 1:9c5af431a1f1 409 * - \ref UUART_WORD_LEN_9
gustavatmel 1:9c5af431a1f1 410 * @param[in] u32parity The parity setting (none/odd/even) of USCI_UART module.
gustavatmel 1:9c5af431a1f1 411 * - \ref UUART_PARITY_NONE
gustavatmel 1:9c5af431a1f1 412 * - \ref UUART_PARITY_ODD
gustavatmel 1:9c5af431a1f1 413 * - \ref UUART_PARITY_EVEN
gustavatmel 1:9c5af431a1f1 414 * @param[in] u32stop_bits The stop bit length (1/2 bit) of USCI_UART module.
gustavatmel 1:9c5af431a1f1 415 * - \ref UUART_STOP_BIT_1
gustavatmel 1:9c5af431a1f1 416 * - \ref UUART_STOP_BIT_2
gustavatmel 1:9c5af431a1f1 417 *
gustavatmel 1:9c5af431a1f1 418 * @return Real baud rate of USCI_UART module.
gustavatmel 1:9c5af431a1f1 419 *
gustavatmel 1:9c5af431a1f1 420 * @details This function use to config USCI_UART line setting.
gustavatmel 1:9c5af431a1f1 421 */
gustavatmel 1:9c5af431a1f1 422 uint32_t UUART_SetLine_Config(UUART_T* uuart, uint32_t u32baudrate, uint32_t u32data_width, uint32_t u32parity, uint32_t u32stop_bits)
gustavatmel 1:9c5af431a1f1 423 {
gustavatmel 1:9c5af431a1f1 424 uint32_t u32PCLKFreq, u32PDSClk, u32PDSCnt, u32DSCnt, u32ClkDiv;
gustavatmel 1:9c5af431a1f1 425 uint32_t u32Tmp, u32Tmp2, u32Min, u32MinClkDiv, u32MinDSCnt;
gustavatmel 1:9c5af431a1f1 426
gustavatmel 1:9c5af431a1f1 427 /* Get PCLK frequency */
gustavatmel 1:9c5af431a1f1 428 if(uuart == UUART0) {
gustavatmel 1:9c5af431a1f1 429 u32PDSClk = u32PCLKFreq = CLK_GetPCLK0Freq();
gustavatmel 1:9c5af431a1f1 430 } else { /* UUART1 */
gustavatmel 1:9c5af431a1f1 431 u32PDSClk = u32PCLKFreq = CLK_GetPCLK1Freq();
gustavatmel 1:9c5af431a1f1 432 }
gustavatmel 1:9c5af431a1f1 433
gustavatmel 1:9c5af431a1f1 434 if(u32baudrate != 0ul) {
gustavatmel 1:9c5af431a1f1 435 for(u32PDSCnt = 1ul; u32PDSCnt <= 0x04ul; u32PDSCnt++) { /* PDSCNT could be 0~0x3 */
gustavatmel 1:9c5af431a1f1 436 u32PDSClk = u32PCLKFreq / u32PDSCnt;
gustavatmel 1:9c5af431a1f1 437
gustavatmel 1:9c5af431a1f1 438 if(u32PDSClk > (80000000ul/4ul)) { /* max. PCLK freq = 80MHz */
gustavatmel 1:9c5af431a1f1 439 } else {
gustavatmel 1:9c5af431a1f1 440 break;
gustavatmel 1:9c5af431a1f1 441 }
gustavatmel 1:9c5af431a1f1 442 }
gustavatmel 1:9c5af431a1f1 443
gustavatmel 1:9c5af431a1f1 444 /* Find best solution */
gustavatmel 1:9c5af431a1f1 445 u32Min = (uint32_t) - 1;
gustavatmel 1:9c5af431a1f1 446 u32MinDSCnt = 0ul;
gustavatmel 1:9c5af431a1f1 447 u32MinClkDiv = 0ul;
gustavatmel 1:9c5af431a1f1 448 for(u32DSCnt = 6ul; u32DSCnt <= 0x10ul; u32DSCnt++) { /* DSCNT could be 0x5~0xF */
gustavatmel 1:9c5af431a1f1 449 for(u32ClkDiv = 1ul; u32ClkDiv <= 0x400ul; u32ClkDiv++) { /* CLKDIV could be 0~0x3FF */
gustavatmel 1:9c5af431a1f1 450 u32Tmp = u32PDSClk / u32DSCnt / u32ClkDiv;
gustavatmel 1:9c5af431a1f1 451
gustavatmel 1:9c5af431a1f1 452 u32Tmp2 = (u32Tmp > u32baudrate) ? u32Tmp - u32baudrate : u32baudrate - u32Tmp;
gustavatmel 1:9c5af431a1f1 453
gustavatmel 1:9c5af431a1f1 454 if(u32Tmp2 < u32Min) {
gustavatmel 1:9c5af431a1f1 455 u32Min = u32Tmp2;
gustavatmel 1:9c5af431a1f1 456 u32MinDSCnt = u32DSCnt;
gustavatmel 1:9c5af431a1f1 457 u32MinClkDiv = u32ClkDiv;
gustavatmel 1:9c5af431a1f1 458
gustavatmel 1:9c5af431a1f1 459 /* Break when get good results */
gustavatmel 1:9c5af431a1f1 460 if(u32Min == 0ul) {
gustavatmel 1:9c5af431a1f1 461 break;
gustavatmel 1:9c5af431a1f1 462 }
gustavatmel 1:9c5af431a1f1 463 }
gustavatmel 1:9c5af431a1f1 464 }
gustavatmel 1:9c5af431a1f1 465 }
gustavatmel 1:9c5af431a1f1 466
gustavatmel 1:9c5af431a1f1 467 /* Set USCI_UART baud rate */
gustavatmel 1:9c5af431a1f1 468 uuart->BRGEN = ((u32MinClkDiv-1ul) << UUART_BRGEN_CLKDIV_Pos) |
gustavatmel 1:9c5af431a1f1 469 ((u32MinDSCnt-1ul) << UUART_BRGEN_DSCNT_Pos) |
gustavatmel 1:9c5af431a1f1 470 ((u32PDSCnt-1ul) << UUART_BRGEN_PDSCNT_Pos);
gustavatmel 1:9c5af431a1f1 471 } else {
gustavatmel 1:9c5af431a1f1 472 u32PDSCnt = ((uuart->BRGEN & UUART_BRGEN_PDSCNT_Msk) >> UUART_BRGEN_PDSCNT_Pos) + 1ul;
gustavatmel 1:9c5af431a1f1 473 u32MinDSCnt = ((uuart->BRGEN & UUART_BRGEN_DSCNT_Msk) >> UUART_BRGEN_DSCNT_Pos) + 1ul;
gustavatmel 1:9c5af431a1f1 474 u32MinClkDiv = ((uuart->BRGEN & UUART_BRGEN_CLKDIV_Msk) >> UUART_BRGEN_CLKDIV_Pos) + 1ul;
gustavatmel 1:9c5af431a1f1 475 }
gustavatmel 1:9c5af431a1f1 476
gustavatmel 1:9c5af431a1f1 477 /* Set USCI_UART line configuration */
gustavatmel 1:9c5af431a1f1 478 uuart->LINECTL = (uuart->LINECTL & ~UUART_LINECTL_DWIDTH_Msk) | u32data_width;
gustavatmel 1:9c5af431a1f1 479 uuart->PROTCTL = (uuart->PROTCTL & ~(UUART_PROTCTL_STICKEN_Msk | UUART_PROTCTL_EVENPARITY_Msk |
gustavatmel 1:9c5af431a1f1 480 UUART_PROTCTL_PARITYEN_Msk)) | u32parity;
gustavatmel 1:9c5af431a1f1 481 uuart->PROTCTL = (uuart->PROTCTL & ~UUART_PROTCTL_STOPB_Msk ) | u32stop_bits;
gustavatmel 1:9c5af431a1f1 482
gustavatmel 1:9c5af431a1f1 483 return (u32PCLKFreq/u32PDSCnt/u32MinDSCnt/u32MinClkDiv);
gustavatmel 1:9c5af431a1f1 484 }
gustavatmel 1:9c5af431a1f1 485
gustavatmel 1:9c5af431a1f1 486
gustavatmel 1:9c5af431a1f1 487 /**
gustavatmel 1:9c5af431a1f1 488 * @brief Write USCI_UART data
gustavatmel 1:9c5af431a1f1 489 *
gustavatmel 1:9c5af431a1f1 490 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 491 * @param[in] pu8TxBuf The buffer to send the data to USCI transmission buffer.
gustavatmel 1:9c5af431a1f1 492 * @param[out] u32WriteBytes The byte number of data.
gustavatmel 1:9c5af431a1f1 493 *
gustavatmel 1:9c5af431a1f1 494 * @return Transfer byte count
gustavatmel 1:9c5af431a1f1 495 *
gustavatmel 1:9c5af431a1f1 496 * @details The function is to write data into TX buffer to transmit data by USCI_UART.
gustavatmel 1:9c5af431a1f1 497 */
gustavatmel 1:9c5af431a1f1 498 uint32_t UUART_Write(UUART_T* uuart, uint8_t pu8TxBuf[], uint32_t u32WriteBytes)
gustavatmel 1:9c5af431a1f1 499 {
gustavatmel 1:9c5af431a1f1 500 uint32_t u32Count, u32delayno;
gustavatmel 1:9c5af431a1f1 501
gustavatmel 1:9c5af431a1f1 502 for(u32Count = 0ul; u32Count != u32WriteBytes; u32Count++) {
gustavatmel 1:9c5af431a1f1 503 u32delayno = 0ul;
gustavatmel 1:9c5af431a1f1 504 while((uuart->BUFSTS & UUART_BUFSTS_TXEMPTY_Msk) == 0ul) { /* Wait Tx empty */
gustavatmel 1:9c5af431a1f1 505 u32delayno++;
gustavatmel 1:9c5af431a1f1 506 if(u32delayno >= 0x40000000ul) {
gustavatmel 1:9c5af431a1f1 507 break;
gustavatmel 1:9c5af431a1f1 508 }
gustavatmel 1:9c5af431a1f1 509 }
gustavatmel 1:9c5af431a1f1 510
gustavatmel 1:9c5af431a1f1 511 if(u32delayno >= 0x40000000ul) {
gustavatmel 1:9c5af431a1f1 512 break;
gustavatmel 1:9c5af431a1f1 513 }
gustavatmel 1:9c5af431a1f1 514
gustavatmel 1:9c5af431a1f1 515 uuart->TXDAT = (uint8_t)pu8TxBuf[u32Count]; /* Send USCI_UART Data to buffer */
gustavatmel 1:9c5af431a1f1 516 }
gustavatmel 1:9c5af431a1f1 517
gustavatmel 1:9c5af431a1f1 518 return u32Count;
gustavatmel 1:9c5af431a1f1 519
gustavatmel 1:9c5af431a1f1 520 }
gustavatmel 1:9c5af431a1f1 521
gustavatmel 1:9c5af431a1f1 522
gustavatmel 1:9c5af431a1f1 523 /**
gustavatmel 1:9c5af431a1f1 524 * @brief Enable USCI_UART Wake-up Function
gustavatmel 1:9c5af431a1f1 525 *
gustavatmel 1:9c5af431a1f1 526 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 527 * @param[in] u32WakeupMode The wakeup mode of USCI_UART module.
gustavatmel 1:9c5af431a1f1 528 * - \ref UUART_PROTCTL_DATWKEN_Msk : Data wake-up Mode
gustavatmel 1:9c5af431a1f1 529 * - \ref UUART_PROTCTL_CTSWKEN_Msk : nCTS wake-up Mode
gustavatmel 1:9c5af431a1f1 530 *
gustavatmel 1:9c5af431a1f1 531 * @return None
gustavatmel 1:9c5af431a1f1 532 *
gustavatmel 1:9c5af431a1f1 533 * @details The function is used to enable Wake-up function of USCI_UART.
gustavatmel 1:9c5af431a1f1 534 */
gustavatmel 1:9c5af431a1f1 535 void UUART_EnableWakeup(UUART_T* uuart, uint32_t u32WakeupMode)
gustavatmel 1:9c5af431a1f1 536 {
gustavatmel 1:9c5af431a1f1 537 uuart->PROTCTL |= u32WakeupMode;
gustavatmel 1:9c5af431a1f1 538 uuart->WKCTL |= UUART_WKCTL_WKEN_Msk;
gustavatmel 1:9c5af431a1f1 539 }
gustavatmel 1:9c5af431a1f1 540
gustavatmel 1:9c5af431a1f1 541
gustavatmel 1:9c5af431a1f1 542 /**
gustavatmel 1:9c5af431a1f1 543 * @brief Disable USCI_UART Wake-up Function
gustavatmel 1:9c5af431a1f1 544 *
gustavatmel 1:9c5af431a1f1 545 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 546 *
gustavatmel 1:9c5af431a1f1 547 * @return None
gustavatmel 1:9c5af431a1f1 548 *
gustavatmel 1:9c5af431a1f1 549 * @details The function is used to disable Wake-up function of USCI_UART.
gustavatmel 1:9c5af431a1f1 550 */
gustavatmel 1:9c5af431a1f1 551 void UUART_DisableWakeup(UUART_T* uuart)
gustavatmel 1:9c5af431a1f1 552 {
gustavatmel 1:9c5af431a1f1 553 uuart->PROTCTL &= ~(UUART_PROTCTL_DATWKEN_Msk|UUART_PROTCTL_CTSWKEN_Msk);
gustavatmel 1:9c5af431a1f1 554 uuart->WKCTL &= ~UUART_WKCTL_WKEN_Msk;
gustavatmel 1:9c5af431a1f1 555 }
gustavatmel 1:9c5af431a1f1 556
gustavatmel 1:9c5af431a1f1 557 /**
gustavatmel 1:9c5af431a1f1 558 * @brief Enable USCI_UART auto flow control
gustavatmel 1:9c5af431a1f1 559 *
gustavatmel 1:9c5af431a1f1 560 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 561 *
gustavatmel 1:9c5af431a1f1 562 * @return None
gustavatmel 1:9c5af431a1f1 563 *
gustavatmel 1:9c5af431a1f1 564 * @details The function is used to enable USCI_UART auto flow control.
gustavatmel 1:9c5af431a1f1 565 */
gustavatmel 1:9c5af431a1f1 566 void UUART_EnableFlowCtrl(UUART_T* uuart)
gustavatmel 1:9c5af431a1f1 567 {
gustavatmel 1:9c5af431a1f1 568 /* Set RTS signal is low level active */
gustavatmel 1:9c5af431a1f1 569 uuart->LINECTL &= ~UUART_LINECTL_CTLOINV_Msk;
gustavatmel 1:9c5af431a1f1 570
gustavatmel 1:9c5af431a1f1 571 /* Set CTS signal is low level active */
gustavatmel 1:9c5af431a1f1 572 uuart->CTLIN0 &= ~UUART_CTLIN0_ININV_Msk;
gustavatmel 1:9c5af431a1f1 573
gustavatmel 1:9c5af431a1f1 574 /* Enable CTS and RTS auto flow control function */
gustavatmel 1:9c5af431a1f1 575 uuart->PROTCTL |= UUART_PROTCTL_RTSAUTOEN_Msk|UUART_PROTCTL_CTSAUTOEN_Msk;
gustavatmel 1:9c5af431a1f1 576 }
gustavatmel 1:9c5af431a1f1 577
gustavatmel 1:9c5af431a1f1 578 /**
gustavatmel 1:9c5af431a1f1 579 * @brief Disable USCI_UART auto flow control
gustavatmel 1:9c5af431a1f1 580 *
gustavatmel 1:9c5af431a1f1 581 * @param[in] uuart The pointer of the specified USCI_UART module.
gustavatmel 1:9c5af431a1f1 582 *
gustavatmel 1:9c5af431a1f1 583 * @return None
gustavatmel 1:9c5af431a1f1 584 *
gustavatmel 1:9c5af431a1f1 585 * @details The function is used to disable USCI_UART auto flow control.
gustavatmel 1:9c5af431a1f1 586 */
gustavatmel 1:9c5af431a1f1 587 void UUART_DisableFlowCtrl(UUART_T* uuart)
gustavatmel 1:9c5af431a1f1 588 {
gustavatmel 1:9c5af431a1f1 589 /* Disable CTS and RTS auto flow control function */
gustavatmel 1:9c5af431a1f1 590 uuart->PROTCTL &= ~(UUART_PROTCTL_RTSAUTOEN_Msk|UUART_PROTCTL_CTSAUTOEN_Msk);
gustavatmel 1:9c5af431a1f1 591 }
gustavatmel 1:9c5af431a1f1 592
gustavatmel 1:9c5af431a1f1 593
gustavatmel 1:9c5af431a1f1 594
gustavatmel 1:9c5af431a1f1 595
gustavatmel 1:9c5af431a1f1 596 /*@}*/ /* end of group M480_USCI_UART_EXPORTED_FUNCTIONS */
gustavatmel 1:9c5af431a1f1 597
gustavatmel 1:9c5af431a1f1 598 /*@}*/ /* end of group M480_USCI_UART_Driver */
gustavatmel 1:9c5af431a1f1 599
gustavatmel 1:9c5af431a1f1 600 /*@}*/ /* end of group M480_Device_Driver */
gustavatmel 1:9c5af431a1f1 601
gustavatmel 1:9c5af431a1f1 602 /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/
gustavatmel 1:9c5af431a1f1 603