<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:Consolas;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:Consolas;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoPlainText">I added the global definition for _Nios2_ISR_Status_interrupts_disabled (except I used NIOS2_ISR_STATUS_BITS_EIC_IL instead of INTERRUPT_DISABLE_IL_BITS – I assume it’s the highest interrupt level in your BSP).  It successfully compiles
 but will crash on startup while spitting out the RTEMS shell hello message.  So it processes some ISRs successfully but then dies.  I’m not sure if there is more I need to do in my BSP.  I have it working with the below ISR handler but it doesn’t do everything
 that yours did.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">#include <rtems/score/percpu.h><o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">/*----------------------------------------------------------<o:p></o:p></p>
<p class="MsoPlainText">*   Macro to store R1 to R15 to stack<o:p></o:p></p>
<p class="MsoPlainText">*---------------------------------------------------------*/<o:p></o:p></p>
<p class="MsoPlainText">.macro PUSH_R1_TO_R15<o:p></o:p></p>
<p class="MsoPlainText">    stw   at,   8(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r2,  12(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r3,  16(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r4,  20(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r5,  24(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r6,  28(sp)<o:p></o:p></p>
<p class="MsoPlainText">   stw   r7,  32(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r8,  36(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r9,  40(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r10, 44(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r11, 48(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r12, 52(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r13, 56(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r14, 60(sp)<o:p></o:p></p>
<p class="MsoPlainText">    stw   r15, 64(sp)<o:p></o:p></p>
<p class="MsoPlainText">.endm<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">/*----------------------------------------------------------<o:p></o:p></p>
<p class="MsoPlainText">*   Macro to restore R1 to R15 from stack<o:p></o:p></p>
<p class="MsoPlainText">*---------------------------------------------------------*/<o:p></o:p></p>
<p class="MsoPlainText">.macro POP_R1_TO_R15<o:p></o:p></p>
<p class="MsoPlainText">    ldw   at,   8(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r2,  12(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r3,  16(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r4,  20(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r5,  24(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r6,  28(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r7,  32(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r8,  36(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r9,  40(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r10, 44(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r11, 48(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r12, 52(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r13, 56(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r14, 60(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw   r15, 64(sp)<o:p></o:p></p>
<p class="MsoPlainText">.endm<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">  .set  noat<o:p></o:p></p>
<p class="MsoPlainText">  .set  nobreak<o:p></o:p></p>
<p class="MsoPlainText">  .section  .text<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">  .extern _Per_CPU_Information<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">  .globl  _Nios2_ISR_Dispatch_with_shadow_non_preemptive<o:p></o:p></p>
<p class="MsoPlainText">_Nios2_ISR_Dispatch_with_shadow_non_preemptive:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Get previous stack */<o:p></o:p></p>
<p class="MsoPlainText">    rdprs sp, sp, 0<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Get ISR Data */<o:p></o:p></p>
<p class="MsoPlainText">    ldw r15, 4(et)<o:p></o:p></p>
<p class="MsoPlainText">    ldw r4, 8(et)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Increment ISR nest level and thread dispatch disable level */<o:p></o:p></p>
<p class="MsoPlainText">    movia r9, _Per_CPU_Information<o:p></o:p></p>
<p class="MsoPlainText">    ldw r10, PER_CPU_ISR_NEST_LEVEL(r9)<o:p></o:p></p>
<p class="MsoPlainText">    ldw r11, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(r9)<o:p></o:p></p>
<p class="MsoPlainText">    addi  r10, r10, 1<o:p></o:p></p>
<p class="MsoPlainText">    addi  r11, r11, 1<o:p></o:p></p>
<p class="MsoPlainText">    stw r10, PER_CPU_ISR_NEST_LEVEL(r9)<o:p></o:p></p>
<p class="MsoPlainText">    stw r11, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(r9)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Enable Interrupts */<o:p></o:p></p>
<p class="MsoPlainText">    rdctl r5, status<o:p></o:p></p>
<p class="MsoPlainText">    ori   r5, r5, NIOS2_STATUS_PIE_MSK<o:p></o:p></p>
<p class="MsoPlainText">    wrctl status, r5<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Call ISR */<o:p></o:p></p>
<p class="MsoPlainText">    callr r15<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Disable Interrupts */<o:p></o:p></p>
<p class="MsoPlainText">    rdctl r5, status<o:p></o:p></p>
<p class="MsoPlainText">    andi  r5, r5, %lo(NIOS2_STATUS_PIE_MSK_I)<o:p></o:p></p>
<p class="MsoPlainText">    wrctl status, r5<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Decrement ISR nest level and thread dispatch disable level */<o:p></o:p></p>
<p class="MsoPlainText">    movia r9, _Per_CPU_Information<o:p></o:p></p>
<p class="MsoPlainText">    ldw r10, PER_CPU_ISR_NEST_LEVEL(r9)<o:p></o:p></p>
<p class="MsoPlainText">    ldw r11, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(r9)<o:p></o:p></p>
<p class="MsoPlainText">    subi  r10, r10, 1<o:p></o:p></p>
<p class="MsoPlainText">    subi  r11, r11, 1<o:p></o:p></p>
<p class="MsoPlainText">    stw r11, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(r9)<o:p></o:p></p>
<p class="MsoPlainText">    stw r10, PER_CPU_ISR_NEST_LEVEL(r9)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Restore Address */<o:p></o:p></p>
<p class="MsoPlainText">    addi ea, ea, -4<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">check_thread_dispatch:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Check Thread dispatch */<o:p></o:p></p>
<p class="MsoPlainText">    bne r10, zero, thread_dispatch_done<o:p></o:p></p>
<p class="MsoPlainText">    bne r11, zero, thread_dispatch_done<o:p></o:p></p>
<p class="MsoPlainText">    ldw r11, PER_CPU_DISPATCH_NEEDED(r9)<o:p></o:p></p>
<p class="MsoPlainText">    beq r11, zero, thread_dispatch_done<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">start_thread_dispatch:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Save Context */<o:p></o:p></p>
<p class="MsoPlainText">    addi r15, sp, -80<o:p></o:p></p>
<p class="MsoPlainText">    stw sstatus, 68(r15)<o:p></o:p></p>
<p class="MsoPlainText">    stw ea, 72(r15)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Set thread dispatch helper address */<o:p></o:p></p>
<p class="MsoPlainText">    movhi ea, %hiadj(thread_dispatch_helper)<o:p></o:p></p>
<p class="MsoPlainText">    addi  ea, ea, %lo(thread_dispatch_helper)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Update stack pointer in normal register set */<o:p></o:p></p>
<p class="MsoPlainText">    wrprs sp, r15<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">thread_dispatch_done:<o:p></o:p></p>
<p class="MsoPlainText">    eret<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">thread_dispatch_helper:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Save volatile registers */<o:p></o:p></p>
<p class="MsoPlainText">    stw   ra,  0(sp)<o:p></o:p></p>
<p class="MsoPlainText">    PUSH_R1_TO_R15<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    call  _Thread_Dispatch<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Restore volatile registers */<o:p></o:p></p>
<p class="MsoPlainText">    ldw   ra,   0(sp)<o:p></o:p></p>
<p class="MsoPlainText">    POP_R1_TO_R15<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Disable Interrupts */<o:p></o:p></p>
<p class="MsoPlainText">    rdctl r5, status<o:p></o:p></p>
<p class="MsoPlainText">    andi  r5, r5, %lo(NIOS2_STATUS_PIE_MSK_I)<o:p></o:p></p>
<p class="MsoPlainText">    wrctl status, r5<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    /* Restore context */<o:p></o:p></p>
<p class="MsoPlainText">    ldw et, 68(sp)<o:p></o:p></p>
<p class="MsoPlainText">    ldw ea, 72(sp)<o:p></o:p></p>
<p class="MsoPlainText">    addi  sp, sp, 80<o:p></o:p></p>
<p class="MsoPlainText">    wrctl estatus, et<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    eret<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> Hello Kevin,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> On 2013-11-25 22:05, Kirspel, Kevin wrote:<o:p></o:p></p>
<p class="MsoPlainText">>> I have been trying to get RTEMS up and running with a Altera NIOS II
<o:p></o:p></p>
<p class="MsoPlainText">>> processor with external VIC and shadows registers (non preemptive
<o:p></o:p></p>
<p class="MsoPlainText">>> mode).  I see that the current head has ISR support for the NIOS
<o:p></o:p></p>
<p class="MsoPlainText">>> external interrupt controller but I think it is broken.  There is a reference to a variable called<o:p></o:p></p>
<p class="MsoPlainText">>> ?_Nios2_ISR_Status_interrupts_disabled? but I can?t find its declaration.   It<o:p></o:p></p>
<p class="MsoPlainText">>> doesn?t seemed to exist.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> the support for external VIC works well.  You have to provide something like this in your BSP:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> static void set_isr_status_symbols(void) {<o:p></o:p></p>
<p class="MsoPlainText">>    __asm__ volatile (<o:p></o:p></p>
<p class="MsoPlainText">>      ".globl _Nios2_ISR_Status_mask\n"<o:p></o:p></p>
<p class="MsoPlainText">>      ".globl _Nios2_ISR_Status_bits\n"<o:p></o:p></p>
<p class="MsoPlainText">>      ".globl _Nios2_ISR_Status_interrupts_disabled\n"<o:p></o:p></p>
<p class="MsoPlainText">>      ".set _Nios2_ISR_Status_mask, "<o:p></o:p></p>
<p class="MsoPlainText">>        __XSTRING(NIOS2_ISR_STATUS_MASK_EIC_IL) "\n"<o:p></o:p></p>
<p class="MsoPlainText">>      ".set _Nios2_ISR_Status_bits, "<o:p></o:p></p>
<p class="MsoPlainText">>        __XSTRING(INTERRUPT_DISABLE_IL_BITS) "\n"<o:p></o:p></p>
<p class="MsoPlainText">>      ".set _Nios2_ISR_Status_interrupts_disabled, "<o:p></o:p></p>
<p class="MsoPlainText">>        __XSTRING(INTERRUPT_DISABLE_IL_BITS | NIOS2_STATUS_PIE) "\n"<o:p></o:p></p>
<p class="MsoPlainText">>    );<o:p></o:p></p>
<p class="MsoPlainText">> }<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> Our BSPs are currently not in the tree since it they are automatically generated from the design files.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> --<o:p></o:p></p>
<p class="MsoPlainText">> Sebastian Huber, embedded brains GmbH<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> Address : Dornierstr. 4, D-82178 Puchheim, Germany<o:p></o:p></p>
<p class="MsoPlainText">> Phone   : +49 89 189 47 41-16<o:p></o:p></p>
<p class="MsoPlainText">> Fax     : +49 89 189 47 41-09<o:p></o:p></p>
<p class="MsoPlainText">> E-Mail  : <a href="mailto:sebastian.huber@embedded-brains.de">
sebastian.huber@embedded-brains.de</a><o:p></o:p></p>
<p class="MsoPlainText">> PGP     : Public key available on request.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoNormal">> Diese Nachricht ist keine gesch?ftliche Mitteilung im Sinne des EHUG.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Kevin Kirspel<o:p></o:p></p>
<p class="MsoNormal">Senior Research Engineer<o:p></o:p></p>
<p class="MsoNormal">Opti Medical<o:p></o:p></p>
<p class="MsoNormal">235 Hembree Park Drive<o:p></o:p></p>
<p class="MsoNormal">Roswell GA 30076<o:p></o:p></p>
<p class="MsoNormal">Tel: (770)-510-4444 ext. 81642<o:p></o:p></p>
<p class="MsoNormal">Direct: (770)-688-1642<o:p></o:p></p>
<p class="MsoNormal">Fax: (770)-510-4445<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>