Alessandro Angelino / target-mcu-k64f

Fork of target-mcu-k64f by Morpheus

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers fsl_bitaccess.h Source File

fsl_bitaccess.h

00001 /*
00002 ** ###################################################################
00003 **     Version:             rev. 2.5, 2014-02-10
00004 **     Build:               b140604
00005 **
00006 **     Abstract:
00007 **         Register bit field access macros.
00008 **
00009 **     Copyright (c) 2014 Freescale Semiconductor, Inc.
00010 **     All rights reserved.
00011 **
00012 **     (C) COPYRIGHT 2015-2015 ARM Limited
00013 **     ALL RIGHTS RESERVED
00014 **
00015 **     Redistribution and use in source and binary forms, with or without modification,
00016 **     are permitted provided that the following conditions are met:
00017 **
00018 **     o Redistributions of source code must retain the above copyright notice, this list
00019 **       of conditions and the following disclaimer.
00020 **
00021 **     o Redistributions in binary form must reproduce the above copyright notice, this
00022 **       list of conditions and the following disclaimer in the documentation and/or
00023 **       other materials provided with the distribution.
00024 **
00025 **     o Neither the name of Freescale Semiconductor, Inc. nor the names of its
00026 **       contributors may be used to endorse or promote products derived from this
00027 **       software without specific prior written permission.
00028 **
00029 **     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00030 **     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00031 **     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00032 **     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
00033 **     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00034 **     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00035 **     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
00036 **     ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00037 **     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00038 **     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00039 **
00040 **     http:                 www.freescale.com
00041 **     mail:                 support@freescale.com
00042 **
00043 **     Revisions:
00044 **     - rev. 1.0 (2013-08-12)
00045 **         Initial version.
00046 **     - rev. 2.0 (2013-10-29)
00047 **         Register accessor macros added to the memory map.
00048 **         Symbols for Processor Expert memory map compatibility added to the memory map.
00049 **         Startup file for gcc has been updated according to CMSIS 3.2.
00050 **         System initialization updated.
00051 **         MCG - registers updated.
00052 **         PORTA, PORTB, PORTC, PORTE - registers for digital filter removed.
00053 **     - rev. 2.1 (2013-10-30)
00054 **         Definition of BITBAND macros updated to support peripherals with 32-bit acces disabled.
00055 **     - rev. 2.2 (2013-12-09)
00056 **         DMA - EARS register removed.
00057 **         AIPS0, AIPS1 - MPRA register updated.
00058 **     - rev. 2.3 (2014-01-24)
00059 **         Update according to reference manual rev. 2
00060 **         ENET, MCG, MCM, SIM, USB - registers updated
00061 **     - rev. 2.4 (2014-02-10)
00062 **         The declaration of clock configurations has been moved to separate header file system_MK64F12.h
00063 **         Update of SystemInit() and SystemCoreClockUpdate() functions.
00064 **     - rev. 2.5 (2014-02-10)
00065 **         The declaration of clock configurations has been moved to separate header file system_MK64F12.h
00066 **         Update of SystemInit() and SystemCoreClockUpdate() functions.
00067 **         Module access macro module_BASES replaced by module_BASE_PTRS.
00068 **     - rev. 2.6 (2015-07-30) (ARM)
00069 **         Macros for bitband address calculation have been decoupled from the
00070 **         actual address de-referencing in BITBAND_ACCESSxx macros;
00071 **         Added fallback macros for default read/write operations
00072 **
00073 ** ###################################################################
00074 */
00075 
00076 
00077 #ifndef _FSL_BITACCESS_H
00078 #define _FSL_BITACCESS_H  1
00079 
00080 #include <stdint.h>
00081 #include <stdlib.h>
00082 #include "uvisor-lib/uvisor-lib.h"
00083 
00084 /*
00085  * Fallback macros for write/read operations
00086  */
00087 #ifndef ADDRESS_READ
00088 /* the conditional statement will be optimised away since the compiler already
00089  * knows the sizeof(type) */
00090 #define ADDRESS_READ(type, addr) \
00091     (sizeof(type) == 4 ? *((volatile uint32_t *) (addr)) : \
00092      sizeof(type) == 2 ? *((volatile uint16_t *) (addr)) : \
00093      sizeof(type) == 1 ? *((volatile uint8_t  *) (addr)) : 0)
00094 #endif
00095 
00096 #ifndef ADDRESS_WRITE
00097 /* the switch statement will be optimised away since the compiler already knows
00098  * the sizeof(type) */
00099 #define ADDRESS_WRITE(type, addr, val) \
00100     { \
00101         switch(sizeof(type)) \
00102         { \
00103             case 4: \
00104                 *((volatile uint32_t *) (addr)) = (uint32_t) (val); \
00105                 break; \
00106             case 2: \
00107                 *((volatile uint16_t *) (addr)) = (uint16_t) (val); \
00108                 break; \
00109             case 1: \
00110                 *((volatile uint8_t  *) (addr)) = (uint8_t ) (val); \
00111                 break; \
00112         } \
00113     }
00114 #endif
00115 
00116 #ifndef UNION_READ
00117 #define UNION_READ(type, addr, fieldU, fieldB) ((*((volatile type *) (addr))).fieldB)
00118 #endif
00119 
00120 /*
00121  * Macros to translate a pair of regular address and bit to their bit band alias
00122  */
00123 #define BITBAND_ADDRESS(Reg,Bit)   (0x42000000u + (32u*((uint32_t)(Reg) - (uint32_t)0x40000000u)) + (4u*((uint32_t)(Bit))))
00124 #define BITBAND_ADDRESS32(Reg,Bit) ((uint32_t volatile*)BITBAND_ADDRESS(Reg,Bit))
00125 #define BITBAND_ADDRESS16(Reg,Bit) ((uint16_t volatile*)BITBAND_ADDRESS(Reg,Bit))
00126 #define BITBAND_ADDRESS8(Reg,Bit)  ((uint8_t  volatile*)BITBAND_ADDRESS(Reg,Bit))
00127 
00128 /**
00129  * @brief Macro to access a single bit of a 32-bit peripheral register (bit band region
00130  *        0x40000000 to 0x400FFFFF) using the bit-band alias region access.
00131  * @param Reg Register to access.
00132  * @param Bit Bit number to access.
00133  * @return Value of the targeted bit in the bit band region.
00134  */
00135 #define BITBAND_ACCESS32(Reg,Bit) (*BITBAND_ADDRESS32(Reg,Bit))
00136 
00137 /**
00138  * @brief Macro to access a single bit of a 16-bit peripheral register (bit band region
00139  *        0x40000000 to 0x400FFFFF) using the bit-band alias region access.
00140  * @param Reg Register to access.
00141  * @param Bit Bit number to access.
00142  * @return Value of the targeted bit in the bit band region.
00143  */
00144 #define BITBAND_ACCESS16(Reg,Bit) (*BITBAND_ADDRESS16(Reg,Bit))
00145 
00146 /**
00147  * @brief Macro to access a single bit of an 8-bit peripheral register (bit band region
00148  *        0x40000000 to 0x400FFFFF) using the bit-band alias region access.
00149  * @param Reg Register to access.
00150  * @param Bit Bit number to access.
00151  * @return Value of the targeted bit in the bit band region.
00152  */
00153 #define BITBAND_ACCESS8(Reg,Bit) (*BITBAND_ADDRESS8(Reg,Bit))
00154 
00155 /*
00156  * Macros for single instance registers
00157  */
00158 
00159 #define BF_SET(reg, field)       HW_##reg##_SET(BM_##reg##_##field)
00160 #define BF_CLR(reg, field)       HW_##reg##_CLR(BM_##reg##_##field)
00161 #define BF_TOG(reg, field)       HW_##reg##_TOG(BM_##reg##_##field)
00162 
00163 #define BF_SETV(reg, field, v)   HW_##reg##_SET(BF_##reg##_##field(v))
00164 #define BF_CLRV(reg, field, v)   HW_##reg##_CLR(BF_##reg##_##field(v))
00165 #define BF_TOGV(reg, field, v)   HW_##reg##_TOG(BF_##reg##_##field(v))
00166 
00167 #define BV_FLD(reg, field, sym)  BF_##reg##_##field(BV_##reg##_##field##__##sym)
00168 #define BV_VAL(reg, field, sym)  BV_##reg##_##field##__##sym
00169 
00170 #define BF_RD(reg, field)        HW_##reg.B.field
00171 #define BF_WR(reg, field, v)     BW_##reg##_##field(v)
00172 
00173 #define BF_CS1(reg, f1, v1)  \
00174         (HW_##reg##_CLR(BM_##reg##_##f1),      \
00175          HW_##reg##_SET(BF_##reg##_##f1(v1)))
00176 
00177 #define BF_CS2(reg, f1, v1, f2, v2)  \
00178         (HW_##reg##_CLR(BM_##reg##_##f1 |      \
00179                         BM_##reg##_##f2),      \
00180          HW_##reg##_SET(BF_##reg##_##f1(v1) |  \
00181                         BF_##reg##_##f2(v2)))
00182 
00183 #define BF_CS3(reg, f1, v1, f2, v2, f3, v3)  \
00184         (HW_##reg##_CLR(BM_##reg##_##f1 |      \
00185                         BM_##reg##_##f2 |      \
00186                         BM_##reg##_##f3),      \
00187          HW_##reg##_SET(BF_##reg##_##f1(v1) |  \
00188                         BF_##reg##_##f2(v2) |  \
00189                         BF_##reg##_##f3(v3)))
00190 
00191 #define BF_CS4(reg, f1, v1, f2, v2, f3, v3, f4, v4)  \
00192         (HW_##reg##_CLR(BM_##reg##_##f1 |      \
00193                         BM_##reg##_##f2 |      \
00194                         BM_##reg##_##f3 |      \
00195                         BM_##reg##_##f4),      \
00196          HW_##reg##_SET(BF_##reg##_##f1(v1) |  \
00197                         BF_##reg##_##f2(v2) |  \
00198                         BF_##reg##_##f3(v3) |  \
00199                         BF_##reg##_##f4(v4)))
00200 
00201 #define BF_CS5(reg, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5)  \
00202         (HW_##reg##_CLR(BM_##reg##_##f1 |      \
00203                         BM_##reg##_##f2 |      \
00204                         BM_##reg##_##f3 |      \
00205                         BM_##reg##_##f4 |      \
00206                         BM_##reg##_##f5),      \
00207          HW_##reg##_SET(BF_##reg##_##f1(v1) |  \
00208                         BF_##reg##_##f2(v2) |  \
00209                         BF_##reg##_##f3(v3) |  \
00210                         BF_##reg##_##f4(v4) |  \
00211                         BF_##reg##_##f5(v5)))
00212 
00213 #define BF_CS6(reg, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6)  \
00214         (HW_##reg##_CLR(BM_##reg##_##f1 |      \
00215                         BM_##reg##_##f2 |      \
00216                         BM_##reg##_##f3 |      \
00217                         BM_##reg##_##f4 |      \
00218                         BM_##reg##_##f5 |      \
00219                         BM_##reg##_##f6),      \
00220          HW_##reg##_SET(BF_##reg##_##f1(v1) |  \
00221                         BF_##reg##_##f2(v2) |  \
00222                         BF_##reg##_##f3(v3) |  \
00223                         BF_##reg##_##f4(v4) |  \
00224                         BF_##reg##_##f5(v5) |  \
00225                         BF_##reg##_##f6(v6)))
00226 
00227 #define BF_CS7(reg, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7)  \
00228         (HW_##reg##_CLR(BM_##reg##_##f1 |      \
00229                         BM_##reg##_##f2 |      \
00230                         BM_##reg##_##f3 |      \
00231                         BM_##reg##_##f4 |      \
00232                         BM_##reg##_##f5 |      \
00233                         BM_##reg##_##f6 |      \
00234                         BM_##reg##_##f7),      \
00235          HW_##reg##_SET(BF_##reg##_##f1(v1) |  \
00236                         BF_##reg##_##f2(v2) |  \
00237                         BF_##reg##_##f3(v3) |  \
00238                         BF_##reg##_##f4(v4) |  \
00239                         BF_##reg##_##f5(v5) |  \
00240                         BF_##reg##_##f6(v6) |  \
00241                         BF_##reg##_##f7(v7)))
00242 
00243 #define BF_CS8(reg, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8)  \
00244         (HW_##reg##_CLR(BM_##reg##_##f1 |      \
00245                         BM_##reg##_##f2 |      \
00246                         BM_##reg##_##f3 |      \
00247                         BM_##reg##_##f4 |      \
00248                         BM_##reg##_##f5 |      \
00249                         BM_##reg##_##f6 |      \
00250                         BM_##reg##_##f7 |      \
00251                         BM_##reg##_##f8),      \
00252          HW_##reg##_SET(BF_##reg##_##f1(v1) |  \
00253                         BF_##reg##_##f2(v2) |  \
00254                         BF_##reg##_##f3(v3) |  \
00255                         BF_##reg##_##f4(v4) |  \
00256                         BF_##reg##_##f5(v5) |  \
00257                         BF_##reg##_##f6(v6) |  \
00258                         BF_##reg##_##f7(v7) |  \
00259                         BF_##reg##_##f8(v8)))
00260 
00261 /*
00262  * Macros for multiple instance registers
00263  */
00264 
00265 #define BF_SETn(reg, n, field)       HW_##reg##_SET(n, BM_##reg##_##field)
00266 #define BF_CLRn(reg, n, field)       HW_##reg##_CLR(n, BM_##reg##_##field)
00267 #define BF_TOGn(reg, n, field)       HW_##reg##_TOG(n, BM_##reg##_##field)
00268 
00269 #define BF_SETVn(reg, n, field, v)   HW_##reg##_SET(n, BF_##reg##_##field(v))
00270 #define BF_CLRVn(reg, n, field, v)   HW_##reg##_CLR(n, BF_##reg##_##field(v))
00271 #define BF_TOGVn(reg, n, field, v)   HW_##reg##_TOG(n, BF_##reg##_##field(v))
00272 
00273 #define BV_FLDn(reg, n, field, sym)  BF_##reg##_##field(BV_##reg##_##field##__##sym)
00274 #define BV_VALn(reg, n, field, sym)  BV_##reg##_##field##__##sym
00275 
00276 #define BF_RDn(reg, n, field)        HW_##reg(n).B.field
00277 #define BF_WRn(reg, n, field, v)     BW_##reg##_##field(n, v)
00278 
00279 #define BF_CS1n(reg, n, f1, v1)  \
00280         (HW_##reg##_CLR(n, (BM_##reg##_##f1)),      \
00281          HW_##reg##_SET(n, (BF_##reg##_##f1(v1))))
00282 
00283 #define BF_CS2n(reg, n, f1, v1, f2, v2)  \
00284         (HW_##reg##_CLR(n, (BM_##reg##_##f1 |       \
00285                             BM_##reg##_##f2)),      \
00286          HW_##reg##_SET(n, (BF_##reg##_##f1(v1) |   \
00287                             BF_##reg##_##f2(v2))))
00288 
00289 #define BF_CS3n(reg, n, f1, v1, f2, v2, f3, v3)  \
00290         (HW_##reg##_CLR(n, (BM_##reg##_##f1 |       \
00291                             BM_##reg##_##f2 |       \
00292                             BM_##reg##_##f3)),      \
00293          HW_##reg##_SET(n, (BF_##reg##_##f1(v1) |   \
00294                             BF_##reg##_##f2(v2) |   \
00295                             BF_##reg##_##f3(v3))))
00296 
00297 #define BF_CS4n(reg, n, f1, v1, f2, v2, f3, v3, f4, v4)  \
00298         (HW_##reg##_CLR(n, (BM_##reg##_##f1 |       \
00299                             BM_##reg##_##f2 |       \
00300                             BM_##reg##_##f3 |       \
00301                             BM_##reg##_##f4)),      \
00302          HW_##reg##_SET(n, (BF_##reg##_##f1(v1) |   \
00303                             BF_##reg##_##f2(v2) |   \
00304                             BF_##reg##_##f3(v3) |   \
00305                             BF_##reg##_##f4(v4))))
00306 
00307 #define BF_CS5n(reg, n, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5)  \
00308         (HW_##reg##_CLR(n, (BM_##reg##_##f1 |       \
00309                             BM_##reg##_##f2 |       \
00310                             BM_##reg##_##f3 |       \
00311                             BM_##reg##_##f4 |       \
00312                             BM_##reg##_##f5)),      \
00313          HW_##reg##_SET(n, (BF_##reg##_##f1(v1) |   \
00314                             BF_##reg##_##f2(v2) |   \
00315                             BF_##reg##_##f3(v3) |   \
00316                             BF_##reg##_##f4(v4) |   \
00317                             BF_##reg##_##f5(v5))))
00318 
00319 #define BF_CS6n(reg, n, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6)  \
00320         (HW_##reg##_CLR(n, (BM_##reg##_##f1 |       \
00321                             BM_##reg##_##f2 |       \
00322                             BM_##reg##_##f3 |       \
00323                             BM_##reg##_##f4 |       \
00324                             BM_##reg##_##f5 |       \
00325                             BM_##reg##_##f6)),      \
00326          HW_##reg##_SET(n, (BF_##reg##_##f1(v1) |   \
00327                             BF_##reg##_##f2(v2) |   \
00328                             BF_##reg##_##f3(v3) |   \
00329                             BF_##reg##_##f4(v4) |   \
00330                             BF_##reg##_##f5(v5) |   \
00331                             BF_##reg##_##f6(v6))))
00332 
00333 #define BF_CS7n(reg, n, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7)  \
00334         (HW_##reg##_CLR(n, (BM_##reg##_##f1 |       \
00335                             BM_##reg##_##f2 |       \
00336                             BM_##reg##_##f3 |       \
00337                             BM_##reg##_##f4 |       \
00338                             BM_##reg##_##f5 |       \
00339                             BM_##reg##_##f6 |       \
00340                             BM_##reg##_##f7)),      \
00341          HW_##reg##_SET(n, (BF_##reg##_##f1(v1) |   \
00342                             BF_##reg##_##f2(v2) |   \
00343                             BF_##reg##_##f3(v3) |   \
00344                             BF_##reg##_##f4(v4) |   \
00345                             BF_##reg##_##f5(v5) |   \
00346                             BF_##reg##_##f6(v6) |   \
00347                             BF_##reg##_##f7(v7))))
00348 
00349 #define BF_CS8n(reg, n, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8)  \
00350         (HW_##reg##_CLR(n, (BM_##reg##_##f1 |       \
00351                             BM_##reg##_##f2 |       \
00352                             BM_##reg##_##f3 |       \
00353                             BM_##reg##_##f4 |       \
00354                             BM_##reg##_##f5 |       \
00355                             BM_##reg##_##f6 |       \
00356                             BM_##reg##_##f7 |       \
00357                             BM_##reg##_##f8)),      \
00358          HW_##reg##_SET(n, (BF_##reg##_##f1(v1) |   \
00359                             BF_##reg##_##f2(v2) |   \
00360                             BF_##reg##_##f3(v3) |   \
00361                             BF_##reg##_##f4(v4) |   \
00362                             BF_##reg##_##f5(v5) |   \
00363                             BF_##reg##_##f6(v6) |   \
00364                             BF_##reg##_##f7(v7) |   \
00365                             BF_##reg##_##f8(v8))))
00366 
00367 /*
00368  * Macros for single instance MULTI-BLOCK registers
00369  */
00370 
00371 #define BFn_SET(reg, blk, field)       HW_##reg##_SET(blk, BM_##reg##_##field)
00372 #define BFn_CLR(reg, blk, field)       HW_##reg##_CLR(blk, BM_##reg##_##field)
00373 #define BFn_TOG(reg, blk, field)       HW_##reg##_TOG(blk, BM_##reg##_##field)
00374 
00375 #define BFn_SETV(reg, blk, field, v)   HW_##reg##_SET(blk, BF_##reg##_##field(v))
00376 #define BFn_CLRV(reg, blk, field, v)   HW_##reg##_CLR(blk, BF_##reg##_##field(v))
00377 #define BFn_TOGV(reg, blk, field, v)   HW_##reg##_TOG(blk, BF_##reg##_##field(v))
00378 
00379 #define BVn_FLD(reg, field, sym)  BF_##reg##_##field(BV_##reg##_##field##__##sym)
00380 #define BVn_VAL(reg, field, sym)  BV_##reg##_##field##__##sym
00381 
00382 #define BFn_RD(reg, blk, field)        HW_##reg(blk).B.field
00383 #define BFn_WR(reg, blk, field, v)     BW_##reg##_##field(blk, v)
00384 
00385 #define BFn_CS1(reg, blk, f1, v1)  \
00386         (HW_##reg##_CLR(blk, BM_##reg##_##f1),      \
00387          HW_##reg##_SET(blk, BF_##reg##_##f1(v1)))
00388 
00389 #define BFn_CS2(reg, blk, f1, v1, f2, v2)  \
00390         (HW_##reg##_CLR(blk, BM_##reg##_##f1 |      \
00391                         BM_##reg##_##f2),      \
00392          HW_##reg##_SET(blk, BF_##reg##_##f1(v1) |  \
00393                         BF_##reg##_##f2(v2)))
00394 
00395 #define BFn_CS3(reg, blk, f1, v1, f2, v2, f3, v3)  \
00396         (HW_##reg##_CLR(blk, BM_##reg##_##f1 |      \
00397                         BM_##reg##_##f2 |      \
00398                         BM_##reg##_##f3),      \
00399          HW_##reg##_SET(blk, BF_##reg##_##f1(v1) |  \
00400                         BF_##reg##_##f2(v2) |  \
00401                         BF_##reg##_##f3(v3)))
00402 
00403 #define BFn_CS4(reg, blk, f1, v1, f2, v2, f3, v3, f4, v4)  \
00404         (HW_##reg##_CLR(blk, BM_##reg##_##f1 |      \
00405                         BM_##reg##_##f2 |      \
00406                         BM_##reg##_##f3 |      \
00407                         BM_##reg##_##f4),      \
00408          HW_##reg##_SET(blk, BF_##reg##_##f1(v1) |  \
00409                         BF_##reg##_##f2(v2) |  \
00410                         BF_##reg##_##f3(v3) |  \
00411                         BF_##reg##_##f4(v4)))
00412 
00413 #define BFn_CS5(reg, blk, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5)  \
00414         (HW_##reg##_CLR(blk, BM_##reg##_##f1 |      \
00415                         BM_##reg##_##f2 |      \
00416                         BM_##reg##_##f3 |      \
00417                         BM_##reg##_##f4 |      \
00418                         BM_##reg##_##f5),      \
00419          HW_##reg##_SET(blk, BF_##reg##_##f1(v1) |  \
00420                         BF_##reg##_##f2(v2) |  \
00421                         BF_##reg##_##f3(v3) |  \
00422                         BF_##reg##_##f4(v4) |  \
00423                         BF_##reg##_##f5(v5)))
00424 
00425 #define BFn_CS6(reg, blk, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6)  \
00426         (HW_##reg##_CLR(blk, BM_##reg##_##f1 |      \
00427                         BM_##reg##_##f2 |      \
00428                         BM_##reg##_##f3 |      \
00429                         BM_##reg##_##f4 |      \
00430                         BM_##reg##_##f5 |      \
00431                         BM_##reg##_##f6),      \
00432          HW_##reg##_SET(blk, BF_##reg##_##f1(v1) |  \
00433                         BF_##reg##_##f2(v2) |  \
00434                         BF_##reg##_##f3(v3) |  \
00435                         BF_##reg##_##f4(v4) |  \
00436                         BF_##reg##_##f5(v5) |  \
00437                         BF_##reg##_##f6(v6)))
00438 
00439 #define BFn_CS7(reg, blk, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7)  \
00440         (HW_##reg##_CLR(blk, BM_##reg##_##f1 |      \
00441                         BM_##reg##_##f2 |      \
00442                         BM_##reg##_##f3 |      \
00443                         BM_##reg##_##f4 |      \
00444                         BM_##reg##_##f5 |      \
00445                         BM_##reg##_##f6 |      \
00446                         BM_##reg##_##f7),      \
00447          HW_##reg##_SET(blk, BF_##reg##_##f1(v1) |  \
00448                         BF_##reg##_##f2(v2) |  \
00449                         BF_##reg##_##f3(v3) |  \
00450                         BF_##reg##_##f4(v4) |  \
00451                         BF_##reg##_##f5(v5) |  \
00452                         BF_##reg##_##f6(v6) |  \
00453                         BF_##reg##_##f7(v7)))
00454 
00455 #define BFn_CS8(reg, blk, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8)  \
00456         (HW_##reg##_CLR(blk, BM_##reg##_##f1 |      \
00457                         BM_##reg##_##f2 |      \
00458                         BM_##reg##_##f3 |      \
00459                         BM_##reg##_##f4 |      \
00460                         BM_##reg##_##f5 |      \
00461                         BM_##reg##_##f6 |      \
00462                         BM_##reg##_##f7 |      \
00463                         BM_##reg##_##f8),      \
00464          HW_##reg##_SET(blk, BF_##reg##_##f1(v1) |  \
00465                         BF_##reg##_##f2(v2) |  \
00466                         BF_##reg##_##f3(v3) |  \
00467                         BF_##reg##_##f4(v4) |  \
00468                         BF_##reg##_##f5(v5) |  \
00469                         BF_##reg##_##f6(v6) |  \
00470                         BF_##reg##_##f7(v7) |  \
00471                         BF_##reg##_##f8(v8)))
00472 
00473 /*
00474  * Macros for MULTI-BLOCK multiple instance registers
00475  */
00476 
00477 #define BFn_SETn(reg, blk, n, field)       HW_##reg##_SET(blk, n, BM_##reg##_##field)
00478 #define BFn_CLRn(reg, blk, n, field)       HW_##reg##_CLR(blk, n, BM_##reg##_##field)
00479 #define BFn_TOGn(reg, blk, n, field)       HW_##reg##_TOG(blk, n, BM_##reg##_##field)
00480 
00481 #define BFn_SETVn(reg, blk, n, field, v)   HW_##reg##_SET(blk, n, BF_##reg##_##field(v))
00482 #define BFn_CLRVn(reg, blk, n, field, v)   HW_##reg##_CLR(blk, n, BF_##reg##_##field(v))
00483 #define BFn_TOGVn(reg, blk, n, field, v)   HW_##reg##_TOG(blk, n, BF_##reg##_##field(v))
00484 
00485 #define BVn_FLDn(reg, blk, n, field, sym)  BF_##reg##_##field(BV_##reg##_##field##__##sym)
00486 #define BVn_VALn(reg, blk, n, field, sym)  BV_##reg##_##field##__##sym
00487 
00488 #define BFn_RDn(reg, blk, n, field)        HW_##reg(n).B.field
00489 #define BFn_WRn(reg, blk, n, field, v)     BW_##reg##_##field(n, v)
00490 
00491 #define BFn_CS1n(reg, blk, n, f1, v1)  \
00492         (HW_##reg##_CLR(blk, n, (BM_##reg##_##f1)),      \
00493          HW_##reg##_SET(blk, n, (BF_##reg##_##f1(v1))))
00494 
00495 #define BFn_CS2n(reg, blk, n, f1, v1, f2, v2)  \
00496         (HW_##reg##_CLR(blk, n, (BM_##reg##_##f1 |       \
00497                             BM_##reg##_##f2)),      \
00498          HW_##reg##_SET(blk, n, (BF_##reg##_##f1(v1) |   \
00499                             BF_##reg##_##f2(v2))))
00500 
00501 #define BFn_CS3n(reg, blk, n, f1, v1, f2, v2, f3, v3)  \
00502         (HW_##reg##_CLR(blk, n, (BM_##reg##_##f1 |       \
00503                             BM_##reg##_##f2 |       \
00504                             BM_##reg##_##f3)),      \
00505          HW_##reg##_SET(blk, n, (BF_##reg##_##f1(v1) |   \
00506                             BF_##reg##_##f2(v2) |   \
00507                             BF_##reg##_##f3(v3))))
00508 
00509 #define BFn_CS4n(reg, blk, n, f1, v1, f2, v2, f3, v3, f4, v4)  \
00510         (HW_##reg##_CLR(blk, n, (BM_##reg##_##f1 |       \
00511                             BM_##reg##_##f2 |       \
00512                             BM_##reg##_##f3 |       \
00513                             BM_##reg##_##f4)),      \
00514          HW_##reg##_SET(blk, n, (BF_##reg##_##f1(v1) |   \
00515                             BF_##reg##_##f2(v2) |   \
00516                             BF_##reg##_##f3(v3) |   \
00517                             BF_##reg##_##f4(v4))))
00518 
00519 #define BFn_CS5n(reg, blk, n, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5)  \
00520         (HW_##reg##_CLR(blk, n, (BM_##reg##_##f1 |       \
00521                             BM_##reg##_##f2 |       \
00522                             BM_##reg##_##f3 |       \
00523                             BM_##reg##_##f4 |       \
00524                             BM_##reg##_##f5)),      \
00525          HW_##reg##_SET(blk, n, (BF_##reg##_##f1(v1) |   \
00526                             BF_##reg##_##f2(v2) |   \
00527                             BF_##reg##_##f3(v3) |   \
00528                             BF_##reg##_##f4(v4) |   \
00529                             BF_##reg##_##f5(v5))))
00530 
00531 #define BFn_CS6n(reg, blk, n, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6)  \
00532         (HW_##reg##_CLR(blk, n, (BM_##reg##_##f1 |       \
00533                             BM_##reg##_##f2 |       \
00534                             BM_##reg##_##f3 |       \
00535                             BM_##reg##_##f4 |       \
00536                             BM_##reg##_##f5 |       \
00537                             BM_##reg##_##f6)),      \
00538          HW_##reg##_SET(blk, n, (BF_##reg##_##f1(v1) |   \
00539                             BF_##reg##_##f2(v2) |   \
00540                             BF_##reg##_##f3(v3) |   \
00541                             BF_##reg##_##f4(v4) |   \
00542                             BF_##reg##_##f5(v5) |   \
00543                             BF_##reg##_##f6(v6))))
00544 
00545 #define BFn_CS7n(reg, blk, n, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7)  \
00546         (HW_##reg##_CLR(blk, n, (BM_##reg##_##f1 |       \
00547                             BM_##reg##_##f2 |       \
00548                             BM_##reg##_##f3 |       \
00549                             BM_##reg##_##f4 |       \
00550                             BM_##reg##_##f5 |       \
00551                             BM_##reg##_##f6 |       \
00552                             BM_##reg##_##f7)),      \
00553          HW_##reg##_SET(blk, n, (BF_##reg##_##f1(v1) |   \
00554                             BF_##reg##_##f2(v2) |   \
00555                             BF_##reg##_##f3(v3) |   \
00556                             BF_##reg##_##f4(v4) |   \
00557                             BF_##reg##_##f5(v5) |   \
00558                             BF_##reg##_##f6(v6) |   \
00559                             BF_##reg##_##f7(v7))))
00560 
00561 #define BFn_CS8n(reg, blk, n, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8)  \
00562         (HW_##reg##_CLR(blk, n, (BM_##reg##_##f1 |       \
00563                             BM_##reg##_##f2 |       \
00564                             BM_##reg##_##f3 |       \
00565                             BM_##reg##_##f4 |       \
00566                             BM_##reg##_##f5 |       \
00567                             BM_##reg##_##f6 |       \
00568                             BM_##reg##_##f7 |       \
00569                             BM_##reg##_##f8)),      \
00570          HW_##reg##_SET(blk, n, (BF_##reg##_##f1(v1) |   \
00571                             BF_##reg##_##f2(v2) |   \
00572                             BF_##reg##_##f3(v3) |   \
00573                             BF_##reg##_##f4(v4) |   \
00574                             BF_##reg##_##f5(v5) |   \
00575                             BF_##reg##_##f6(v6) |   \
00576                             BF_##reg##_##f7(v7) |   \
00577                             BF_##reg##_##f8(v8))))
00578 
00579 #endif /* _FSL_BITACCESS_H */
00580 
00581 /******************************************************************************/