added prescaler for 16 bit pwm in LPC1347 target
Fork of mbed-dev by
targets/hal/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_K66F/drivers/fsl_crc.c@144:ef7eb2e8f9f7, 2016-09-02 (annotated)
- Committer:
- <>
- Date:
- Fri Sep 02 15:07:44 2016 +0100
- Revision:
- 144:ef7eb2e8f9f7
This updates the lib to the mbed lib v125
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
<> | 144:ef7eb2e8f9f7 | 1 | /* |
<> | 144:ef7eb2e8f9f7 | 2 | * Copyright (c) 2015, Freescale Semiconductor, Inc. |
<> | 144:ef7eb2e8f9f7 | 3 | * All rights reserved. |
<> | 144:ef7eb2e8f9f7 | 4 | * |
<> | 144:ef7eb2e8f9f7 | 5 | * Redistribution and use in source and binary forms, with or without modification, |
<> | 144:ef7eb2e8f9f7 | 6 | * are permitted provided that the following conditions are met: |
<> | 144:ef7eb2e8f9f7 | 7 | * |
<> | 144:ef7eb2e8f9f7 | 8 | * o Redistributions of source code must retain the above copyright notice, this list |
<> | 144:ef7eb2e8f9f7 | 9 | * of conditions and the following disclaimer. |
<> | 144:ef7eb2e8f9f7 | 10 | * |
<> | 144:ef7eb2e8f9f7 | 11 | * o Redistributions in binary form must reproduce the above copyright notice, this |
<> | 144:ef7eb2e8f9f7 | 12 | * list of conditions and the following disclaimer in the documentation and/or |
<> | 144:ef7eb2e8f9f7 | 13 | * other materials provided with the distribution. |
<> | 144:ef7eb2e8f9f7 | 14 | * |
<> | 144:ef7eb2e8f9f7 | 15 | * o Neither the name of Freescale Semiconductor, Inc. nor the names of its |
<> | 144:ef7eb2e8f9f7 | 16 | * contributors may be used to endorse or promote products derived from this |
<> | 144:ef7eb2e8f9f7 | 17 | * software without specific prior written permission. |
<> | 144:ef7eb2e8f9f7 | 18 | * |
<> | 144:ef7eb2e8f9f7 | 19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
<> | 144:ef7eb2e8f9f7 | 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
<> | 144:ef7eb2e8f9f7 | 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
<> | 144:ef7eb2e8f9f7 | 22 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
<> | 144:ef7eb2e8f9f7 | 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
<> | 144:ef7eb2e8f9f7 | 24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
<> | 144:ef7eb2e8f9f7 | 25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
<> | 144:ef7eb2e8f9f7 | 26 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
<> | 144:ef7eb2e8f9f7 | 27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
<> | 144:ef7eb2e8f9f7 | 28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
<> | 144:ef7eb2e8f9f7 | 29 | */ |
<> | 144:ef7eb2e8f9f7 | 30 | #include "fsl_crc.h" |
<> | 144:ef7eb2e8f9f7 | 31 | |
<> | 144:ef7eb2e8f9f7 | 32 | /******************************************************************************* |
<> | 144:ef7eb2e8f9f7 | 33 | * Definitions |
<> | 144:ef7eb2e8f9f7 | 34 | ******************************************************************************/ |
<> | 144:ef7eb2e8f9f7 | 35 | |
<> | 144:ef7eb2e8f9f7 | 36 | #if defined(CRC_DRIVER_USE_CRC16_CCIT_FALSE_AS_DEFAULT) && CRC_DRIVER_USE_CRC16_CCIT_FALSE_AS_DEFAULT |
<> | 144:ef7eb2e8f9f7 | 37 | /* @brief Default user configuration structure for CRC-16-CCITT */ |
<> | 144:ef7eb2e8f9f7 | 38 | #define CRC_DRIVER_DEFAULT_POLYNOMIAL 0x1021U |
<> | 144:ef7eb2e8f9f7 | 39 | /*< CRC-16-CCIT polynomial x**16 + x**12 + x**5 + x**0 */ |
<> | 144:ef7eb2e8f9f7 | 40 | #define CRC_DRIVER_DEFAULT_SEED 0xFFFFU |
<> | 144:ef7eb2e8f9f7 | 41 | /*< Default initial checksum */ |
<> | 144:ef7eb2e8f9f7 | 42 | #define CRC_DRIVER_DEFAULT_REFLECT_IN false |
<> | 144:ef7eb2e8f9f7 | 43 | /*< Default is no transpose */ |
<> | 144:ef7eb2e8f9f7 | 44 | #define CRC_DRIVER_DEFAULT_REFLECT_OUT false |
<> | 144:ef7eb2e8f9f7 | 45 | /*< Default is transpose bytes */ |
<> | 144:ef7eb2e8f9f7 | 46 | #define CRC_DRIVER_DEFAULT_COMPLEMENT_CHECKSUM false |
<> | 144:ef7eb2e8f9f7 | 47 | /*< Default is without complement of CRC data register read data */ |
<> | 144:ef7eb2e8f9f7 | 48 | #define CRC_DRIVER_DEFAULT_CRC_BITS kCrcBits16 |
<> | 144:ef7eb2e8f9f7 | 49 | /*< Default is 16-bit CRC protocol */ |
<> | 144:ef7eb2e8f9f7 | 50 | #define CRC_DRIVER_DEFAULT_CRC_RESULT kCrcFinalChecksum |
<> | 144:ef7eb2e8f9f7 | 51 | /*< Default is resutl type is final checksum */ |
<> | 144:ef7eb2e8f9f7 | 52 | #endif /* CRC_DRIVER_USE_CRC16_CCIT_FALSE_AS_DEFAULT */ |
<> | 144:ef7eb2e8f9f7 | 53 | |
<> | 144:ef7eb2e8f9f7 | 54 | /*! @brief CRC type of transpose of read write data */ |
<> | 144:ef7eb2e8f9f7 | 55 | typedef enum _crc_transpose_type |
<> | 144:ef7eb2e8f9f7 | 56 | { |
<> | 144:ef7eb2e8f9f7 | 57 | kCrcTransposeNone = 0U, /*! No transpose */ |
<> | 144:ef7eb2e8f9f7 | 58 | kCrcTransposeBits = 1U, /*! Tranpose bits in bytes */ |
<> | 144:ef7eb2e8f9f7 | 59 | kCrcTransposeBitsAndBytes = 2U, /*! Transpose bytes and bits in bytes */ |
<> | 144:ef7eb2e8f9f7 | 60 | kCrcTransposeBytes = 3U, /*! Transpose bytes */ |
<> | 144:ef7eb2e8f9f7 | 61 | } crc_transpose_type_t; |
<> | 144:ef7eb2e8f9f7 | 62 | |
<> | 144:ef7eb2e8f9f7 | 63 | /*! |
<> | 144:ef7eb2e8f9f7 | 64 | * @brief CRC module configuration. |
<> | 144:ef7eb2e8f9f7 | 65 | * |
<> | 144:ef7eb2e8f9f7 | 66 | * This structure holds the configuration for the CRC module. |
<> | 144:ef7eb2e8f9f7 | 67 | */ |
<> | 144:ef7eb2e8f9f7 | 68 | typedef struct _crc_module_config |
<> | 144:ef7eb2e8f9f7 | 69 | { |
<> | 144:ef7eb2e8f9f7 | 70 | uint32_t polynomial; /*!< CRC Polynomial, MSBit first.@n |
<> | 144:ef7eb2e8f9f7 | 71 | Example polynomial: 0x1021 = 1_0000_0010_0001 = x^12+x^5+1 */ |
<> | 144:ef7eb2e8f9f7 | 72 | uint32_t seed; /*!< Starting checksum value */ |
<> | 144:ef7eb2e8f9f7 | 73 | crc_transpose_type_t readTranspose; /*!< Type of transpose when reading CRC result. */ |
<> | 144:ef7eb2e8f9f7 | 74 | crc_transpose_type_t writeTranspose; /*!< Type of transpose when writing CRC input data. */ |
<> | 144:ef7eb2e8f9f7 | 75 | bool complementChecksum; /*!< True if the result shall be complement of the actual checksum. */ |
<> | 144:ef7eb2e8f9f7 | 76 | crc_bits_t crcBits; /*!< Selects 16- or 32- bit CRC protocol. */ |
<> | 144:ef7eb2e8f9f7 | 77 | } crc_module_config_t; |
<> | 144:ef7eb2e8f9f7 | 78 | |
<> | 144:ef7eb2e8f9f7 | 79 | /******************************************************************************* |
<> | 144:ef7eb2e8f9f7 | 80 | * Code |
<> | 144:ef7eb2e8f9f7 | 81 | ******************************************************************************/ |
<> | 144:ef7eb2e8f9f7 | 82 | |
<> | 144:ef7eb2e8f9f7 | 83 | /*! |
<> | 144:ef7eb2e8f9f7 | 84 | * @brief Returns transpose type for CRC protocol reflect in parameter. |
<> | 144:ef7eb2e8f9f7 | 85 | * |
<> | 144:ef7eb2e8f9f7 | 86 | * This functions helps to set writeTranspose member of crc_config_t structure. Reflect in is CRC protocol parameter. |
<> | 144:ef7eb2e8f9f7 | 87 | * |
<> | 144:ef7eb2e8f9f7 | 88 | * @param enable True or false for the selected CRC protocol Reflect In (refin) parameter. |
<> | 144:ef7eb2e8f9f7 | 89 | */ |
<> | 144:ef7eb2e8f9f7 | 90 | static inline crc_transpose_type_t crc_GetTransposeTypeFromReflectIn(bool enable) |
<> | 144:ef7eb2e8f9f7 | 91 | { |
<> | 144:ef7eb2e8f9f7 | 92 | return ((enable) ? kCrcTransposeBitsAndBytes : kCrcTransposeBytes); |
<> | 144:ef7eb2e8f9f7 | 93 | } |
<> | 144:ef7eb2e8f9f7 | 94 | |
<> | 144:ef7eb2e8f9f7 | 95 | /*! |
<> | 144:ef7eb2e8f9f7 | 96 | * @brief Returns transpose type for CRC protocol reflect out parameter. |
<> | 144:ef7eb2e8f9f7 | 97 | * |
<> | 144:ef7eb2e8f9f7 | 98 | * This functions helps to set readTranspose member of crc_config_t structure. Reflect out is CRC protocol parameter. |
<> | 144:ef7eb2e8f9f7 | 99 | * |
<> | 144:ef7eb2e8f9f7 | 100 | * @param enable True or false for the selected CRC protocol Reflect Out (refout) parameter. |
<> | 144:ef7eb2e8f9f7 | 101 | */ |
<> | 144:ef7eb2e8f9f7 | 102 | static inline crc_transpose_type_t crc_GetTransposeTypeFromReflectOut(bool enable) |
<> | 144:ef7eb2e8f9f7 | 103 | { |
<> | 144:ef7eb2e8f9f7 | 104 | return ((enable) ? kCrcTransposeBitsAndBytes : kCrcTransposeNone); |
<> | 144:ef7eb2e8f9f7 | 105 | } |
<> | 144:ef7eb2e8f9f7 | 106 | |
<> | 144:ef7eb2e8f9f7 | 107 | /*! |
<> | 144:ef7eb2e8f9f7 | 108 | * @brief Starts checksum computation. |
<> | 144:ef7eb2e8f9f7 | 109 | * |
<> | 144:ef7eb2e8f9f7 | 110 | * Configures the CRC module for the specified CRC protocol. @n |
<> | 144:ef7eb2e8f9f7 | 111 | * Starts the checksum computation by writing the seed value |
<> | 144:ef7eb2e8f9f7 | 112 | * |
<> | 144:ef7eb2e8f9f7 | 113 | * @param base CRC peripheral address. |
<> | 144:ef7eb2e8f9f7 | 114 | * @param config Pointer to protocol configuration structure. |
<> | 144:ef7eb2e8f9f7 | 115 | */ |
<> | 144:ef7eb2e8f9f7 | 116 | static void crc_ConfigureAndStart(CRC_Type *base, const crc_module_config_t *config) |
<> | 144:ef7eb2e8f9f7 | 117 | { |
<> | 144:ef7eb2e8f9f7 | 118 | uint32_t crcControl; |
<> | 144:ef7eb2e8f9f7 | 119 | |
<> | 144:ef7eb2e8f9f7 | 120 | /* pre-compute value for CRC control registger based on user configuraton without WAS field */ |
<> | 144:ef7eb2e8f9f7 | 121 | crcControl = 0 | CRC_CTRL_TOT(config->writeTranspose) | CRC_CTRL_TOTR(config->readTranspose) | |
<> | 144:ef7eb2e8f9f7 | 122 | CRC_CTRL_FXOR(config->complementChecksum) | CRC_CTRL_TCRC(config->crcBits); |
<> | 144:ef7eb2e8f9f7 | 123 | |
<> | 144:ef7eb2e8f9f7 | 124 | /* make sure the control register is clear - WAS is deasserted, and protocol is set */ |
<> | 144:ef7eb2e8f9f7 | 125 | base->CTRL = crcControl; |
<> | 144:ef7eb2e8f9f7 | 126 | |
<> | 144:ef7eb2e8f9f7 | 127 | /* write polynomial register */ |
<> | 144:ef7eb2e8f9f7 | 128 | base->GPOLY = config->polynomial; |
<> | 144:ef7eb2e8f9f7 | 129 | |
<> | 144:ef7eb2e8f9f7 | 130 | /* write pre-computed control register value along with WAS to start checksum computation */ |
<> | 144:ef7eb2e8f9f7 | 131 | base->CTRL = crcControl | CRC_CTRL_WAS(true); |
<> | 144:ef7eb2e8f9f7 | 132 | |
<> | 144:ef7eb2e8f9f7 | 133 | /* write seed (initial checksum) */ |
<> | 144:ef7eb2e8f9f7 | 134 | base->DATA = config->seed; |
<> | 144:ef7eb2e8f9f7 | 135 | |
<> | 144:ef7eb2e8f9f7 | 136 | /* deassert WAS by writing pre-computed CRC control register value */ |
<> | 144:ef7eb2e8f9f7 | 137 | base->CTRL = crcControl; |
<> | 144:ef7eb2e8f9f7 | 138 | } |
<> | 144:ef7eb2e8f9f7 | 139 | |
<> | 144:ef7eb2e8f9f7 | 140 | /*! |
<> | 144:ef7eb2e8f9f7 | 141 | * @brief Starts final checksum computation. |
<> | 144:ef7eb2e8f9f7 | 142 | * |
<> | 144:ef7eb2e8f9f7 | 143 | * Configures the CRC module for the specified CRC protocol. @n |
<> | 144:ef7eb2e8f9f7 | 144 | * Starts final checksum computation by writing the seed value. |
<> | 144:ef7eb2e8f9f7 | 145 | * @note CRC_Get16bitResult() or CRC_Get32bitResult() return final checksum |
<> | 144:ef7eb2e8f9f7 | 146 | * (output reflection and xor functions are applied). |
<> | 144:ef7eb2e8f9f7 | 147 | * |
<> | 144:ef7eb2e8f9f7 | 148 | * @param base CRC peripheral address. |
<> | 144:ef7eb2e8f9f7 | 149 | * @param protocolConfig Pointer to protocol configuration structure. |
<> | 144:ef7eb2e8f9f7 | 150 | */ |
<> | 144:ef7eb2e8f9f7 | 151 | static void crc_SetProtocolConfig(CRC_Type *base, const crc_config_t *protocolConfig) |
<> | 144:ef7eb2e8f9f7 | 152 | { |
<> | 144:ef7eb2e8f9f7 | 153 | crc_module_config_t moduleConfig; |
<> | 144:ef7eb2e8f9f7 | 154 | /* convert protocol to CRC peripheral module configuration, prepare for final checksum */ |
<> | 144:ef7eb2e8f9f7 | 155 | moduleConfig.polynomial = protocolConfig->polynomial; |
<> | 144:ef7eb2e8f9f7 | 156 | moduleConfig.seed = protocolConfig->seed; |
<> | 144:ef7eb2e8f9f7 | 157 | moduleConfig.readTranspose = crc_GetTransposeTypeFromReflectOut(protocolConfig->reflectOut); |
<> | 144:ef7eb2e8f9f7 | 158 | moduleConfig.writeTranspose = crc_GetTransposeTypeFromReflectIn(protocolConfig->reflectIn); |
<> | 144:ef7eb2e8f9f7 | 159 | moduleConfig.complementChecksum = protocolConfig->complementChecksum; |
<> | 144:ef7eb2e8f9f7 | 160 | moduleConfig.crcBits = protocolConfig->crcBits; |
<> | 144:ef7eb2e8f9f7 | 161 | |
<> | 144:ef7eb2e8f9f7 | 162 | crc_ConfigureAndStart(base, &moduleConfig); |
<> | 144:ef7eb2e8f9f7 | 163 | } |
<> | 144:ef7eb2e8f9f7 | 164 | |
<> | 144:ef7eb2e8f9f7 | 165 | /*! |
<> | 144:ef7eb2e8f9f7 | 166 | * @brief Starts intermediate checksum computation. |
<> | 144:ef7eb2e8f9f7 | 167 | * |
<> | 144:ef7eb2e8f9f7 | 168 | * Configures the CRC module for the specified CRC protocol. @n |
<> | 144:ef7eb2e8f9f7 | 169 | * Starts intermediate checksum computation by writing the seed value. |
<> | 144:ef7eb2e8f9f7 | 170 | * @note CRC_Get16bitResult() or CRC_Get32bitResult() return intermediate checksum (raw data register value). |
<> | 144:ef7eb2e8f9f7 | 171 | * |
<> | 144:ef7eb2e8f9f7 | 172 | * @param base CRC peripheral address. |
<> | 144:ef7eb2e8f9f7 | 173 | * @param protocolConfig Pointer to protocol configuration structure. |
<> | 144:ef7eb2e8f9f7 | 174 | */ |
<> | 144:ef7eb2e8f9f7 | 175 | static void crc_SetRawProtocolConfig(CRC_Type *base, const crc_config_t *protocolConfig) |
<> | 144:ef7eb2e8f9f7 | 176 | { |
<> | 144:ef7eb2e8f9f7 | 177 | crc_module_config_t moduleConfig; |
<> | 144:ef7eb2e8f9f7 | 178 | /* convert protocol to CRC peripheral module configuration, prepare for intermediate checksum */ |
<> | 144:ef7eb2e8f9f7 | 179 | moduleConfig.polynomial = protocolConfig->polynomial; |
<> | 144:ef7eb2e8f9f7 | 180 | moduleConfig.seed = protocolConfig->seed; |
<> | 144:ef7eb2e8f9f7 | 181 | moduleConfig.readTranspose = |
<> | 144:ef7eb2e8f9f7 | 182 | kCrcTransposeNone; /* intermediate checksum does no transpose of data register read value */ |
<> | 144:ef7eb2e8f9f7 | 183 | moduleConfig.writeTranspose = crc_GetTransposeTypeFromReflectIn(protocolConfig->reflectIn); |
<> | 144:ef7eb2e8f9f7 | 184 | moduleConfig.complementChecksum = false; /* intermediate checksum does no xor of data register read value */ |
<> | 144:ef7eb2e8f9f7 | 185 | moduleConfig.crcBits = protocolConfig->crcBits; |
<> | 144:ef7eb2e8f9f7 | 186 | |
<> | 144:ef7eb2e8f9f7 | 187 | crc_ConfigureAndStart(base, &moduleConfig); |
<> | 144:ef7eb2e8f9f7 | 188 | } |
<> | 144:ef7eb2e8f9f7 | 189 | |
<> | 144:ef7eb2e8f9f7 | 190 | void CRC_Init(CRC_Type *base, const crc_config_t *config) |
<> | 144:ef7eb2e8f9f7 | 191 | { |
<> | 144:ef7eb2e8f9f7 | 192 | /* ungate clock */ |
<> | 144:ef7eb2e8f9f7 | 193 | CLOCK_EnableClock(kCLOCK_Crc0); |
<> | 144:ef7eb2e8f9f7 | 194 | /* configure CRC module and write the seed */ |
<> | 144:ef7eb2e8f9f7 | 195 | if (config->crcResult == kCrcFinalChecksum) |
<> | 144:ef7eb2e8f9f7 | 196 | { |
<> | 144:ef7eb2e8f9f7 | 197 | crc_SetProtocolConfig(base, config); |
<> | 144:ef7eb2e8f9f7 | 198 | } |
<> | 144:ef7eb2e8f9f7 | 199 | else |
<> | 144:ef7eb2e8f9f7 | 200 | { |
<> | 144:ef7eb2e8f9f7 | 201 | crc_SetRawProtocolConfig(base, config); |
<> | 144:ef7eb2e8f9f7 | 202 | } |
<> | 144:ef7eb2e8f9f7 | 203 | } |
<> | 144:ef7eb2e8f9f7 | 204 | |
<> | 144:ef7eb2e8f9f7 | 205 | void CRC_GetDefaultConfig(crc_config_t *config) |
<> | 144:ef7eb2e8f9f7 | 206 | { |
<> | 144:ef7eb2e8f9f7 | 207 | static const crc_config_t crc16ccit = { |
<> | 144:ef7eb2e8f9f7 | 208 | CRC_DRIVER_DEFAULT_POLYNOMIAL, CRC_DRIVER_DEFAULT_SEED, |
<> | 144:ef7eb2e8f9f7 | 209 | CRC_DRIVER_DEFAULT_REFLECT_IN, CRC_DRIVER_DEFAULT_REFLECT_OUT, |
<> | 144:ef7eb2e8f9f7 | 210 | CRC_DRIVER_DEFAULT_COMPLEMENT_CHECKSUM, CRC_DRIVER_DEFAULT_CRC_BITS, |
<> | 144:ef7eb2e8f9f7 | 211 | CRC_DRIVER_DEFAULT_CRC_RESULT, |
<> | 144:ef7eb2e8f9f7 | 212 | }; |
<> | 144:ef7eb2e8f9f7 | 213 | |
<> | 144:ef7eb2e8f9f7 | 214 | *config = crc16ccit; |
<> | 144:ef7eb2e8f9f7 | 215 | } |
<> | 144:ef7eb2e8f9f7 | 216 | |
<> | 144:ef7eb2e8f9f7 | 217 | void CRC_WriteData(CRC_Type *base, const uint8_t *data, size_t dataSize) |
<> | 144:ef7eb2e8f9f7 | 218 | { |
<> | 144:ef7eb2e8f9f7 | 219 | const uint32_t *data32; |
<> | 144:ef7eb2e8f9f7 | 220 | |
<> | 144:ef7eb2e8f9f7 | 221 | /* 8-bit reads and writes till source address is aligned 4 bytes */ |
<> | 144:ef7eb2e8f9f7 | 222 | while ((dataSize) && ((uint32_t)data & 3U)) |
<> | 144:ef7eb2e8f9f7 | 223 | { |
<> | 144:ef7eb2e8f9f7 | 224 | base->ACCESS8BIT.DATALL = *data; |
<> | 144:ef7eb2e8f9f7 | 225 | data++; |
<> | 144:ef7eb2e8f9f7 | 226 | dataSize--; |
<> | 144:ef7eb2e8f9f7 | 227 | } |
<> | 144:ef7eb2e8f9f7 | 228 | |
<> | 144:ef7eb2e8f9f7 | 229 | /* use 32-bit reads and writes as long as possible */ |
<> | 144:ef7eb2e8f9f7 | 230 | data32 = (const uint32_t *)data; |
<> | 144:ef7eb2e8f9f7 | 231 | while (dataSize >= sizeof(uint32_t)) |
<> | 144:ef7eb2e8f9f7 | 232 | { |
<> | 144:ef7eb2e8f9f7 | 233 | base->DATA = *data32; |
<> | 144:ef7eb2e8f9f7 | 234 | data32++; |
<> | 144:ef7eb2e8f9f7 | 235 | dataSize -= sizeof(uint32_t); |
<> | 144:ef7eb2e8f9f7 | 236 | } |
<> | 144:ef7eb2e8f9f7 | 237 | |
<> | 144:ef7eb2e8f9f7 | 238 | data = (const uint8_t *)data32; |
<> | 144:ef7eb2e8f9f7 | 239 | |
<> | 144:ef7eb2e8f9f7 | 240 | /* 8-bit reads and writes till end of data buffer */ |
<> | 144:ef7eb2e8f9f7 | 241 | while (dataSize) |
<> | 144:ef7eb2e8f9f7 | 242 | { |
<> | 144:ef7eb2e8f9f7 | 243 | base->ACCESS8BIT.DATALL = *data; |
<> | 144:ef7eb2e8f9f7 | 244 | data++; |
<> | 144:ef7eb2e8f9f7 | 245 | dataSize--; |
<> | 144:ef7eb2e8f9f7 | 246 | } |
<> | 144:ef7eb2e8f9f7 | 247 | } |
<> | 144:ef7eb2e8f9f7 | 248 | |
<> | 144:ef7eb2e8f9f7 | 249 | uint16_t CRC_Get16bitResult(CRC_Type *base) |
<> | 144:ef7eb2e8f9f7 | 250 | { |
<> | 144:ef7eb2e8f9f7 | 251 | uint32_t retval; |
<> | 144:ef7eb2e8f9f7 | 252 | uint32_t totr; /* type of transpose read bitfield */ |
<> | 144:ef7eb2e8f9f7 | 253 | |
<> | 144:ef7eb2e8f9f7 | 254 | retval = base->DATA; |
<> | 144:ef7eb2e8f9f7 | 255 | totr = (base->CTRL & CRC_CTRL_TOTR_MASK) >> CRC_CTRL_TOTR_SHIFT; |
<> | 144:ef7eb2e8f9f7 | 256 | |
<> | 144:ef7eb2e8f9f7 | 257 | /* check transpose type to get 16-bit out of 32-bit register */ |
<> | 144:ef7eb2e8f9f7 | 258 | if (totr >= 2U) |
<> | 144:ef7eb2e8f9f7 | 259 | { |
<> | 144:ef7eb2e8f9f7 | 260 | /* transpose of bytes for read is set, the result CRC is in CRC_DATA[HU:HL] */ |
<> | 144:ef7eb2e8f9f7 | 261 | retval &= 0xFFFF0000U; |
<> | 144:ef7eb2e8f9f7 | 262 | retval = retval >> 16U; |
<> | 144:ef7eb2e8f9f7 | 263 | } |
<> | 144:ef7eb2e8f9f7 | 264 | else |
<> | 144:ef7eb2e8f9f7 | 265 | { |
<> | 144:ef7eb2e8f9f7 | 266 | /* no transpose of bytes for read, the result CRC is in CRC_DATA[LU:LL] */ |
<> | 144:ef7eb2e8f9f7 | 267 | retval &= 0x0000FFFFU; |
<> | 144:ef7eb2e8f9f7 | 268 | } |
<> | 144:ef7eb2e8f9f7 | 269 | return (uint16_t)retval; |
<> | 144:ef7eb2e8f9f7 | 270 | } |