I am currently working on a project, where I have to count pulses on a GPIO pin. Since the pulses are very fast (60pulses per milisecond) and I don’t want to miss a pulse I want to use an external triggerd interrupt (rising) to increase a variable of the PRU. So far so good, but how exactly do I accomplish this?
I am vey familiar with AVR Atmel µCs, but the AM335x is way more complicated than that!
So far I managed to use TI’s C-Compiler to set up and programm one of the PRUs and mapping the Pins via Device Tree overlay.
Reading from and writing to a pin is no problem …
I tried to understand the AM335x TRM and the PRU reference guide so I know that I have to proceed like this
-
map pin to PRU (eg P9_28 to PRU0 ← 0x19c 0x26, P9_28 should be GPIO 113)
-
enable the Interrupts first in the GPIO_IRQSTATUS_SET_1 register by writing 0x1 to it
-
then select the trigger, for example GPIO_RISING_DETECT by writing 0x1 to it
What I do not understand is:
- how to I tell my beaglebone that GPIO 113 (P9_28) is supposed to be the trigger source?
- how do I configure my PRU to wait for that interrupt
- how do I implement the interrupt service routine in the PRU code?
Thank you guys so much for your help!!!