1 /*********************************************************************************************************//** 2 * @file ht32f5xxxx_usart.h 3 * @version $Rev:: 7107 $ 4 * @date $Date:: 2023-08-08 #$ 5 * @brief The header file of the USART library. 6 ************************************************************************************************************* 7 * @attention 8 * 9 * Firmware Disclaimer Information 10 * 11 * 1. The customer hereby acknowledges and agrees that the program technical documentation, including the 12 * code, which is supplied by Holtek Semiconductor Inc., (hereinafter referred to as "HOLTEK") is the 13 * proprietary and confidential intellectual property of HOLTEK, and is protected by copyright law and 14 * other intellectual property laws. 15 * 16 * 2. The customer hereby acknowledges and agrees that the program technical documentation, including the 17 * code, is confidential information belonging to HOLTEK, and must not be disclosed to any third parties 18 * other than HOLTEK and the customer. 19 * 20 * 3. The program technical documentation, including the code, is provided "as is" and for customer reference 21 * only. After delivery by HOLTEK, the customer shall use the program technical documentation, including 22 * the code, at their own risk. HOLTEK disclaims any expressed, implied or statutory warranties, including 23 * the warranties of merchantability, satisfactory quality and fitness for a particular purpose. 24 * 25 * <h2><center>Copyright (C) Holtek Semiconductor Inc. All rights reserved</center></h2> 26 ************************************************************************************************************/ 27 28 /* Define to prevent recursive inclusion -------------------------------------------------------------------*/ 29 #ifndef __HT32F5XXXX_USART_H 30 #define __HT32F5XXXX_USART_H 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 /* Includes ------------------------------------------------------------------------------------------------*/ 37 #include "ht32.h" 38 39 /** @addtogroup HT32F5xxxx_Peripheral_Driver HT32F5xxxx Peripheral Driver 40 * @{ 41 */ 42 43 /** @addtogroup USART 44 * @{ 45 */ 46 47 48 /* Exported types ------------------------------------------------------------------------------------------*/ 49 /** @defgroup USART_Exported_Types USART exported types 50 * @{ 51 */ 52 /* Definition of USART Init Structure ---------------------------------------------------------------------*/ 53 typedef struct 54 { 55 u32 USART_BaudRate; 56 u16 USART_WordLength; 57 u16 USART_StopBits; 58 u16 USART_Parity; 59 u32 USART_Mode; 60 } USART_InitTypeDef; 61 62 typedef struct 63 { 64 u16 USART_ClockEnable; 65 u16 USART_ClockPhase; 66 u16 USART_ClockPolarity; 67 u16 USART_TransferSelectMode; 68 } USART_SynClock_InitTypeDef; 69 /** 70 * @} 71 */ 72 73 /* Exported constants --------------------------------------------------------------------------------------*/ 74 /** @defgroup USART_Exported_Constants USART exported constants 75 * @{ 76 */ 77 78 #define USART_CMD_TX (0) 79 #define USART_CMD_RX (1) 80 81 #define USART_CMD_OUT (0) 82 #define USART_CMD_IN (1) 83 84 /* USART Word Length ---------------------------------------------------------------------------------------*/ 85 /** @defgroup USART_Word_Length Definitions of USART word length 86 * @{ 87 */ 88 #define USART_WORDLENGTH_7B ((u32)0x00000000) 89 #define USART_WORDLENGTH_8B ((u32)0x00000100) 90 #define USART_WORDLENGTH_9B ((u32)0x00000200) 91 92 #define IS_USART_WORD_LENGTH(LENGTH) ((LENGTH == USART_WORDLENGTH_9B) || \ 93 (LENGTH == USART_WORDLENGTH_8B) || \ 94 (LENGTH == USART_WORDLENGTH_7B)) 95 /** 96 * @} 97 */ 98 99 /* USART Stop Bits -----------------------------------------------------------------------------------------*/ 100 /** @defgroup USART_Stop_Bit Definitions of USART stop bit 101 * @{ 102 */ 103 #define USART_STOPBITS_1 ((u32)0x00000000) 104 #define USART_STOPBITS_2 ((u32)0x00000400) 105 106 107 #define IS_USART_STOPBITS(STOPBITS) ((STOPBITS == USART_STOPBITS_1) || \ 108 (STOPBITS == USART_STOPBITS_2)) 109 /** 110 * @} 111 */ 112 113 /* USART Parity --------------------------------------------------------------------------------------------*/ 114 /** @defgroup USART_Parity Definitions of USART parity 115 * @{ 116 */ 117 #define USART_PARITY_NO ((u32)0x00000000) 118 #define USART_PARITY_EVEN ((u32)0x00001800) 119 #define USART_PARITY_ODD ((u32)0x00000800) 120 #define USART_PARITY_MARK ((u32)0x00002800) 121 #define USART_PARITY_SPACE ((u32)0x00003800) 122 123 #define IS_USART_PARITY(PARITY) ((PARITY == USART_PARITY_NO) || \ 124 (PARITY == USART_PARITY_EVEN) || \ 125 (PARITY == USART_PARITY_ODD)) 126 /** 127 * @} 128 */ 129 130 /* USART Mode ----------------------------------------------------------------------------------------------*/ 131 /** @defgroup USART_Mode Definitions of USART mode 132 * @{ 133 */ 134 #define USART_MODE_NORMAL ((u32)0x00000000) 135 #define USART_MODE_IRDA ((u32)0x00000001) 136 #define USART_MODE_RS485 ((u32)0x00000002) 137 #define USART_MODE_SYNCHRONOUS ((u32)0x00000003) 138 #if (LIBCFG_USART_LIN) 139 #define USART_MODE_LIN ((u32)0x00010000) 140 #define IS_MODE_LIN(x) (x == USART_MODE_LIN) 141 #else 142 #define IS_MODE_LIN(x) (0) 143 #endif 144 #if (LIBCFG_USART_SINGLE_WIRE) 145 #define USART_MODE_SINGLE_WIRE ((u32)0x00010001) 146 #define IS_MODE_SINGLE_WIRE(x) (x == USART_MODE_SINGLE_WIRE) 147 #else 148 #define IS_MODE_SINGLE_WIRE(x) (0) 149 #endif 150 #define IS_USART_MODE(MODE) ((MODE == USART_MODE_NORMAL) || \ 151 (MODE == USART_MODE_IRDA) || \ 152 (MODE == USART_MODE_RS485) || \ 153 (MODE == USART_MODE_SYNCHRONOUS) || \ 154 IS_MODE_LIN(MODE) || \ 155 IS_MODE_SINGLE_WIRE(MODE)) 156 /** 157 * @} 158 */ 159 160 /* USART Transfer Select Mode ------------------------------------------------------------------------------*/ 161 /** @defgroup USART_LSB Definitions of USART LSB 162 * @{ 163 */ 164 #define USART_LSB_FIRST ((u32)0x00000000) 165 #define USART_MSB_FIRST ((u32)0x00000004) 166 167 #define IS_USART_TRANSFER_MODE(TMODE) ((TMODE == USART_LSB_FIRST) || \ 168 (TMODE == USART_MSB_FIRST)) 169 /** 170 * @} 171 */ 172 173 174 /* USART Synchronous Clock ---------------------------------------------------------------------------------*/ 175 /** @defgroup USART_Synchronous_Clock Definitions of USART synchronous clock 176 * @{ 177 */ 178 #define USART_SYN_CLOCK_DISABLE ((u32)0x00000000) 179 #define USART_SYN_CLOCK_ENABLE ((u32)0x00000001) 180 181 #define IS_USART_SYNCHRONOUS_CLOCK(SYNCLOCK) ((SYNCLOCK == USART_SYN_CLOCK_DISABLE) || \ 182 (SYNCLOCK == USART_SYN_CLOCK_ENABLE)) 183 /** 184 * @} 185 */ 186 187 /* USART Synchronous Clock Phase ---------------------------------------------------------------------------*/ 188 /** @defgroup USART_Synchronous_Clock_Phase Definitions of USART Synchronous clock phase 189 * @{ 190 */ 191 #define USART_SYN_CLOCK_PHASE_FIRST ((u32)0x00000000) 192 #define USART_SYN_CLOCK_PHASE_SECOND ((u32)0x00000004) 193 194 #define IS_USART_SYNCHRONOUS_PHASE(PHASE) ((PHASE == USART_SYN_CLOCK_PHASE_FIRST) || \ 195 (PHASE == USART_SYN_CLOCK_PHASE_SECOND)) 196 /** 197 * @} 198 */ 199 200 /* USART Clock Polarity ------------------------------------------------------------------------------------*/ 201 /** @defgroup USART_Clock_Polarity Definitions of USART clock polarity 202 * @{ 203 */ 204 #define USART_SYN_CLOCK_POLARITY_LOW ((u32)0x00000000) 205 #define USART_SYN_CLOCK_POLARITY_HIGH ((u32)0x00000008) 206 207 #define IS_USART_SYNCHRONOUS_POLARITY(POLARITY) ((POLARITY == USART_SYN_CLOCK_POLARITY_LOW) || \ 208 (POLARITY == USART_SYN_CLOCK_POLARITY_HIGH)) 209 /** 210 * @} 211 */ 212 213 /* USART IrDA ---------------------------------------------------------------------------------------------*/ 214 /** @defgroup USART_IrDA Definitions of USART IrDA 215 * @{ 216 */ 217 #define USART_IRDA_LOWPOWER ((u32)0x00000002) 218 #define USART_IRDA_NORMAL ((u32)0xFFFFFFFD) 219 220 #define IS_USART_IRDA_MODE(MODE) ((MODE == USART_IRDA_LOWPOWER) || \ 221 (MODE == USART_IRDA_NORMAL)) 222 223 #define USART_IRDA_TX ((u32)0x00000004) 224 #define USART_IRDA_RX ((u32)0xFFFFFFFB) 225 226 #define IS_USART_IRDA_DIRECTION(DIRECTION) ((DIRECTION == USART_IRDA_TX) || \ 227 (DIRECTION == USART_IRDA_RX)) 228 /** 229 * @} 230 */ 231 232 #define IS_USART_TL(x) (IS_USART_RXTL(x) || IS_USART_TXTL(x)) 233 234 /* USART Rx FIFO Interrupt Trigger Level -------------------------------------------------------------------*/ 235 /** @defgroup USART_RX_FIFO_Trigger_Level Definitions of USART Rx FIFO interrupts 236 * @{ 237 */ 238 #define USART_RXTL_01 ((u32)0x00000000) 239 #define USART_RXTL_02 ((u32)0x00000010) 240 #define USART_RXTL_04 ((u32)0x00000020) 241 #define USART_RXTL_06 ((u32)0x00000030) 242 243 #define IS_USART_RXTL(RXTL) ((RXTL == USART_RXTL_01) || \ 244 (RXTL == USART_RXTL_02) || \ 245 (RXTL == USART_RXTL_04) || \ 246 (RXTL == USART_RXTL_06)) 247 /** 248 * @} 249 */ 250 251 /* USART Tx FIFO Interrupt Trigger Level -------------------------------------------------------------------*/ 252 /** @defgroup USART_TX_FIFO_Trigger_Level Definitions of USART Tx FIFO interrupts 253 * @{ 254 */ 255 #define USART_TXTL_00 ((u32)0x00000000) 256 #define USART_TXTL_02 ((u32)0x00000010) 257 #define USART_TXTL_04 ((u32)0x00000020) 258 #define USART_TXTL_06 ((u32)0x00000030) 259 260 #define IS_USART_TXTL(TXTL) ((TXTL == USART_TXTL_00) || \ 261 (TXTL == USART_TXTL_02) || \ 262 (TXTL == USART_TXTL_04) || \ 263 (TXTL == USART_TXTL_06)) 264 /** 265 * @} 266 */ 267 268 /* USART Interrupt definition ------------------------------------------------------------------------------*/ 269 /** @defgroup USART_Interrupt_Enable Definitions of USART interrupt Enable bits 270 * @{ 271 */ 272 #define USART_INT_RXDR ((u32)0x00000001) 273 #define USART_INT_TXDE ((u32)0x00000002) 274 #define USART_INT_TXC ((u32)0x00000004) 275 #define USART_INT_OE ((u32)0x00000008) 276 #define USART_INT_PE ((u32)0x00000010) 277 #define USART_INT_FE ((u32)0x00000020) 278 #define USART_INT_BI ((u32)0x00000040) 279 #define USART_INT_RSADD ((u32)0x00000080) 280 #define USART_INT_TOUT ((u32)0x00000100) 281 #define USART_INT_CTS ((u32)0x00000200) 282 #if (LIBCFG_USART_LIN) 283 #define USART_INT_LBD ((u32)0x00000400) 284 #endif 285 286 #if (LIBCFG_USART_LIN) 287 #define IS_USART_INT(INT) ((((INT) & 0xFFFFF800) == 0) && ((INT) != 0)) 288 #else 289 #define IS_USART_INT(INT) ((((INT) & 0xFFFFFC00) == 0) && ((INT) != 0)) 290 #endif 291 /** 292 * @} 293 */ 294 295 /* USART Flags ---------------------------------------------------------------------------------------------*/ 296 /** @defgroup USART_Flag Definitions of USART flags 297 * @{ 298 */ 299 #define USART_FLAG_RXDNE ((u32)0x00000001) 300 #define USART_FLAG_OE ((u32)0x00000002) 301 #define USART_FLAG_PE ((u32)0x00000004) 302 #define USART_FLAG_FE ((u32)0x00000008) 303 #define USART_FLAG_BI ((u32)0x00000010) 304 #define USART_FLAG_RXDR ((u32)0x00000020) 305 #define USART_FLAG_TOUT ((u32)0x00000040) 306 #define USART_FLAG_TXDE ((u32)0x00000080) 307 #define USART_FLAG_TXC ((u32)0x00000100) 308 #define USART_FLAG_RSADD ((u32)0x00000200) 309 #define USART_FLAG_CTSC ((u32)0x00000400) 310 #define USART_FLAG_CTSS ((u32)0x00000800) 311 #if (LIBCFG_USART_LIN) 312 #define USART_FLAG_LBD ((u32)0x00001000) 313 #define IS_FLAG_LBD(x) (x == USART_FLAG_LBD) 314 #else 315 #define IS_FLAG_LBD(x) (0) 316 #endif 317 318 #define IS_USART_FLAG(FLAG) ((FLAG == USART_FLAG_RXDNE) || (FLAG == USART_FLAG_OE) || \ 319 (FLAG == USART_FLAG_PE) || (FLAG == USART_FLAG_FE) || \ 320 (FLAG == USART_FLAG_BI) || (FLAG == USART_FLAG_RXDR) || \ 321 (FLAG == USART_FLAG_TOUT) || (FLAG == USART_FLAG_TXDE) || \ 322 (FLAG == USART_FLAG_TXC) || (FLAG == USART_FLAG_RSADD) || \ 323 (FLAG == USART_FLAG_CTSC) || (FLAG == USART_FLAG_CTSS) || \ 324 IS_FLAG_LBD(FLAG)) 325 326 #define IS_USART_CLEAR_FLAG(FLAG) ((FLAG == USART_FLAG_OE) || (FLAG == USART_FLAG_PE) || \ 327 (FLAG == USART_FLAG_FE) || (FLAG == USART_FLAG_BI) || \ 328 (FLAG == USART_FLAG_TOUT) || (FLAG == USART_FLAG_RSADD) || \ 329 (FLAG == USART_FLAG_CTSC) || IS_FLAG_LBD(FLAG)) 330 /** 331 * @} 332 */ 333 334 /* USART RS485 definition ----------------------------------------------------------------------------------*/ 335 /** @defgroup USART_RS485 Definitions of USART RS485 336 * @{ 337 */ 338 #define USART_RS485POLARITY_LOW ((u32)0x00000001) 339 #define USART_RS485POLARITY_HIGH ((u32)0xFFFFFFFE) 340 341 #define IS_USART_RS485_POLARITY(POLARITY) ((POLARITY == USART_RS485POLARITY_LOW) || \ 342 (POLARITY == USART_RS485POLARITY_HIGH)) 343 /** 344 * @} 345 */ 346 347 /* USART LIN definition -----------------------------------------------------------------------------------*/ 348 /** @defgroup USART_LIN Definitions of USART LIN 349 * @{ 350 */ 351 #if (LIBCFG_USART_LIN) 352 #define USART_LINSENDBREAK ((u32)0x00020000) 353 354 #define USART_LINLENGTH_10BIT ((u32)0xFFFBFFFF) 355 #define USART_LINLENGTH_11BIT ((u32)0x00040000) 356 357 #define IS_USART_LINLENGTH(LENGTH) ((LENGTH == USART_LINLENGTH_10BIT) || \ 358 (LENGTH == USART_LINLENGTH_11BIT)) 359 #endif 360 /** 361 * @} 362 */ 363 364 #define USART_FIFO_TX ((u32)0x00000001) 365 #define USART_FIFO_RX ((u32)0x00000002) 366 367 #define IS_USART_FIFO_DIRECTION(DIRECTION) ((DIRECTION == USART_FIFO_TX) || \ 368 (DIRECTION == USART_FIFO_RX)) 369 370 #define USART_STICK_LOW ((u32)0x00001000) 371 #define USART_STICK_HIGH ((u32)0xFFFFEFFF) 372 373 #define IS_USART_STICK_PARITY(PARITY) ((PARITY == USART_STICK_LOW) || (PARITY == USART_STICK_HIGH)) 374 375 #if (LIBCFG_PDMA) 376 #define USART_PDMAREQ_TX ((u32)0x00000040) 377 #define USART_PDMAREQ_RX ((u32)0x00000080) 378 379 #define IS_USART_PDMA_REQ(REQ) (((REQ & 0xFFFFFF3F) == 0x0) && (REQ != 0x0)) 380 #endif 381 382 #define IS_USART(x) (IS_USART0(x) || \ 383 IS_USART1(x) || \ 384 IS_UART0(x) || \ 385 IS_UART1(x) || \ 386 IS_UART2(x) || \ 387 IS_UART3(x)) 388 #if (LIBCFG_NO_USART0) 389 #define IS_USART0(x) (0) 390 #else 391 #define IS_USART0(x) (x == HT_USART0) 392 #endif 393 #define IS_UART0(x) (x == HT_UART0) 394 #if (LIBCFG_USART1) 395 #define IS_USART1(x) (x == HT_USART1) 396 #else 397 #define IS_USART1(x) (0) 398 #endif 399 #if (LIBCFG_UART1) 400 #define IS_UART1(x) (x == HT_UART1) 401 #else 402 #define IS_UART1(x) (0) 403 #endif 404 #if (LIBCFG_UART2) 405 #define IS_UART2(x) (x == HT_UART2) 406 #else 407 #define IS_UART2(x) (0) 408 #endif 409 #if (LIBCFG_UART3) 410 #define IS_UART3(x) (x == HT_UART3) 411 #else 412 #define IS_UART3(x) (0) 413 #endif 414 #define IS_USART_BAUDRATE(BAUDRATE) ((BAUDRATE > 0) && (BAUDRATE < 0x0044AA21)) 415 #define IS_USART_DATA(DATA) (DATA <= 0x1FF) 416 #define IS_USART_GUARD_TIME(TIME) (TIME <= 0xFF) 417 #define IS_USART_IRDA_PRESCALER(PRESCALER) (PRESCALER <= 0xFF) 418 #define IS_USART_TIMEOUT(TIMEOUT) (TIMEOUT <= 0x7F) 419 #define IS_USART_ADDRESS_MATCH_VALUE(VALUE) (VALUE <= 0xFF) 420 /** 421 * @} 422 */ 423 424 /* Exported functions --------------------------------------------------------------------------------------*/ 425 /** @defgroup USART_Exported_Functions USART exported functions 426 * @{ 427 */ 428 #define USART_TxCmd(USARTx, NewState) USART_TxRxCmd(USARTx, USART_CMD_TX, NewState) 429 #define USART_RxCmd(USARTx, NewState) USART_TxRxCmd(USARTx, USART_CMD_RX, NewState) 430 431 #define USART_TxPDMACmd(USARTx, NewState) USART_PDMACmd(USARTx, USART_PDMAREQ_TX, NewState) 432 #define USART_RxPDMACmd(USARTx, NewState) USART_PDMACmd(USARTx, USART_PDMAREQ_RX, NewState) 433 434 #define USART_RXTLConfig(USARTx, USART_tl) USART_TXRXTLConfig(USARTx, USART_CMD_RX, USART_tl) 435 #define USART_TXTLConfig(USARTx, USART_tl) USART_TXRXTLConfig(USARTx, USART_CMD_TX, USART_tl) 436 437 #define USART_IrDAInvtOutputCmd(USARTx, NewState) USART_IrDAInvtCmd(USARTx, USART_CMD_OUT, NewState) 438 #define USART_IrDAInvtInputCmd(USARTx, NewState) USART_IrDAInvtCmd(USARTx, USART_CMD_IN, NewState) 439 440 void USART_DeInit(HT_USART_TypeDef* USARTx); 441 void USART_Init(HT_USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStructure); 442 void USART_StructInit(USART_InitTypeDef* USART_InitStructure); 443 void USART_SendData(HT_USART_TypeDef* USARTx, u16 Data); 444 u16 USART_ReceiveData(HT_USART_TypeDef* USARTx); 445 FlagStatus USART_GetFlagStatus(HT_USART_TypeDef* USARTx, u32 USART_FLAG_x); 446 FlagStatus USART_GetIntStatus(HT_USART_TypeDef* USARTx, u32 USART_FLAG_x); 447 void USART_ClearFlag(HT_USART_TypeDef* USARTx, u32 USART_Flag); 448 void USART_IntConfig(HT_USART_TypeDef* USARTx, u32 USART_INT_x, ControlStatus NewState); 449 void USART_TxRxCmd(HT_USART_TypeDef* USARTx,u32 TxRx, ControlStatus NewState); 450 #if (LIBCFG_PDMA) 451 void USART_PDMACmd(HT_USART_TypeDef* USARTx, u32 USART_PDMAREQ, ControlStatus NewState); 452 #endif 453 void USART_ForceBreakCmd(HT_USART_TypeDef* USARTx, ControlStatus NewState); 454 void USART_StickParityCmd(HT_USART_TypeDef* USARTx, ControlStatus NewState); 455 void USART_StickParityConfig(HT_USART_TypeDef* USARTx, u32 USART_StickParity); 456 457 void USART_SetGuardTime(HT_USART_TypeDef* USARTx, u32 USART_GuardTime); 458 void USART_TXRXTLConfig(HT_USART_TypeDef* USARTx, u32 TxRx, u32 USART_tl); 459 void USART_SetTimeOutValue(HT_USART_TypeDef* USARTx, u32 USART_TimeOut); 460 void USART_FIFOReset(HT_USART_TypeDef* USARTx, u32 USART_FIFODirection); 461 u8 USART_GetFIFOStatus(HT_USART_TypeDef* USARTx, u32 USART_FIFODirection); 462 void USART_HardwareFlowControlCmd(HT_USART_TypeDef* USARTx, ControlStatus NewState); 463 464 void USART_IrDACmd(HT_USART_TypeDef* USARTx, ControlStatus NewState); 465 void USART_IrDAConfig(HT_USART_TypeDef* USARTx, u32 USART_IrDAMode); 466 void USART_SetIrDAPrescaler(HT_USART_TypeDef* USARTx, u32 USART_IrDAPrescaler); 467 void USART_IrDADirectionConfig(HT_USART_TypeDef* USARTx, u32 USART_IrDADirection); 468 void USART_IrDAInvtCmd(HT_USART_TypeDef* USARTx, u32 inout, ControlStatus NewState); 469 470 void USART_RS485TxEnablePolarityConfig(HT_USART_TypeDef* USARTx, u32 USART_RS485Polarity); 471 void USART_RS485NMMCmd(HT_USART_TypeDef* USARTx, ControlStatus NewState); 472 void USART_RS485AADCmd(HT_USART_TypeDef* USARTx, ControlStatus NewState); 473 void USART_SetAddressMatchValue(HT_USART_TypeDef* USARTx, u32 USART_AddressMatchValue); 474 475 void USART_SynClockInit(HT_USART_TypeDef* USARTx, USART_SynClock_InitTypeDef* USART_SynClock_InitStruct); 476 void USART_SynClockStructInit(USART_SynClock_InitTypeDef* USART_SynClock_InitStruct); 477 478 #if (LIBCFG_USART_LIN) 479 void USART_LIN_SendBreak(HT_USART_TypeDef* USARTx); 480 void USART_LIN_LengthSelect(HT_USART_TypeDef* USARTx, u32 USART_LIN_Length); 481 #endif 482 /** 483 * @} 484 */ 485 486 487 /** 488 * @} 489 */ 490 491 /** 492 * @} 493 */ 494 495 #ifdef __cplusplus 496 } 497 #endif 498 499 #endif 500