1# Core Library
2
3## Overview
4
5The Core Library provides basic types and utilities that can be used between different devices. This allows different libraries to share common items between themselves to avoid reimplementation and promote consistency.
6
7## Features
8
9* Common result type (`cy_rslt_t` and `cy_rslt_decode_t`) for reporting errors or status
10* Common utility MACROs for
11    * `CY_ASSERT`: Verifies a value and halts if invalid (if not NDEBUG)
12    * `CY_HALT`: Halts the application
13    * `CY_UNUSED_PARAMETER`: Avoid warnings if a function argument isn't used
14    * `CY_LO8`: Gets the lower 8 bits of a 16-bit value
15    * `CY_HI8`: Gets the upper 8 bits of a 16-bit value
16    * `CY_LO16`: Gets the lower 16 bits of a 32-bit value
17    * `CY_HI16`: Gets the upper 16 bits of a 32-bit value
18    * `CY_SWAP_ENDIAN16`: Swaps the byte ordering of a 16-bit value
19    * `CY_SWAP_ENDIAN32`: Swaps the byte ordering of a 32-bit value
20    * `CY_SWAP_ENDIAN64`: Swaps the byte ordering of a 64-bit value
21    * `CY_GET_REG8`: Reads the 8-bit value from the specified address
22    * `CY_SET_REG8`: Writes an 8-bit value to the specified address
23    * `CY_GET_REG16`: Reads the 16-bit value from the specified address
24    * `CY_SET_REG16`: Writes the 16-bit value to the specified address
25    * `CY_GET_REG24`:  Reads the 24-bit value from the specified address
26    * `CY_SET_REG24`: Writes the 24-bit value to the specified address
27    * `CY_GET_REG32`: Reads the 32-bit value from the specified register
28    * `CY_SET_REG32`: Writes the 32-bit value to the specified register
29    * `_CLR_SET_FLD32U`:  The macro for setting a register with a name field and value for providing get-clear-modify-write operations
30    * `CY_REG32_CLR_SET`: Uses _CLR_SET_FLD32U macro for providing get-clear-modify-write operations with a name field and value and writes a resulting value to the 32-bit register
31    * `_CLR_SET_FLD16U`: The macro for setting a 16-bit register with a name field and value for providing get-clear-modify-write operations
32    * `CY_REG16_CLR_SET`: Uses _CLR_SET_FLD16U macro for providing get-clear-modify-write operations with a name field and value and writes a resulting value to the 16-bit register
33    * `_CLR_SET_FLD8U`: The macro for setting a 8-bit register with a name field and value for providing get-clear-modify-write operations
34    * `CY_REG8_CLR_SET`: Uses _CLR_SET_FLD8U macro for providing get-clear-modify-write operations with a name field and value and writes a resulting value to the 8-bit register
35    * `_BOOL2FLD`: Returns a field mask if the value is not false
36    * `_FLD2BOOL`: Returns true, if the value includes the field mask
37    * `CY_SYSLIB_DIV_ROUND`: Calculates a / b with rounding to the nearest integer, a and b must have the same sign.
38    * `CY_SYSLIB_DIV_ROUNDUP`: Calculates a / b with rounding up if remainder != 0, both a and b must be positive.
39* MACROs to create cross compiler compatible code. Use the CY_NOINIT, CY_SECTION, CY_UNUSED, CY_ALIGN attributes at the first place of declaration/definition. For example: CY_NOINIT uint32_t noinitVar;
40    * `CY_NOINIT`
41    * `CY_SECTION`
42    * `CY_UNUSED`
43    * `CY_NOINLINE`
44    * `CY_ALIGN`
45    * `CY_RAMFUNC_BEGIN`
46    * `CY_RAMFUNC_END`
47
48## More information
49* [API Reference Guide](https://infineon.github.io/core-lib/html/modules.html)
50* [Cypress Semiconductor, an Infineon Technologies Company](http://www.cypress.com)
51* [Infineon GitHub](https://github.com/infineon)
52* [ModusToolbox™](https://www.cypress.com/products/modustoolbox-software-environment)
53
54---
55© Cypress Semiconductor Corporation (an Infineon company) or an affiliate of Cypress Semiconductor Corporation, 2019-2021.
56