<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Example code for context switch for MPC56XX PowerPC in MPC5xxx</title>
    <link>https://community.nxp.com/t5/MPC5xxx/Example-code-for-context-switch-for-MPC56XX-PowerPC/m-p/732249#M9997</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-family: Arial;"&gt;Dear&amp;nbsp;Alonso Vallejo,&amp;nbsp; &lt;BR /&gt; &lt;BR /&gt;Your &lt;BR /&gt;requirement is very similar to context switching which is done when interrupt &lt;BR /&gt;handler is executed, you can also use the same sequence. &lt;BR /&gt; &lt;BR /&gt;&amp;nbsp; &lt;BR /&gt; &lt;BR /&gt;Saving context: &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; stwu&amp;nbsp;&amp;nbsp;&amp;nbsp; r1, -0x50 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Create stack frame */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw r0,&amp;nbsp; 0x24 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r0 working register&amp;nbsp; */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save SRR0 and SRR1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfsrr1&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store SRR1 (must be done before enabling EE) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x10 (r1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfsrr0&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store SRR0 (must be done before enabling EE) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x0C (r1)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear request to processor; r3 contains the address of the ISR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3,&amp;nbsp; 0x28 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r3 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lis&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, INTC_IACKR@h&amp;nbsp; /* Read pointer into ISR Vector Table &amp;amp; store in r3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ori&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, r3, INTC_IACKR@l&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, 0x0(r3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Load INTC_IACKR, which clears request to processor&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, 0x0(r3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Read ISR address from ISR Vector Table using pointer */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable processor recognition of interrupts */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrteei&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set MSR[EE]=1&amp;nbsp; */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save rest of context required by EABI */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r12, 0x4C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r12 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r11, 0x48 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r11 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r10, 0x44 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r10 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r9,&amp;nbsp; 0x40 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r9 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r8,&amp;nbsp; 0x3C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r8 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r7,&amp;nbsp; 0x38 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r7 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r6,&amp;nbsp; 0x34 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r6 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r5,&amp;nbsp; 0x30 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r5 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4,&amp;nbsp; 0x2C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r4 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfcr&amp;nbsp;&amp;nbsp;&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store CR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x20 (r1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfxer&amp;nbsp;&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store XER */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x1C (r1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfctr&amp;nbsp;&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store CTR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x18 (r1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mflr&amp;nbsp;&amp;nbsp;&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store LR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x14 (r1)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt;Restoring context:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore context required by EABI (except working registers) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x14 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore LR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtlr&amp;nbsp;&amp;nbsp;&amp;nbsp; r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x18 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore CTR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtctr&amp;nbsp;&amp;nbsp; r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x1C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore XER */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtxer&amp;nbsp;&amp;nbsp; r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x20 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore CR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtcrf&amp;nbsp;&amp;nbsp; 0xff, r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r5,&amp;nbsp; 0x30 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r5 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r6,&amp;nbsp; 0x34 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r6 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r7,&amp;nbsp; 0x38 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r7 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r8,&amp;nbsp; 0x3C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r8 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r9,&amp;nbsp; 0x40 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r9 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r10, 0x44 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r10 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r11, 0x48 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r11 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r12, 0x4C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r12 */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Disable processor recognition of interrupts */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrteei&amp;nbsp; 0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Ensure interrupt flag has finished clearing */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mbar&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write 0 to INTC_EOIR, informing INTC to lower priority */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; li&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lis&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4, INTC_EOIR@h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Load upper half of INTC_EOIR address to r4 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ori&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4, r4, INTC_EOIR@l&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, 0(r4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write 0 to INTC_EOIR */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore Working Registers */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3,&amp;nbsp; 0x28 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r3 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4,&amp;nbsp; 0x2C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r4 */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Retrieve SRR0 and SRR1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x0C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore SRR0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtsrr0&amp;nbsp; r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x10 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore SRR1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtsrr1&amp;nbsp; r0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore Other Working Registers */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x24 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r0 */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore space on stack */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; addi&amp;nbsp;&amp;nbsp;&amp;nbsp; r1, r1, 0x50&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;Please remember, this is only example code which can need some changes in your project, but from my point of view, this is good base for your development.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: Arial;"&gt;Regards,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: Arial;"&gt;Martin&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 18 Jun 2018 08:50:50 GMT</pubDate>
    <dc:creator>martin_kovar</dc:creator>
    <dc:date>2018-06-18T08:50:50Z</dc:date>
    <item>
      <title>Example code for context switch for MPC56XX PowerPC</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Example-code-for-context-switch-for-MPC56XX-PowerPC/m-p/732248#M9996</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello All,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am working into a project with automotive microncontroller MPC5604B. I have all the software of a scheduler preentive base and I based in Handler_ISR to know how to the context switch, but i dont know how to perform the context swich or which other handlers I need to use. Is there any example code about how to do this becuase EABI is not completly clear,&lt;/P&gt;&lt;P&gt;thanks.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 May 2018 01:06:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Example-code-for-context-switch-for-MPC56XX-PowerPC/m-p/732248#M9996</guid>
      <dc:creator>alonsovallejo</dc:creator>
      <dc:date>2018-05-30T01:06:20Z</dc:date>
    </item>
    <item>
      <title>Re: Example code for context switch for MPC56XX PowerPC</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Example-code-for-context-switch-for-MPC56XX-PowerPC/m-p/732249#M9997</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-family: Arial;"&gt;Dear&amp;nbsp;Alonso Vallejo,&amp;nbsp; &lt;BR /&gt; &lt;BR /&gt;Your &lt;BR /&gt;requirement is very similar to context switching which is done when interrupt &lt;BR /&gt;handler is executed, you can also use the same sequence. &lt;BR /&gt; &lt;BR /&gt;&amp;nbsp; &lt;BR /&gt; &lt;BR /&gt;Saving context: &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; stwu&amp;nbsp;&amp;nbsp;&amp;nbsp; r1, -0x50 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Create stack frame */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw r0,&amp;nbsp; 0x24 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r0 working register&amp;nbsp; */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save SRR0 and SRR1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfsrr1&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store SRR1 (must be done before enabling EE) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x10 (r1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfsrr0&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store SRR0 (must be done before enabling EE) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x0C (r1)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear request to processor; r3 contains the address of the ISR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3,&amp;nbsp; 0x28 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r3 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lis&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, INTC_IACKR@h&amp;nbsp; /* Read pointer into ISR Vector Table &amp;amp; store in r3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ori&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, r3, INTC_IACKR@l&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, 0x0(r3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Load INTC_IACKR, which clears request to processor&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, 0x0(r3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Read ISR address from ISR Vector Table using pointer */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable processor recognition of interrupts */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrteei&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set MSR[EE]=1&amp;nbsp; */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save rest of context required by EABI */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r12, 0x4C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r12 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r11, 0x48 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r11 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r10, 0x44 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r10 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r9,&amp;nbsp; 0x40 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r9 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r8,&amp;nbsp; 0x3C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r8 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r7,&amp;nbsp; 0x38 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r7 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r6,&amp;nbsp; 0x34 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r6 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r5,&amp;nbsp; 0x30 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r5 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4,&amp;nbsp; 0x2C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store r4 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfcr&amp;nbsp;&amp;nbsp;&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store CR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x20 (r1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfxer&amp;nbsp;&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store XER */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x1C (r1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mfctr&amp;nbsp;&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store CTR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x18 (r1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mflr&amp;nbsp;&amp;nbsp;&amp;nbsp; r0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Store LR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x14 (r1)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt;Restoring context:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore context required by EABI (except working registers) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x14 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore LR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtlr&amp;nbsp;&amp;nbsp;&amp;nbsp; r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x18 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore CTR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtctr&amp;nbsp;&amp;nbsp; r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x1C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore XER */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtxer&amp;nbsp;&amp;nbsp; r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x20 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore CR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtcrf&amp;nbsp;&amp;nbsp; 0xff, r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r5,&amp;nbsp; 0x30 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r5 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r6,&amp;nbsp; 0x34 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r6 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r7,&amp;nbsp; 0x38 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r7 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r8,&amp;nbsp; 0x3C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r8 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r9,&amp;nbsp; 0x40 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r9 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r10, 0x44 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r10 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r11, 0x48 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r11 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r12, 0x4C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r12 */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Disable processor recognition of interrupts */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrteei&amp;nbsp; 0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Ensure interrupt flag has finished clearing */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mbar&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write 0 to INTC_EOIR, informing INTC to lower priority */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; li&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lis&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4, INTC_EOIR@h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Load upper half of INTC_EOIR address to r4 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ori&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4, r4, INTC_EOIR@l&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, 0(r4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write 0 to INTC_EOIR */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore Working Registers */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3,&amp;nbsp; 0x28 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r3 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4,&amp;nbsp; 0x2C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r4 */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Retrieve SRR0 and SRR1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x0C (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore SRR0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtsrr0&amp;nbsp; r0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x10 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore SRR1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtsrr1&amp;nbsp; r0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore Other Working Registers */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0,&amp;nbsp; 0x24 (r1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore r0 */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore space on stack */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; addi&amp;nbsp;&amp;nbsp;&amp;nbsp; r1, r1, 0x50&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;Please remember, this is only example code which can need some changes in your project, but from my point of view, this is good base for your development.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: Arial;"&gt;Regards,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: Arial;"&gt;Martin&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Jun 2018 08:50:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Example-code-for-context-switch-for-MPC56XX-PowerPC/m-p/732249#M9997</guid>
      <dc:creator>martin_kovar</dc:creator>
      <dc:date>2018-06-18T08:50:50Z</dc:date>
    </item>
    <item>
      <title>Re: Example code for context switch for MPC56XX PowerPC</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Example-code-for-context-switch-for-MPC56XX-PowerPC/m-p/732250#M9998</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How to save and restore floating point unit registers? Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 06 Oct 2018 12:47:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Example-code-for-context-switch-for-MPC56XX-PowerPC/m-p/732250#M9998</guid>
      <dc:creator>zhouxian</dc:creator>
      <dc:date>2018-10-06T12:47:30Z</dc:date>
    </item>
  </channel>
</rss>

