RTEMS
6.3
Toggle main menu visibility
Loading...
Searching...
No Matches
bsps
arm
atsam
include
libchip
compiler.h
1
/* ---------------------------------------------------------------------------- */
2
/* Atmel Microcontroller Software Support */
3
/* SAM Software Package License */
4
/* ---------------------------------------------------------------------------- */
5
/* Copyright (c) 2015, Atmel Corporation */
6
/* */
7
/* All rights reserved. */
8
/* */
9
/* Redistribution and use in source and binary forms, with or without */
10
/* modification, are permitted provided that the following condition is met: */
11
/* */
12
/* - Redistributions of source code must retain the above copyright notice, */
13
/* this list of conditions and the disclaimer below. */
14
/* */
15
/* Atmel's name may not be used to endorse or promote products derived from */
16
/* this software without specific prior written permission. */
17
/* */
18
/* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR */
19
/* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
20
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE */
21
/* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, */
22
/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
23
/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
24
/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
25
/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
26
/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
27
/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
28
/* ---------------------------------------------------------------------------- */
29
30
#ifndef _COMPILER_H_
31
#define _COMPILER_H_
32
33
#ifdef __rtems__
34
#include <bspopts.h>
35
#endif
/* __rtems__ */
36
/*
37
* Peripherals registers definitions
38
*/
39
#if defined __SAMV71J19__ \
40
|| defined __SAMV71J20__ \
41
|| defined __SAMV71J21__ \
42
|| defined __SAMV71N19__ \
43
|| defined __SAMV71N20__ \
44
|| defined __SAMV71N21__ \
45
|| defined __SAMV71Q19__ \
46
|| defined __SAMV71Q20__ \
47
|| defined __SAMV71Q21__
48
#include "include/samv71/samv71.h"
49
#elif defined __SAMS70J19__ \
50
|| defined __SAMS70J20__ \
51
|| defined __SAMS70J21__ \
52
|| defined __SAMS70N19__ \
53
|| defined __SAMS70N20__ \
54
|| defined __SAMS70N21__ \
55
|| defined __SAMS70Q19__ \
56
|| defined __SAMS70Q20__ \
57
|| defined __SAMS70Q21__
58
#include "include/sams70/sams70.h"
59
#elif defined __SAME70J19__ \
60
|| defined __SAME70J20__ \
61
|| defined __SAME70J21__ \
62
|| defined __SAME70N19__ \
63
|| defined __SAME70N20__ \
64
|| defined __SAME70N21__ \
65
|| defined __SAME70Q19__ \
66
|| defined __SAME70Q20__ \
67
|| defined __SAME70Q21__
68
#include "include/same70/same70.h"
69
#else
70
#error "please define correct macro for the chip first!"
71
#endif
72
73
74
//_____ D E C L A R A T I O N S ____________________________________________
75
76
#ifndef __ASSEMBLY__
77
78
#include <stddef.h>
79
#include <stdlib.h>
80
#include <stdbool.h>
81
#include <stdint.h>
82
83
/* Define WEAK attribute */
84
#if defined (__CC_ARM)
85
#define WEAK __attribute__ ((weak))
86
#elif defined (__ICCARM__)
87
#define WEAK __weak
88
#elif defined (__GNUC__)
89
#define WEAK __attribute__ ((weak))
90
#endif
91
92
/* Define Compiler name of tool chains */
93
#if defined (__CC_ARM)
94
#define COMPILER_NAME "KEIL"
95
#elif defined (__ICCARM__)
96
#define COMPILER_NAME "IAR"
97
#elif defined (__GNUC__)
98
#define COMPILER_NAME "GCC"
99
#endif
100
101
/* Define NO_INIT attribute */
102
#if defined (__CC_ARM)
103
#define NO_INIT
104
#elif defined (__ICCARM__)
105
#define NO_INIT __no_init
106
#elif defined (__GNUC__)
107
#define NO_INIT
108
#endif
109
110
111
/* Define memory sync for tool chains */
112
#if defined (__CC_ARM)
113
#define memory_sync() __dsb(15);__isb(15);
114
#elif defined (__ICCARM__)
115
#define memory_sync() __DSB();__ISB();
116
#elif defined (__GNUC__)
117
#define memory_sync() __DSB();__ISB();
118
#endif
119
120
/* Define memory barrier for tool chains */
121
#if defined (__CC_ARM)
122
#define memory_barrier() __dmb(15);
123
#elif defined (__ICCARM__)
124
#define memory_barrier() __DMB();
125
#elif defined (__GNUC__)
126
#define memory_barrier() __DMB();
127
#endif
128
140
#define TPASTE2(a, b) a##b
141
#define TPASTE3(a, b, c) a##b##c
143
154
#define ATPASTE2(a, b) TPASTE2(a, b)
155
#define ATPASTE3(a, b, c) TPASTE3(a, b, c)
157
158
165
#define COMPILER_PRAGMA(arg) _Pragma(#arg)
166
172
#define COMPILER_PACK_SET(alignment) COMPILER_PRAGMA(pack(alignment))
173
179
#define COMPILER_PACK_RESET() COMPILER_PRAGMA(pack())
180
185
#if defined (__CC_ARM)
186
#define COMPILER_SECTION(a) __attribute__((__section__(a)))
187
#elif defined (__ICCARM__)
188
#define COMPILER_SECTION(a) COMPILER_PRAGMA(location = a)
189
#elif defined (__GNUC__)
190
#define COMPILER_SECTION(a) __attribute__((__section__(a)))
191
#endif
192
196
#if defined (__CC_ARM)
197
#define COMPILER_ALIGNED(a) __attribute__((__aligned__(a)))
198
#elif defined (__ICCARM__)
199
#define COMPILER_ALIGNED(a) COMPILER_PRAGMA(data_alignment = a)
200
#elif defined (__GNUC__)
201
#define COMPILER_ALIGNED(a) __attribute__((__aligned__(a)))
202
#endif
203
207
208
#if defined (__CC_ARM)
209
#define COMPILER_WORD_ALIGNED __attribute__((__aligned__(4)))
210
#elif defined (__ICCARM__)
211
#define COMPILER_WORD_ALIGNED COMPILER_PRAGMA(data_alignment = 4)
212
#elif defined (__GNUC__)
213
#define COMPILER_WORD_ALIGNED __attribute__((__aligned__(4)))
214
#endif
215
216
217
230
239
#define Abs(a) (((a) < 0) ? -(a) : (a))
240
250
#define Min(a, b) (((a) < (b)) ? (a) : (b))
251
261
#define Max(a, b) (((a) > (b)) ? (a) : (b))
262
263
// abs() is already defined by stdlib.h
264
274
#define min(a, b) Min(a, b)
275
285
#define max(a, b) Max(a, b)
286
288
289
#define be32_to_cpu(x) __REV(x)
290
#define cpu_to_be32(x) __REV(x)
291
#define BE32_TO_CPU(x) __REV(x)
292
#define CPU_TO_BE32(x) __REV(x)
293
298
#define UNUSED(v) (void)(v)
299
305
311
321
# define irq_initialize_vectors() \
322
do { \
323
} while (0)
324
342
# define irq_register_handler(int_num, int_prio) \
343
NVIC_ClearPendingIRQ((IRQn_Type)int_num); \
344
NVIC_SetPriority((IRQn_Type)int_num, int_prio); \
345
NVIC_EnableIRQ((IRQn_Type)int_num); \
346
347
348
349
350
# define cpu_irq_enable() \
351
do { \
352
/*g_interrupt_enabled = true; */
\
353
__DMB(); \
354
__enable_irq(); \
355
} while (0)
356
# define cpu_irq_disable() \
357
do { \
358
__disable_irq(); \
359
__DMB(); \
360
/*g_interrupt_enabled = false; */
\
361
} while (0)
362
363
typedef
uint32_t irqflags_t;
364
365
#if !defined(__DOXYGEN__)
366
extern
volatile
bool
g_interrupt_enabled;
367
#endif
368
369
#define cpu_irq_is_enabled() (__get_PRIMASK() == 0)
370
371
static
volatile
uint32_t cpu_irq_critical_section_counter;
372
static
volatile
bool
cpu_irq_prev_interrupt_state;
373
374
static
inline
irqflags_t cpu_irq_save(
void
)
375
{
376
irqflags_t flags = cpu_irq_is_enabled();
377
cpu_irq_disable();
378
return
flags;
379
}
380
381
static
inline
bool
cpu_irq_is_enabled_flags(irqflags_t flags)
382
{
383
return
(flags);
384
}
385
386
static
inline
void
cpu_irq_restore(irqflags_t flags)
387
{
388
if
(cpu_irq_is_enabled_flags(flags))
389
cpu_irq_enable();
390
}
391
/*
392
void cpu_irq_enter_critical(void);
393
void cpu_irq_leave_critical(void);*/
394
399
400
#define Enable_global_interrupt() cpu_irq_enable()
401
#define Disable_global_interrupt() cpu_irq_disable()
402
#define Is_global_interrupt_enabled() cpu_irq_is_enabled()
403
404
405
//_____ M A C R O S ________________________________________________________
406
410
#define DISABLE 0
411
#define ENABLE 1
412
#define DISABLED 0
413
#define ENABLED 1
414
#define OFF 0
415
#define ON 1
416
#define FALSE 0
417
#define TRUE 1
418
#ifndef __cplusplus
419
#if !defined(__bool_true_false_are_defined)
420
#define false FALSE
421
#define true TRUE
422
#endif
423
#endif
424
#define KO 0
425
#define OK 1
426
#define PASS 0
427
#define FAIL 1
428
#define LOW 0
429
#define HIGH 1
430
#define CLR 0
431
#define SET 1
433
440
#define ctz(u) ((u) & (1ul << 0) ? 0 : \
441
(u) & (1ul << 1) ? 1 : \
442
(u) & (1ul << 2) ? 2 : \
443
(u) & (1ul << 3) ? 3 : \
444
(u) & (1ul << 4) ? 4 : \
445
(u) & (1ul << 5) ? 5 : \
446
(u) & (1ul << 6) ? 6 : \
447
(u) & (1ul << 7) ? 7 : \
448
(u) & (1ul << 8) ? 8 : \
449
(u) & (1ul << 9) ? 9 : \
450
(u) & (1ul << 10) ? 10 : \
451
(u) & (1ul << 11) ? 11 : \
452
(u) & (1ul << 12) ? 12 : \
453
(u) & (1ul << 13) ? 13 : \
454
(u) & (1ul << 14) ? 14 : \
455
(u) & (1ul << 15) ? 15 : \
456
(u) & (1ul << 16) ? 16 : \
457
(u) & (1ul << 17) ? 17 : \
458
(u) & (1ul << 18) ? 18 : \
459
(u) & (1ul << 19) ? 19 : \
460
(u) & (1ul << 20) ? 20 : \
461
(u) & (1ul << 21) ? 21 : \
462
(u) & (1ul << 22) ? 22 : \
463
(u) & (1ul << 23) ? 23 : \
464
(u) & (1ul << 24) ? 24 : \
465
(u) & (1ul << 25) ? 25 : \
466
(u) & (1ul << 26) ? 26 : \
467
(u) & (1ul << 27) ? 27 : \
468
(u) & (1ul << 28) ? 28 : \
469
(u) & (1ul << 29) ? 29 : \
470
(u) & (1ul << 30) ? 30 : \
471
(u) & (1ul << 31) ? 31 : \
472
32)
473
474
#endif
// __ASSEMBLY__
475
476
#endif
// _COMPILER_H_
Generated by
1.18.0