Using PRU¶
TI provided examples for the L138
http://processors.wiki.ti.com/index.php/PRU_Linux_Application_Loader
References¶
The 335x has a similar PRU and some of its documentation should be usable with minor tweaks.
http://elinux.org/Ti_AM33XX_PRUSSv2
http://processors.wiki.ti.com/index.php/PRU-ICSS_FAQ
http://processors.wiki.ti.com/index.php/PRU_Projects
Examples Setup:¶
Note need the latest version of the svn repo. Revision 24 requested by the TI guide segfaults right away for the 3.2 kernel driver.
Note If asked for password, leave blank
svn co --username anonymous https://gforge.ti.com/svn/pru_sw/trunk pru_sw cd pru_sw make CCTOOL_PREFIX=$TARGET_PREFIX libprussdrv cd example_apps make CCTOOLS=${TARGET_PREFIX}gcc
Copy all files in created bin folder to L138 /home/root/bin_pru
Running examples¶
Running through all the examples.
Note: Several of the examples directly access the DDR memory and can cause a system segfault if an application or linux itself is using that memory. A safe design that wanted to use shared DDR would probably have to either reserve some memory similar to how the DSP does by using mem= in bootargs. Or the application could malloc some memory and pass the physical memory address to the PRU to use. Unsure if userspace can determine the physical address of malloc'd memory so might need to be done within the driver.
root@mityomapl138:~/bin_pru# ls PRU_ARMtoPRU_Interrupt PRU_memAccessL3andDDR.bin PRU_ARMtoPRU_Interrupt.bin PRU_memAccessPRUDataRam PRU_PRU0toPRU1_Interrupt.bin PRU_memAccessPRUDataRam.bin PRU_PRU1toPRU0_Interrupt.bin PRU_memCopy PRU_PRUtoARM_Interrupt PRU_memCopy.bin PRU_PRUtoARM_Interrupt.bin PRU_miscOperations PRU_PRUtoPRU_Interrupt PRU_miscOperations.bin PRU_access_const_table PRU_multiply PRU_access_const_table.bin PRU_multiply.bin PRU_edmaConfig.bin PRU_pscConfig.bin PRU_edmaInterrupt.bin PRU_semaphore PRU_gpioToggle PRU_semaphore.bin PRU_gpioToggle.bin PRU_timer2Interrupt PRU_mem1DTransfer PRU_timer2Interrupt.bin PRU_mem1DTransfer.bin pinmux.bin PRU_memAccessL3andDDR pinmux_reset.bin
root@mityomapl138:~/bin_pru# ./PRU_ARMtoPRU_Interrupt INFO: Starting PRU_ARMtoPRU_Interrupt example. INFO: Initializing example. File ./PRU_ARMtoPRU_Interrupt.bin open passed Generate interrupt INFO: Waiting for HALT command. INFO: PRU completed transfer. Example completed successfully. root@mityomapl138:~/bin_pru# ./PRU_PRUtoARM_Interrupt INFO: Starting PRU_PRUtoARM_Interrupt example. INFO: Initializing example. INFO: Executing example. File ./PRU_PRUtoARM_Interrupt.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully. ^C root@mityomapl138:~/bin_pru# ./PRU_PRUtoPRU_Interrupt INFO: Starting PRU_PRUtoPRU_Interrupt example. INFO: Initializing example. INFO: Executing example on PRU0. File ./PRU_PRU0toPRU1_Interrupt.bin open passed INFO: Executing example on PRU1. File ./PRU_PRU1toPRU0_Interrupt.bin open passed INFO: Waiting for HALT command. INFO: PRU0 completed transfer. INFO: Waiting for HALT command. INFO: PRU1 completed transfer. Example executed succesfully. root@mityomapl138:~/bin_pru# ./PRU_access_const_table INFO: Starting PRU_access_const_table example. INFO: Initializing example. INFO: Executing PSC configuration code . File ./PRU_pscConfig.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. INFO: Executing example. File ./PRU_access_const_table.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully. root@mityomapl138:~/bin_pru/bin# ./PRU_gpioToggle INFO: Starting PRU_gpioToggle example. INFO: Initializing example. INFO: Executing pinmux configuration. File ./pinmux.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. INFO: Executing example. File ./PRU_gpioToggle.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. INFO: Example executed succesfully. INFO: Executing pinmux reset. File ./pinmux_reset.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. root@mityomapl138:~/bin_pru# ./PRU_mem1DTransfer INFO: Starting PRU_mem1DTransfer example. INFO: Initializing example. INFO: Executing example. File ./PRU_mem1DTransfer.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully. root@mityomapl138:~/bin_pru# ./PRU_memAccessL3andDDR INFO: Starting PRU_ARM_memAccessL3andDDR example. INFO: Initializing example. INFO: Executing example. File ./PRU_memAccessL3andDDR.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully. root@mityomapl138:~/bin_pru/bin# ./PRU_memAccessPRUDataRam INFO: Starting PRU_memAccessPRUDataRam example. INFO: Initializing example. INFO: Executing example. File ./PRU_memAccessPRUDataRam.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. INFO: Example executed succesfully. root@mityomapl138:~/bin_pru/bin# ./PRU_memCopy INFO: Starting PRU_memCopy example. INFO: Initializing aligned example. INFO: Executing example. File ./PRU_memCopy.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully. INFO: Initializing same offset example. INFO: Executing example. File ./PRU_memCopy.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully. INFO: Initializing different offset example. INFO: Executing example. File ./PRU_memCopy.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully. root@mityomapl138:~/bin_pru/bin# ./PRU_miscOperations INFO: Starting PRU_miscOperations example. INFO: Initializing example. INFO: Executing example. File ./PRU_miscOperations.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Masking and bit_shift operations were executed succesfully Bubble sort was executed succesfully Thresholding functionality was executed succesfully Example executed succesfully. root@mityomapl138:~/bin_pru/bin# ./PRU_multiply INFO: Starting PRU_multiply example. INFO: Initializing example. INFO: Executing example. File ./PRU_multiply.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully. root@mityomapl138:~/bin_pru/bin# ./PRU_semaphore Starting PRU PRU_semaphore example. INFO: Initializing example. INFO: Current Transfer size = 4 bytes. PRU has permission INFO: Loading and executing transfer in PRU. File ./PRU_semaphore.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. INFO: Current Transfer size = 14 bytes. ARM has permission Segmentation fault root@mityomapl138:~/bin_pru/bin# ./PRU_timer2Interrupt INFO: Starting PRU_timer2Interrupt example. INFO: Initializing example. INFO: Executing example. File ./PRU_timer2Interrupt.bin open passed Waiting for HALT command. PRU completed transfer. Example executed succesfully. root@mityomapl138:~/bin_pru/bin# ./PRU_memAccessL3andDDR INFO: Starting PRU_ARM_memAccessL3andDDR example. INFO: Initializing example. INFO: Executing example. File ./PRU_memAccessL3andDDR.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. Example executed succesfully.
Go to top