<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://elinux.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;feed=atom&amp;action=history</id>
		<title>PRUSSv2 Interrupt Controller - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;action=history"/>
		<updated>2013-05-18T23:00:14Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.21alpha</generator>

	<entry>
		<id>http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77918&amp;oldid=prev</id>
		<title>Scribe at 19:55, 4 December 2011</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77918&amp;oldid=prev"/>
				<updated>2011-12-04T19:55:39Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:55, 4 December 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The PRUSS Interrupt Controller sits on the SCR 32-bit bus that interconnects elements of the PRUSS. It also has a direct outgoing connection to the ARM Interrupt Controller, EDMA and TSC_ADC Event triggers, allowing interrupts to these units to be dispatched by various components of the PRUSS. The controller also has a direct incoming connection, allowing it to receive events from various SoC external peripherals.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The PRUSS Interrupt Controller sits on the SCR 32-bit bus that interconnects elements of the PRUSS. It also has a direct outgoing connection to the ARM Interrupt Controller, EDMA and TSC_ADC Event triggers, allowing interrupts to these units to be dispatched by various components of the PRUSS. The controller also has a direct incoming connection, allowing it to receive events from various SoC external peripherals.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''Important Note:''' It is vital to clear all system interrupts before the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PRU &lt;/del&gt;is halted, else the PRUSS will not power down.''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''Important Note:''' It is vital to clear all system interrupts before the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;PRUSS &lt;/ins&gt;is halted, else the PRUSS will not power down.''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Features ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Features ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Scribe</name></author>	</entry>

	<entry>
		<id>http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77912&amp;oldid=prev</id>
		<title>Scribe: /* Servicing (clearing) an Interrupt */</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77912&amp;oldid=prev"/>
				<updated>2011-12-04T19:54:07Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Servicing (clearing) an Interrupt&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:54, 4 December 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 92:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 92:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 2Ch&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 2Ch&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Once an interrupt has been acted upon it should always be cleared to ensure the correct receipt of future interrupts.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Interrupt Nesting ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Interrupt Nesting ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Scribe</name></author>	</entry>

	<entry>
		<id>http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77906&amp;oldid=prev</id>
		<title>Scribe: /* Features */</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77906&amp;oldid=prev"/>
				<updated>2011-12-04T19:50:53Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Features&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:50, 4 December 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Features ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Features ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; [[PRUSSv2 Interrupts| A list of 64 possible interrupt events]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; [[PRUSSv2 Interrupts| A list of 64 possible interrupt events]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; 10 interrupt channels (Channel-0 to Channel-9), allowing for 10 separate active triggers, which may be triggered by one or more specified interrupts &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;form &lt;/del&gt;the above list.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; 10 interrupt channels (Channel-0 to Channel-9), allowing for 10 separate active triggers, which may be triggered by one or more specified interrupts &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;from &lt;/ins&gt;the above list.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;: If more than one interrupt arrives at the same time, those assigned to a lower channel number will be given priority. If more than one interrupt arrives at the same time on the same channel, again, the interrupt with the lowest interrupt number from the above table is given priority.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;: If more than one interrupt arrives at the same time, those assigned to a lower channel number will be given priority. If more than one interrupt arrives at the same time on the same channel, again, the interrupt with the lowest interrupt number from the above table is given priority.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; 10 host channels (Host-0 to Host-9), allowing for one or more interrupt channels to be directed to up to 10 different locations, either within or outside of the PRUSS.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; 10 host channels (Host-0 to Host-9), allowing for one or more interrupt channels to be directed to up to 10 different locations, either within or outside of the PRUSS.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Scribe</name></author>	</entry>

	<entry>
		<id>http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77900&amp;oldid=prev</id>
		<title>Scribe: /* Configuring and enabling an Interrupt */</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77900&amp;oldid=prev"/>
				<updated>2011-12-04T19:30:45Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Configuring and enabling an Interrupt&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:30, 4 December 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 44:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 44:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;!style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0&amp;quot;| Location Number&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;!style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0&amp;quot;| Location Number&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 1. Map the chosen [[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PRUSS &lt;/del&gt;Interrupts| system event]] to an interrupt channel by inserting the channel number into the appropriate Channel Map Register ([[CMR]]0::15 - each register represents 4 system interrupts)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 1. Map the chosen [[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;PRUSSv2 &lt;/ins&gt;Interrupts| system event]] to an interrupt channel by inserting the channel number into the appropriate Channel Map Register ([[CMR]]0::15 - each register represents 4 system interrupts)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[CMR0]] '''...'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[CMR0]] '''...'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PRUSS_INTC + [[CMR15]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PRUSS_INTC + [[CMR15]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 69:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 69:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 5. Enable the individual system interrupt ([[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PRUSS_Interrupts&lt;/del&gt;|system event]]) by writing the interrupt number to the System Interrupt Enable Indexed Set Register ([[EISR]])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 5. Enable the individual system interrupt ([[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;PRUSSv2_Interrupts&lt;/ins&gt;|system event]]) by writing the interrupt number to the System Interrupt Enable Indexed Set Register ([[EISR]])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Individual system interrupts can be disabled by following the above step but by instead writing to the System Interrupt Enable Indexed Clear Register ([[EICR]])''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Individual system interrupts can be disabled by following the above step but by instead writing to the System Interrupt Enable Indexed Clear Register ([[EICR]])''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[EISR]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[EISR]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Scribe</name></author>	</entry>

	<entry>
		<id>http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77894&amp;oldid=prev</id>
		<title>Scribe: /* Features */</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77894&amp;oldid=prev"/>
				<updated>2011-12-04T19:30:06Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Features&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:30, 4 December 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Features ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Features ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; [[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PRUSS &lt;/del&gt;Interrupts| A list of 64 possible interrupt events]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; [[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;PRUSSv2 &lt;/ins&gt;Interrupts| A list of 64 possible interrupt events]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; 10 interrupt channels (Channel-0 to Channel-9), allowing for 10 separate active triggers, which may be triggered by one or more specified interrupts form the above list.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;; 10 interrupt channels (Channel-0 to Channel-9), allowing for 10 separate active triggers, which may be triggered by one or more specified interrupts form the above list.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;: If more than one interrupt arrives at the same time, those assigned to a lower channel number will be given priority. If more than one interrupt arrives at the same time on the same channel, again, the interrupt with the lowest interrupt number from the above table is given priority.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;: If more than one interrupt arrives at the same time, those assigned to a lower channel number will be given priority. If more than one interrupt arrives at the same time on the same channel, again, the interrupt with the lowest interrupt number from the above table is given priority.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Scribe</name></author>	</entry>

	<entry>
		<id>http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77888&amp;oldid=prev</id>
		<title>Scribe: Created page with &quot;The PRUSS Interrupt Controller sits on the SCR 32-bit bus that interconnects elements of the PRUSS. It also has a direct outgoing connection to the ARM Interrupt Controller, EDMA...&quot;</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=PRUSSv2_Interrupt_Controller&amp;diff=77888&amp;oldid=prev"/>
				<updated>2011-12-04T19:29:22Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;The PRUSS Interrupt Controller sits on the SCR 32-bit bus that interconnects elements of the PRUSS. It also has a direct outgoing connection to the ARM Interrupt Controller, EDMA...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The PRUSS Interrupt Controller sits on the SCR 32-bit bus that interconnects elements of the PRUSS. It also has a direct outgoing connection to the ARM Interrupt Controller, EDMA and TSC_ADC Event triggers, allowing interrupts to these units to be dispatched by various components of the PRUSS. The controller also has a direct incoming connection, allowing it to receive events from various SoC external peripherals.&lt;br /&gt;
&lt;br /&gt;
'''''Important Note:''' It is vital to clear all system interrupts before the PRU is halted, else the PRUSS will not power down.''&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
; [[PRUSS Interrupts| A list of 64 possible interrupt events]].&lt;br /&gt;
; 10 interrupt channels (Channel-0 to Channel-9), allowing for 10 separate active triggers, which may be triggered by one or more specified interrupts form the above list.&lt;br /&gt;
: If more than one interrupt arrives at the same time, those assigned to a lower channel number will be given priority. If more than one interrupt arrives at the same time on the same channel, again, the interrupt with the lowest interrupt number from the above table is given priority.&lt;br /&gt;
; 10 host channels (Host-0 to Host-9), allowing for one or more interrupt channels to be directed to up to 10 different locations, either within or outside of the PRUSS.&lt;br /&gt;
: The first two channels, Host-0 and Host-1, always directly point to Register R31 bit 30 and bit 31 respectively of the two PRU units, enabling PRUs to receive interrupts by checking these register bits.&lt;br /&gt;
: Other locations a host channel may point to will typically be local peripherals, external components such as the EDMA for triggering a DMA transfer and the ARM Interrupt Controller for interrupting an operating system, allowing for software intervention.&lt;br /&gt;
&lt;br /&gt;
== Enabling the Interrupt Controller ==&lt;br /&gt;
{|style=&amp;quot;border-collapse: separate; border-spacing: 0; border-width: 0px; border-style: solid; border-color: #000; padding: 0;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0&amp;quot;| Instruction&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0&amp;quot;| Location Name&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0&amp;quot;| Location Number&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 1. Globally enable interrupts by setting the Global Enable Register ([[GER]]) to 1&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[GER]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 10h&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 2. Set polarity of all incoming events through the System Interrupt Polarity Registers ([[SIPR0]] and [[SIPR1]]) to Active High (set all bits to 1)&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[SIPR0]]&lt;br /&gt;
PRUSS_INTC + [[SIPR1]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + D00h&lt;br /&gt;
0x0002_0000 + D04h&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 3. Set the type of all incoming events through the System Interrupt Type Registers ([[SITR0]] and [[SITR1]]) to 'pulse' (set all bits to 0)&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[SITR0]]&lt;br /&gt;
PRUSS_INTC + [[SITR1]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + D80h&lt;br /&gt;
0x0002_0000 + D84h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Although the Interrupt Controller supports settings for individual interrupt polarities and types, in the AM335X (BeagleBone) processor, these settings are ALWAYS Active High and Pulsed and as such can be configured as part of the global set-up as opposed to configuration for individual interrupts.''&lt;br /&gt;
&lt;br /&gt;
== Configuring and enabling an Interrupt ==&lt;br /&gt;
{|style=&amp;quot;border-collapse: separate; border-spacing: 0; border-width: 0px; border-style: solid; border-color: #000; padding: 0;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0&amp;quot;| Instruction&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0&amp;quot;| Location Name&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0&amp;quot;| Location Number&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 1. Map the chosen [[PRUSS Interrupts| system event]] to an interrupt channel by inserting the channel number into the appropriate Channel Map Register ([[CMR]]0::15 - each register represents 4 system interrupts)&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[CMR0]] '''...'''&lt;br /&gt;
PRUSS_INTC + [[CMR15]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 400h '''...'''&lt;br /&gt;
0x0002_0000 + 43Ch&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 2. Map the configured interrupt channel to the chosen host channel by inserting the host channel number into the appropriate Host Map Register ([[HMR]]0::2 - each register represents 4 interrupt channels)&lt;br /&gt;
''It is recommend to assign interrupt channel X to host channel X (Interrupt Channel 1 -&amp;gt; Host Channel 1 etc.)&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[HMR0]] '''...'''&lt;br /&gt;
PRUSS_INTC + [[HMR2]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 800h '''...'''&lt;br /&gt;
0x0002_0000 + 808h&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 3. Clear the system interrupt's status by setting the appropriate bit in the System Interrupt Status Register to 1 ([[SECR]]0::1 - each register represents 32 interrupts)&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[SECR0]]&lt;br /&gt;
PRUSS_INTC + [[SECR1]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 280h&lt;br /&gt;
0x0002_0000 + 284h&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 4. Enable the individual host channel by writing the host channel number to the Host Interrupt Enable Indexed Set Register ([[HIEISR]])&lt;br /&gt;
''Individual interrupts can be disabled by following the above step but by instead writing to the Host Interrupt Enable Indexed Clear Register ([[HIDISR]])''&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[HIEISR]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 34h&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 5. Enable the individual system interrupt ([[PRUSS_Interrupts|system event]]) by writing the interrupt number to the System Interrupt Enable Indexed Set Register ([[EISR]])&lt;br /&gt;
''Individual system interrupts can be disabled by following the above step but by instead writing to the System Interrupt Enable Indexed Clear Register ([[EICR]])''&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[EISR]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 28h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Servicing (clearing) an Interrupt ==&lt;br /&gt;
{|style=&amp;quot;border-collapse: separate; border-spacing: 0; border-width: 0px; border-style: solid; border-color: #000; padding: 0;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0&amp;quot;| Instruction&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0&amp;quot;| Location Name&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0&amp;quot;| Location Number&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 1a. Clear the interrupt's status by setting the bit at the location of the interrupt number in the System Interrupt Status Enabled/Clear Register ([[SECR]]0::1 - for example, to clear Interrupt 12, write 1 to bit 12 in SECR0).&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[SECR0]]&lt;br /&gt;
PRUSS_INTC + [[SECR1]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 280h&lt;br /&gt;
0x0002_0000 + 284h&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-right: 10px;&amp;quot;| 1b. Alternatively, clear the interrupt's status by writing the interrupt number to the System Interrupt Status Enabled Indexed Clear Register ([[EICR]]).&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 0px 0; padding-left: 10px; padding-right: 10px;&amp;quot;| PRUSS_INTC + [[EICR]]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0px 0px 0; padding-left: 10px;&amp;quot;| 0x0002_0000 + 2Ch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Interrupt Nesting ==&lt;br /&gt;
Interrupt nesting allows various priorities of interrupts to be disabled when an interrupt event, with nesting configured, is received.&lt;br /&gt;
Disabled interrupts are then re-enabled by the user writing to the [[ISR]] register.&lt;br /&gt;
&lt;br /&gt;
There are three types of supported nesting:&lt;br /&gt;
&lt;br /&gt;
; Nesting of all host channels of the same or lower priority when an interrupt event is received&lt;br /&gt;
: The nesting level can be set by placing the channel number in the Global Nesting Level Register ([[GNLR]]).&lt;br /&gt;
&lt;br /&gt;
; Nesting of an individual host channel, the individual host may not be interrupted by interrupt events on interrupt channels of the same or lower priority&lt;br /&gt;
: The nesting level can be set individually by placing the channel number in the Host Interrupt Nesting Level Registers ([[HINLR]]0::1)&lt;br /&gt;
&lt;br /&gt;
; Software nesting, whereby the software disables all host channels on receipt of an interrupt, proceeded by enabling/disabling individual host channels and finally re-enabling all host channels, allowing only those manually enabled to continue processing interrupts. The changes are reversed once the interrupt request has been serviced by the software.&lt;br /&gt;
: Requires the most CPU intervention and should be avoided if either of the first two nesting solutions are applicable.&lt;/div&gt;</summary>
		<author><name>Scribe</name></author>	</entry>

	</feed>