OpenCores
URL https://opencores.org/ocsvn/pavr/pavr/trunk

Subversion Repositories pavr

[/] [pavr/] [trunk/] [doc/] [html/] [group__pavr__pipeline__calls.html] - Diff between revs 4 and 6

Only display areas with differences | Details | Blame | View Log

Rev 4 Rev 6
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Calls</title>
<title>Calls</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
</head><body>
<!-- Generated by Doxygen 1.2.16 -->
<!-- Generated by Doxygen 1.2.16 -->
<center>
<center>
<a class="qindex" href="main.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<a class="qindex" href="main.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h1>Calls<br>
<hr><h1>Calls<br>
<small>
<small>
[<a class="el" href="group__pavr__pipeline.html">Pipeline details</a>]</small>
[<a class="el" href="group__pavr__pipeline.html">Pipeline details</a>]</small>
</h1><table border=0 cellpadding=0 cellspacing=0>
</h1><table border=0 cellpadding=0 cellspacing=0>
</table>
</table>
<dl compact><dt><b>
<dl compact><dt><b>
A few details</b><dd>
A few details</b><dd>
There are 4 call instructions, analogue to the <a class="el" href="group__pavr__pipeline__jumps.html">jump</a> instructions: <ul>
There are 4 call instructions, analogue to the <a class="el" href="group__pavr__pipeline__jumps.html">jump</a> instructions: <ul>
<li> RCALL (relative call) <br>
<li> RCALL (relative call) <br>
 The call address is obtained by adding to the current Program Counter a 12 bit signed offset obtained from the instruction word. <li> ICALL (indirect call) <br>
 The call address is obtained by adding to the current Program Counter a 12 bit signed offset obtained from the instruction word. <li> ICALL (indirect call) <br>
 The call address is read from the Z pointer register. <br>
 The call address is read from the Z pointer register. <br>
 The destination resides in the lower 64 Kwords of Program Memory. <br>
 The destination resides in the lower 64 Kwords of Program Memory. <br>
 <li> EICALL (extended indirect call) <br>
 <li> EICALL (extended indirect call) <br>
 The call address is read from EIND:Z (higher 6 bis from EIND register in IOF, and lower 16 bits from Z pointer in RF). <br>
 The call address is read from EIND:Z (higher 6 bis from EIND register in IOF, and lower 16 bits from Z pointer in RF). <br>
 This call accesses the whole 22 bit addressing space of the Program Memory. <br>
 This call accesses the whole 22 bit addressing space of the Program Memory. <br>
 <li> CALL (far call) <br>
 <li> CALL (far call) <br>
 The call address is read from two consecutive instruction words. <br>
 The call address is read from two consecutive instruction words. <br>
 This call accesses the whole 22 bit addressing space of the Program Memory. <br>
 This call accesses the whole 22 bit addressing space of the Program Memory. <br>
 </ul>
 </ul>
<br>
<br>
 Apart from these, there is another kind of call, automatically inserted into the pipeline when an interrupt is processed. In addition to the regular calls, the implicit interrupt call also clears the general interrupt flag (flag I in the Status Register). This way, nested interrupts are disabled by default. However, they can be enabled explicitely. This behavior is questionable, but is implemented for the sake of AVR compatibility. <br>
 Apart from these, there is another kind of call, automatically inserted into the pipeline when an interrupt is processed. In addition to the regular calls, the implicit interrupt call also clears the general interrupt flag (flag I in the Status Register). This way, nested interrupts are disabled by default. However, they can be enabled explicitely. This behavior is questionable, but is implemented for the sake of AVR compatibility. <br>
 After an interrupt generates an implicit call, further interrupts are disabled for 4 clocks. This way, at least one instruction will be executed fron the called subroutine. Only after that, another interrupt can change the instruction flow. <br>
 After an interrupt generates an implicit call, further interrupts are disabled for 4 clocks. This way, at least one instruction will be executed fron the called subroutine. Only after that, another interrupt can change the instruction flow. <br>
 <br>
 <br>
 All calls take 4 clocks. <br>
 All calls take 4 clocks. <br>
</dl><dl compact><dt><b>
</dl><dl compact><dt><b>
Call state machine</b><dd>
Call state machine</b><dd>
<br>
<br>
 <div align="center">
 <div align="center">
<img src="pavr_pipe_calls_01.gif" alt="pavr_pipe_calls_01.gif">
<img src="pavr_pipe_calls_01.gif" alt="pavr_pipe_calls_01.gif">
</div>
</div>
<br>
<br>
 </dl><hr><address align="right"><small>Generated on Tue Dec 31 20:26:31 2002 for Pipelined AVR microcontroller by
 </dl><hr><address align="right"><small>Generated on Tue Dec 31 20:26:31 2002 for Pipelined AVR microcontroller by
<a href="http://www.doxygen.org/index.html">
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0
<img src="doxygen.png" alt="doxygen" align="middle" border=0
width=110 height=53></a>1.2.16 </small></address>
width=110 height=53></a>1.2.16 </small></address>
</body>
</body>
</html>
</html>
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.