<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>