25#if defined ( __ICCARM__ )
26 #pragma system_include
27#elif defined (__clang__)
28 #pragma clang system_header
31#ifndef ARM_CACHEL1_ARMV7_H
32#define ARM_CACHEL1_ARMV7_H
42#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos)
43#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos )
45#ifndef __SCB_DCACHE_LINE_SIZE
46#define __SCB_DCACHE_LINE_SIZE 32U
49#ifndef __SCB_ICACHE_LINE_SIZE
50#define __SCB_ICACHE_LINE_SIZE 32U
59 #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
80 #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
97 #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
117 #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
120 uint32_t op_addr = (uint32_t)addr ;
125 SCB->ICIMVAU = op_addr;
128 }
while ( op_size > 0 );
143 #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
153 ccsidr =
SCB->CCSIDR;
162 #if defined ( __CC_ARM )
163 __schedule_barrier();
165 }
while (ways-- != 0U);
166 }
while(sets-- != 0U);
183 #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
189 #if ((defined(__GNUC__) || defined(__clang__)) && !defined(__OPTIMIZE__))
200 #if !defined(__OPTIMIZE__)
213 #if defined(__ICCARM__)
215 SCB->DCCIMVAC = (uint32_t)&locals.sets;
216 SCB->DCCIMVAC = (uint32_t)&locals.ways;
217 SCB->DCCIMVAC = (uint32_t)&locals.ccsidr;
219 SCB->DCCIMVAC = (uint32_t)&locals;
225 locals.ccsidr =
SCB->CCSIDR;
227 locals.sets = (uint32_t)(
CCSIDR_SETS(locals.ccsidr));
229 locals.ways = (uint32_t)(
CCSIDR_WAYS(locals.ccsidr));
233 #if defined ( __CC_ARM )
234 __schedule_barrier();
236 }
while (locals.ways-- != 0U);
237 }
while(locals.sets-- != 0U);
251 #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
259 ccsidr =
SCB->CCSIDR;
268 #if defined ( __CC_ARM )
269 __schedule_barrier();
271 }
while (ways-- != 0U);
272 }
while(sets-- != 0U);
286 #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
294 ccsidr =
SCB->CCSIDR;
303 #if defined ( __CC_ARM )
304 __schedule_barrier();
306 }
while (ways-- != 0U);
307 }
while(sets-- != 0U);
321 #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
329 ccsidr =
SCB->CCSIDR;
338 #if defined ( __CC_ARM )
339 __schedule_barrier();
341 }
while (ways-- != 0U);
342 }
while(sets-- != 0U);
360 #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
363 uint32_t op_addr = (uint32_t)addr ;
368 SCB->DCIMVAC = op_addr;
371 }
while ( op_size > 0 );
390 #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
393 uint32_t op_addr = (uint32_t)addr ;
398 SCB->DCCMVAC = op_addr;
401 }
while ( op_size > 0 );
420 #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
423 uint32_t op_addr = (uint32_t)addr ;
428 SCB->DCCIMVAC = op_addr;
431 }
while ( op_size > 0 );
#define __STATIC_FORCEINLINE
#define SCB_DCCISW_SET_Pos
SCB DCCISW: Set Position.
#define SCB_CCR_DC_Msk
SCB CCR: DC Mask.
#define SCB_DCCSW_SET_Msk
SCB DCCSW: Set Mask.
#define SCB_DCCSW_WAY_Pos
SCB DCCSW: Way Position.
#define SCB_DCCSW_WAY_Msk
SCB DCCSW: Way Mask.
#define SCB_DCISW_WAY_Pos
SCB DCISW: Way Position.
#define SCB_DCCISW_WAY_Pos
SCB DCCISW: Way Position.
#define SCB
SCB configuration struct.
#define SCB_DCISW_SET_Msk
SCB DCISW: Set Mask.
#define SCB_DCISW_WAY_Msk
SCB DCISW: Way Mask.
#define SCB_DCCSW_SET_Pos
SCB DCCSW: Set Position.
#define SCB_DCISW_SET_Pos
SCB DCISW: Set Position.
#define SCB_DCCISW_SET_Msk
SCB DCCISW: Set Mask.
#define SCB_DCCISW_WAY_Msk
SCB DCCISW: Way Mask.
#define SCB_CCR_IC_Msk
SCB CCR: IC Mask.
__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr(volatile void *addr, int32_t dsize)
D-Cache Invalidate by address.
__STATIC_FORCEINLINE void SCB_EnableDCache(void)
Enable D-Cache.
__STATIC_FORCEINLINE void SCB_DisableICache(void)
Disable I-Cache.
__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache(void)
Clean & Invalidate D-Cache.
__STATIC_FORCEINLINE void SCB_InvalidateICache(void)
Invalidate I-Cache.
__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr(volatile void *addr, int32_t dsize)
D-Cache Clean and Invalidate by address.
#define __SCB_DCACHE_LINE_SIZE
Cortex-M7 cache line size is fixed to 32 bytes (8 words).
__STATIC_FORCEINLINE void SCB_EnableICache(void)
Enable I-Cache.
__STATIC_FORCEINLINE void SCB_InvalidateDCache(void)
Invalidate D-Cache.
__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr(volatile void *addr, int32_t dsize)
D-Cache Clean by address.
#define __SCB_ICACHE_LINE_SIZE
Cortex-M7 cache line size is fixed to 32 bytes (8 words).
__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr(volatile void *addr, int32_t isize)
I-Cache Invalidate by address.
__STATIC_FORCEINLINE void SCB_CleanDCache(void)
Clean D-Cache.
__STATIC_FORCEINLINE void SCB_DisableDCache(void)
Disable D-Cache.
#define __DSB()
Data Synchronization Barrier.
#define __ISB()
Instruction Synchronization Barrier.