Full code at: https://github.com/jstampfl/PruIEP_Int
Also for example of using PRU IEP see: https://github.com/cdsteinkuehler/linuxcnc/blob/MachineKit-ubc/configs/ARM/PRU-Debugger/pruexample.p Here is the p code: //iepx.p - set up IEP interrupt on CMP0 hitting compare value. // toggles pin p9.31 - attached to r30.t0 - mode 5 output // // Depends on call linux program to initialize the INTC // .setcallreg r2.w0 // Going to use r30 .origin 0 .entrypoint TB TB: set r30,r30, 0 //turn on jmp ISET //this is the routine to setup TB1: ldi r17,0 // init loop counter call RSET // routine to clear & enable interrupts TB2: qbbc TB2,r31.t30 // spin here for interrupt xor r30,r30,1 //toggle call RSET // clear, enable add r17,r17,1 //loop counter qblt TB9,r17,50 //loop 50 times jmp TB2 TB9: // exit point mov r31,35 //trigger host interrupt for Linux HALT ISET: // This section is to initialize the interrupts // INITIALIZE IEP INTERRUPTS mov r14,0xFFFFFF //For CMP0, compare trigger sbco r14,c26,0x48,4 mov r14,0x3 // enable CMP0, and enable sbco r14,c26,0x40,4 // counter reset on event mov r14,0x1 sbco r14,c26,0x44,4 // clear status for CMP0 lbco r14,c26,0x4,4 sbco r14,c26,0x4,4 // clear GLOBAL status, overflow mov r14,0x111 // enable IEP counter, inc 1 sbco r14,c26,0,4 // DONE WITH IEP SETUP // SETUP CHANNEL MAP // map SysEvent to Channel 0, leave 16 - 23 alone set by Linux mov r15,0x400 //set up Channel map mov r14,0x09090909 // first map all unused events to sbco r14,c0,r15,4 // Channel 9 mov r15,0x408 sbco r14,c0,r15,4 mov r15,0x40C // skiping offsets 410 & 414, they sbco r14,c0,r15,4 // were set by the C program via prussdrv mov r18,0x43C // end for loop mov r15,0x414 // start -4 for loop TB43: add r15,r15,4 sbco r14,c0,r15,4 qbgt TB43,r15,r18 mov r14,0x00090909 // map SysEvt 7 to channel 0 mov r15,0x404 // now do 404, which has the sbco r14,c0,r15,4 // entries for 4,5,6,7 // Done with Channel Map, Host Interrupt Map now // Host Interrupt 0 - 3 were setup by Linux mov r14,0x09090909 // map channels 4,5,6,7 to Host Int 9 mov r15,0x804 sbco r14,c0,r15,4 mov r14,0x00000909 // map channel 8 & 9 to Host Int 9 mov r15,0x808 sbco r14,c0,r15,4 ldi r15, 0x24 //clear all events call ALLEVT ldi r15,0x28 // enable all events call ALLEVT jmp TB1 RSET: // Routine to clear & enable system events, also host interrupts mov r24,r2 // Save return address // so can call ALLEVT lbco r14,c26,0x4,4 // clear GLOBAL_STATUS sbco r14,c26,0x4,4 lbco r14,c26,0x44,4 // clear CMP_STATUS sbco r14,c26,0x44,4 lbco r14,c26,0x44,4 mov r15,0x24 // to clear system event call ALLEVT mov r15,0x28 // to enable system event call ALLEVT mov r2,r24 // restore return address ret ALLEVT: //Insert the system envent in the proper INTC register // register r15 must have the register offset // will only work with registers that take the event number // if you want to handle multiple events, just add // ldi r14,"sys event no." // sbco r14, c0 ,r15,4 ldi r14,0x7 sbco r14, c0 ,r15,4 ret -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
