START:
//INITIALIZATION
// Enable the OCP master port -- allows transfer of data to Linux userspace
LBCO r0, C4, 4, 4 // * load SYSCFG reg into r0 (use c4 const addr)
CLR r0, r0, 4 // * clear bit 4 (STANDBY_INIT)
SBCO r0, C4, 4, 4 // * store the modified r0 back at the load addr
//SETUP GPI FOR BIT-SHIFT INPUT
LBCO r0, C4, 8, 4 // * load SYSCFG reg into r0 (use c4 const addr)
LDI r0.b0, 0xAA // 0-1: 0x2 (01), 2: 0x0 (0), 3-7: 0x15 (10101)
LDI r0.b1, 0x2 // 8-12: 0x2 (01)
SBCO r0, C4, 8, 4 // * store the modified r0 back to the CFG register
MOV r1, 0x00010000 // r1: Shared RAM Address
MOV r2, 1 // r2: High Value
MOV r4, 0 // r4: Low Value
MOV r3, 0 // r3: input value
SBBO r4, r1, 0 , 2
//WAIT UNTIL START BIT IS SET
WBS r31.t29
READDATA:
QBBC READDATA,r31.t28
CALL TOGGLEFLAG
SBBO r31.w0, r1, 1, 2
LBCO r0, C4, 8, 4 // * load SYSCFG reg into r0 (use c4 const addr)
SET r0.t13
SBCO r0, C4, 8, 4
QBA READDATA
END:
MOV r31.b0, PRU0_R31_VEC_VALID | PRU_EVTOUT_0
HALT // End of program -- below are the "procedures"
TOGGLEFLAG:
QBBC SETT2, r30.t2
CLR r30.t2