1 | .. comment SPDX-License-Identifier: CC-BY-SA-4.0 |
---|
2 | |
---|
3 | .. COMMENT: COPYRIGHT (c) 1988-2006. |
---|
4 | .. COMMENT: On-Line Applications Research Corporation (OAR). |
---|
5 | .. COMMENT: All rights reserved. |
---|
6 | |
---|
7 | Atmel AVR Specific Information |
---|
8 | ****************************** |
---|
9 | |
---|
10 | This chapter discusses the AVR architecture dependencies in this port of RTEMS. |
---|
11 | |
---|
12 | **Architecture Documents** |
---|
13 | |
---|
14 | For information on the AVR architecture, refer to the following documents |
---|
15 | available from Atmel. |
---|
16 | |
---|
17 | TBD |
---|
18 | |
---|
19 | - See other CPUs for documentation reference formatting examples. |
---|
20 | |
---|
21 | CPU Model Dependent Features |
---|
22 | ============================ |
---|
23 | |
---|
24 | CPUs of the AVR 53X only differ in the peripherals and thus in the device |
---|
25 | drivers. This port does not yet support the 56X dual core variants. |
---|
26 | |
---|
27 | Count Leading Zeroes Instruction |
---|
28 | -------------------------------- |
---|
29 | |
---|
30 | The AVR CPU has the XXX instruction which could be used to speed up the find |
---|
31 | first bit operation. The use of this instruction should significantly speed up |
---|
32 | the scheduling associated with a thread blocking. |
---|
33 | |
---|
34 | Calling Conventions |
---|
35 | =================== |
---|
36 | |
---|
37 | Processor Background |
---|
38 | -------------------- |
---|
39 | |
---|
40 | The AVR architecture supports a simple call and return mechanism. A subroutine |
---|
41 | is invoked via the call (``call``) instruction. This instruction saves the |
---|
42 | return address in the ``RETS`` register and transfers the execution to the |
---|
43 | given address. |
---|
44 | |
---|
45 | It is the called funcions responsability to use the link instruction to reserve |
---|
46 | space on the stack for the local variables. Returning from a subroutine is |
---|
47 | done by using the RTS (``RTS``) instruction which loads the PC with the adress |
---|
48 | stored in RETS. |
---|
49 | |
---|
50 | It is is important to note that the ``call`` instruction does not automatically |
---|
51 | save or restore any registers. It is the responsibility of the high-level |
---|
52 | language compiler to define the register preservation and usage convention. |
---|
53 | |
---|
54 | Register Usage |
---|
55 | -------------- |
---|
56 | |
---|
57 | A called function may clobber all registers, except RETS, R4-R7, P3-P5, FP and |
---|
58 | SP. It may also modify the first 12 bytes in the caller's stack frame which is |
---|
59 | used as an argument area for the first three arguments (which are passed in |
---|
60 | R0...R3 but may be placed on the stack by the called function). |
---|
61 | |
---|
62 | Parameter Passing |
---|
63 | ----------------- |
---|
64 | |
---|
65 | RTEMS assumes that the AVR GCC calling convention is followed. The first three |
---|
66 | parameters are stored in registers R0, R1, and R2. All other parameters are |
---|
67 | put pushed on the stack. The result is returned through register R0. |
---|
68 | |
---|
69 | Memory Model |
---|
70 | ============ |
---|
71 | |
---|
72 | The AVR family architecutre support a single unified 4 GB byte address space |
---|
73 | using 32-bit addresses. It maps all resources like internal and external memory |
---|
74 | and IO registers into separate sections of this common address space. |
---|
75 | |
---|
76 | The AVR architcture supports some form of memory protection via its Memory |
---|
77 | Management Unit. Since the AVR port runs in supervisior mode this memory |
---|
78 | protection mechanisms are not used. |
---|
79 | |
---|
80 | Interrupt Processing |
---|
81 | ==================== |
---|
82 | |
---|
83 | Discussed in this chapter are the AVR's interrupt response and control |
---|
84 | mechanisms as they pertain to RTEMS. |
---|
85 | |
---|
86 | Vectoring of an Interrupt Handler |
---|
87 | --------------------------------- |
---|
88 | |
---|
89 | TBD |
---|
90 | |
---|
91 | Disabling of Interrupts by RTEMS |
---|
92 | -------------------------------- |
---|
93 | |
---|
94 | During interrupt disable critical sections, RTEMS disables interrupts to level |
---|
95 | N (N) before the execution of this section and restores them to the previous |
---|
96 | level upon completion of the section. RTEMS uses the instructions CLI and STI |
---|
97 | to enable and disable Interrupts. Emulation, Reset, NMI and Exception |
---|
98 | Interrupts are never disabled. |
---|
99 | |
---|
100 | Interrupt Stack |
---|
101 | --------------- |
---|
102 | |
---|
103 | The AVR Architecture works with two different kind of stacks, User and |
---|
104 | Supervisor Stack. Since RTEMS and its Application run in supervisor mode, all |
---|
105 | interrupts will use the interrupted tasks stack for execution. |
---|
106 | |
---|
107 | Default Fatal Error Processing |
---|
108 | ============================== |
---|
109 | |
---|
110 | The default fatal error handler for the AVR performs the following |
---|
111 | actions: |
---|
112 | |
---|
113 | - disables processor interrupts, |
---|
114 | |
---|
115 | - places the error code in *r0*, and |
---|
116 | |
---|
117 | - executes an infinite loop (``while(0);`` to |
---|
118 | simulate a halt processor instruction. |
---|
119 | |
---|
120 | Symmetric Multiprocessing |
---|
121 | ========================= |
---|
122 | |
---|
123 | SMP is not supported. |
---|
124 | |
---|
125 | Thread-Local Storage |
---|
126 | ==================== |
---|
127 | |
---|
128 | Thread-local storage is not supported due to a broken tool chain. |
---|
129 | |
---|
130 | Board Support Packages |
---|
131 | ====================== |
---|
132 | |
---|
133 | System Reset |
---|
134 | ------------ |
---|
135 | |
---|
136 | TBD |
---|