]> begriffs open source - cmsis/blob - main/Core_A/html/group__irq__ctrl__gr.html
Update documentation for branch main
[cmsis] / main / Core_A / html / group__irq__ctrl__gr.html
1 <!-- HTML header for doxygen 1.9.6-->
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
4 <head>
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=11"/>
7 <meta name="viewport" content="width=device-width, initial-scale=1"/>
8 <title>CMSIS-Core (Cortex-A): Interrupts and Exceptions</title>
9 <link href="doxygen.css" rel="stylesheet" type="text/css"/>
10 <link href="tabs.css" rel="stylesheet" type="text/css"/>
11 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
12 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
13 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
14 <script type="text/javascript" src="jquery.js"></script>
15 <script type="text/javascript" src="dynsections.js"></script>
16 <script type="text/javascript" src="printComponentTabs.js"></script>
17 <script type="text/javascript" src="footer.js"></script>
18 <script type="text/javascript" src="navtree.js"></script>
19 <link href="navtree.css" rel="stylesheet" type="text/css"/>
20 <script type="text/javascript" src="resize.js"></script>
21 <script type="text/javascript" src="navtreedata.js"></script>
22 <script type="text/javascript" src="navtree.js"></script>
23 <link href="search/search.css" rel="stylesheet" type="text/css"/>
24 <script type="text/javascript" src="search/searchdata.js"></script>
25 <script type="text/javascript" src="search/search.js"></script>
26 <script type="text/javascript">
27 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
28   $(document).ready(function() { init_search(); });
29 /* @license-end */
30 </script>
31 <script type="text/javascript" src="darkmode_toggle.js"></script>
32 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
33 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
34 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
35 <link href="version.css" rel="stylesheet" type="text/css" />
36 <script type="text/javascript" src="../../../version.js"></script>
37 </head>
38 <body>
39 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
40 <div id="titlearea">
41 <table cellspacing="0" cellpadding="0">
42  <tbody>
43  <tr style="height: 55px;">
44   <td id="projectlogo" style="padding: 1.5em;"><img alt="Logo" src="cmsis_logo_white_small.png"/></td>
45   <td style="padding-left: 1em; padding-bottom: 1em;padding-top: 1em;">
46    <div id="projectname">CMSIS-Core (Cortex-A)
47    &#160;<span id="projectnumber"><script type="text/javascript">
48      <!--
49      writeHeader.call(this);
50      writeVersionDropdown.call(this);
51      //-->
52     </script>
53    </span>
54    </div>
55    <div id="projectbrief">CMSIS-Core support for Cortex-A processor-based devices</div>
56   </td>
57    <td>        <div id="MSearchBox" class="MSearchBoxInactive">
58         <span class="left">
59           <span id="MSearchSelect"                onmouseover="return searchBox.OnSearchSelectShow()"                onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
60           <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
61                onfocus="searchBox.OnSearchFieldFocus(true)" 
62                onblur="searchBox.OnSearchFieldFocus(false)" 
63                onkeyup="searchBox.OnSearchFieldChange(event)"/>
64           </span><span class="right">
65             <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
66           </span>
67         </div>
68 </td>
69   <!--END !PROJECT_NAME-->
70  </tr>
71  </tbody>
72 </table>
73 </div>
74 <!-- end header part -->
75 <div id="CMSISnav" class="tabs1">
76   <ul class="tablist">
77     <script type="text/javascript">
78       writeComponentTabs.call(this);
79     </script>
80   </ul>
81 </div>
82 <script type="text/javascript">
83   writeSubComponentTabs.call(this);
84 </script>
85 <!-- Generated by Doxygen 1.9.6 -->
86 <script type="text/javascript">
87 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
88 var searchBox = new SearchBox("searchBox", "search/",'.html');
89 /* @license-end */
90 </script>
91 </div><!-- top -->
92 <div id="side-nav" class="ui-resizable side-nav-resizable">
93   <div id="nav-tree">
94     <div id="nav-tree-contents">
95       <div id="nav-sync" class="sync"></div>
96     </div>
97   </div>
98   <div id="splitbar" style="-moz-user-select:none;" 
99        class="ui-resizable-handle">
100   </div>
101 </div>
102 <script type="text/javascript">
103 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
104 $(document).ready(function(){initNavTree('group__irq__ctrl__gr.html',''); initResizable(); });
105 /* @license-end */
106 </script>
107 <div id="doc-content">
108 <!-- window showing the filter options -->
109 <div id="MSearchSelectWindow"
110      onmouseover="return searchBox.OnSearchSelectShow()"
111      onmouseout="return searchBox.OnSearchSelectHide()"
112      onkeydown="return searchBox.OnSearchSelectKey(event)">
113 </div>
114
115 <!-- iframe showing the search results (closed by default) -->
116 <div id="MSearchResultsWindow">
117 <div id="MSearchResults">
118 <div class="SRPage">
119 <div id="SRIndex">
120 <div id="SRResults"></div>
121 <div class="SRStatus" id="Loading">Loading...</div>
122 <div class="SRStatus" id="Searching">Searching...</div>
123 <div class="SRStatus" id="NoMatches">No Matches</div>
124 </div>
125 </div>
126 </div>
127 </div>
128
129 <div class="header">
130   <div class="summary">
131 <a href="#groups">Content</a>  </div>
132   <div class="headertitle"><div class="title">Interrupts and Exceptions</div></div>
133 </div><!--header-->
134 <div class="contents">
135
136 <p>Generic functions to access the Interrupt Controller.  
137 <a href="#details">More...</a></p>
138 <table class="memberdecls">
139 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="groups" name="groups"></a>
140 Content</h2></td></tr>
141 <tr class="memitem:group__irq__mode__defs"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__irq__mode__defs.html">IRQ Mode Bit-Masks</a></td></tr>
142 <tr class="memdesc:group__irq__mode__defs"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configure interrupt line mode. <br /></td></tr>
143 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
144 <tr class="memitem:group__irq__priority__defs"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__irq__priority__defs.html">IRQ Priority Bit-Masks</a></td></tr>
145 <tr class="memdesc:group__irq__priority__defs"><td class="mdescLeft">&#160;</td><td class="mdescRight">Definitions used by interrupt priority functions. <br /></td></tr>
146 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
147 </table>
148 <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
149 <p>This section describes the device agnostic interrupt API viable for a wide range of specific interrupt controllers. The IRQ Controller API allows interrupt dependend applications to be easily portable across a wide range of controllers.</p>
150 <dl class="section note"><dt>Note</dt><dd>The default implementation for <a class="el" href="group__GIC__functions.html">Arm GIC (Generic Interrupt Controller)</a> can be found in irq_ctrl_gic.c. It uses <code>weak</code> functions thus it can easily be overwritten by an alternative user implementation if needed.</dd></dl>
151 <p>The Armv7-A architecture defines a common set of first level exceptions, see table below.</p>
152 <table class="markdownTable">
153 <tr class="markdownTableHead">
154 <th class="markdownTableHeadNone">Exception   </th><th class="markdownTableHeadNone">CMSIS Handler   </th><th class="markdownTableHeadNone">Offset   </th><th class="markdownTableHeadNone">Description    </th></tr>
155 <tr class="markdownTableRowOdd">
156 <td class="markdownTableBodyNone">Reset   </td><td class="markdownTableBodyNone">Reset_Handler   </td><td class="markdownTableBodyNone">0x0000   </td><td class="markdownTableBodyNone">First instruction executed after reset.    </td></tr>
157 <tr class="markdownTableRowEven">
158 <td class="markdownTableBodyNone">Undefined Instruction (Undef)   </td><td class="markdownTableBodyNone">Undef_Handler   </td><td class="markdownTableBodyNone">0x0004   </td><td class="markdownTableBodyNone">Signals usage of an illegal instructions.    </td></tr>
159 <tr class="markdownTableRowOdd">
160 <td class="markdownTableBodyNone">Supervisor Call (SVC)   </td><td class="markdownTableBodyNone">SVC_Handler   </td><td class="markdownTableBodyNone">0x0008   </td><td class="markdownTableBodyNone">Issued by software using SVC instruction.    </td></tr>
161 <tr class="markdownTableRowEven">
162 <td class="markdownTableBodyNone">Prefetch Abort (PAbt)   </td><td class="markdownTableBodyNone">PAbt_Handler   </td><td class="markdownTableBodyNone">0x000C   </td><td class="markdownTableBodyNone">Signals a memory abort on istruction fetch.    </td></tr>
163 <tr class="markdownTableRowOdd">
164 <td class="markdownTableBodyNone">Data Abort (DAbt)   </td><td class="markdownTableBodyNone">DAbt_Handler   </td><td class="markdownTableBodyNone">0x0010   </td><td class="markdownTableBodyNone">Signals a memory abort on data read or write.    </td></tr>
165 <tr class="markdownTableRowEven">
166 <td class="markdownTableBodyNone">Hyp Trap   </td><td class="markdownTableBodyNone">(NOP)   </td><td class="markdownTableBodyNone">0x0014   </td><td class="markdownTableBodyNone">Hypervisor instruction trap, only available with Virtualization Extensions.    </td></tr>
167 <tr class="markdownTableRowOdd">
168 <td class="markdownTableBodyNone">IRQ interrupt   </td><td class="markdownTableBodyNone">IRQ_Handler   </td><td class="markdownTableBodyNone">0x0018   </td><td class="markdownTableBodyNone">Interrupt Request (typically from Interrupt Controller)    </td></tr>
169 <tr class="markdownTableRowEven">
170 <td class="markdownTableBodyNone">FIQ interrupt   </td><td class="markdownTableBodyNone">FIQ_Handler   </td><td class="markdownTableBodyNone">0x001C   </td><td class="markdownTableBodyNone">Fast Interrupt Request (typically from Interrupt Controller)   </td></tr>
171 </table>
172 <p>By default those handlers are defined as weak empty functions by the <a class="el" href="startup_c_pg.html#startup_c_sec">device specific startup code</a>. Software and peripheral interrupts are all handled by one of the both central interrupt handlers (IRQ and FIQ). These needs to be implemented application specific. If an RTOS is used the interrupt handlers are typically provided by the RTOS, e.g. when using <a href="../../RTOS2/html/rtx5_impl.html">RTX5</a>.</p>
173 <p>The interrupts available depends on the actual device in use. According to CMSIS specification the interrupts are defined as IRQn_Type in <a class="el" href="device_h_pg.html">Device Header File &lt;device.h&gt;</a>. Using the generic IRQ API one can easily enable and disable interrupts, set up priorities, modes and preemption rules, and register interrupt callbacks.</p>
174 <p><b>Example:</b> </p>
175 <div class="fragment"><div class="line"><span class="keywordtype">void</span> SGI0_Handler() {</div>
176 <div class="line">  <span class="comment">/* </span></div>
177 <div class="line"><span class="comment">   * Handle Interrupt </span></div>
178 <div class="line"><span class="comment">   */</span></div>
179 <div class="line">  </div>
180 <div class="line">  IRQ_ClearPending((IRQn_ID_t)SGI0_IRQn);</div>
181 <div class="line">}</div>
182 <div class="line"> </div>
183 <div class="line"><span class="keywordtype">void</span> main() {</div>
184 <div class="line">  <span class="comment">/* Initialize the Interrupt Controller */</span></div>
185 <div class="line">  IRQ_Initialize();</div>
186 <div class="line">  </div>
187 <div class="line">  <span class="comment">/* Register the user defined handler function */</span></div>
188 <div class="line">  IRQ_SetHandler((IRQn_ID_t)SGI0_IRQn, SGI0_Handler);  </div>
189 <div class="line">  </div>
190 <div class="line">  <span class="comment">/* Set the priority considering the priority grouping */</span></div>
191 <div class="line">  <span class="keyword">const</span> uint32_t subprio = IRQ_GetPriorityGroupBits();</div>
192 <div class="line">  IRQ_SetPriority((IRQn_ID_t)SGI0_IRQn, 1u &lt;&lt; subprio);</div>
193 <div class="line">  </div>
194 <div class="line">  <span class="comment">/* Set interrupt mode to falling edge */</span></div>
195 <div class="line">  IRQ_SetMode((IRQn_ID_t)SGI0_IRQn, IRQ_MODE_TYPE_IRQ | IRQ_MODE_CPU_0 | IRQ_MODE_TRIG_EDGE | IRQ_MODE_TRIG_EDGE_FALLING);</div>
196 <div class="line">  </div>
197 <div class="line">  IRQ_Enable((IRQn_ID_t)SGI0_IRQn);</div>
198 <div class="line">  </div>
199 <div class="line">  <span class="comment">/* Trigger interrupt */</span></div>
200 <div class="line">  IRQ_SetPending((IRQn_ID_t)SGI0_IRQn);</div>
201 <div class="line">  </div>
202 <div class="line">  IRQ_Disable((IRQn_ID_t)SGI0_IRQn);</div>
203 <div class="line">}</div>
204 </div><!-- fragment --> </div><!-- contents -->
205 </div><!-- doc-content -->
206 <!-- start footer part -->
207 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
208   <ul>
209     <li class="footer">
210       <script type="text/javascript">
211         <!--
212         writeFooter.call(this);
213         //-->
214       </script> 
215     </li>
216   </ul>
217 </div>
218 </body>
219 </html>