Hi all, 

I am practicing PRU skills through some TI examples. I am playing with 
PRU_ADC_onChip 
<https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am335x/PRU_ADC_onChip?h=master>example
 
and ran into a few questions. I wonder if you can help me with. 

The nice thing about this example is it has a README.txt with all the 
procedures. The idea is to use rpmsg to communicate between arm and pru 
module and read out ADC value. 
I am using a Beaglebone Black wireless.
Here is the basic procedures.

FILE STRUCTURE
PRU_ADC
  |
  |--pru_adc_firmware.c firmware loaded into PRU0
  |
  |--pru_adc_userspace
       |--pru_adc_userspace.c userspace code that interacts with PRU0

BUILD FIRMWARE & USERSPACE CODE
$ cd <PATH_TO_PRU_SW_SUPPORT_PACKAGE>/examples/am335x/PRU_ADC_onChip/
$ make clean
$ make
$ cd pru_adc_userspace/
$ make clean
$ make

My BBB wireless can compile pru code successfully because I installed 
PRU_CGT compiler. But it is unable to compile ARM code. I think that is 
because ARM_CCT cross-compiler toochain environment is missing, in another 
word, I need to install processor-sdk-am335x

My first questions is can I install processor-sdk-am335x  into Debian 
system I currently have (Linux beaglebone 4.19.94-ti-r62 ) ? I am a little 
confused about the relationship between this SDK and Debian system. Why is 
the tutorial asking me to compile  pru_adc_userspace.c  in the Beaglebone. 
I thought it is supposed to be executed in a cross-compilation environment.

I ended up installing processor-sdk-am335x on my linux desktop and compiled 
successfully. Then I copied the generated file back to BBB wireless. But 
when I tried to run the program, it shows the following error. 

Reading voltage at ADC Channel: 5
/dev/rpmsg_pru30 could not be opened.
Trying to initialize PRU using sysfs interface.
ERROR: Could not open /dev/rpmsg_pru30

Attached is the excerpt where the problem happened. Could anyone help me 
with some hints of what is going on here? Much appreciated. 


struct shared_struct message;

/* use character device /dev/rpmsg_pru30 */
char outputFilename[] = "/dev/rpmsg_pru30";

/* test that /dev/rpmsg_pru30 exists */
FILE *ofp;
uint16_t returnedVoltage;
ofp = fopen(outputFilename, "r");

if (ofp == NULL) {

printf("/dev/rpmsg_pru30 could not be opened. \n");
printf("Trying to initialize PRU using sysfs interface.\n");

FILE *sysfs_node;
char firmware[] = "/sys/class/remoteproc/remoteproc1/firmware";
char firmwareName[] = "PRU_ADC_onChip.out";
sysfs_node = fopen(firmware, "r+");
if (sysfs_node == NULL) {
printf("cannot open firmware sysfs_node");
return EXIT_FAILURE;
}
fwrite(&firmwareName, sizeof(uint8_t), sizeof(firmwareName),
sysfs_node);
fclose(sysfs_node);

char pruState[] = "/sys/class/remoteproc/remoteproc1/state";
char start[] = "start";
sysfs_node = fopen(pruState, "r+");
if (sysfs_node == NULL) {
printf("cannot open state sysfs_node");
return EXIT_FAILURE;
}
fwrite(&start, sizeof(uint8_t), sizeof(start), sysfs_node);
fclose(sysfs_node);

/* give RPMSG time to initialize */
sleep(3);

ofp = fopen(outputFilename, "r");

if (ofp == NULL) {
printf("ERROR: Could not open /dev/rpmsg_pru30\n");
exit(EXIT_FAILURE);
}
}





-- 
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 beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/1d43aa7b-0e94-4431-9e31-13545213940bn%40googlegroups.com.

Reply via email to