I am glad to have helped a little bit. Stick with it. When it clicks and you start really moving forward I think you'll be pleased.
Can you share the changes to the Makefile that you made? I'm curious if it might help me. Right now I am reading the ADC every 2.7ms. I'm reading three channels. I include the step id too and check that. I am using switch-case to check the step and put the analog input into the right variable in my code. It might be slighter faster with an if-elseif but I like the neatness of the switch-case and until it causes me timing problems, I'm sticking with it. I am also fairly certain the ADC can be read faster. I have the ADC in one-shot mode and delay before I kick it off again. I've also run this with no averaging, 4 averages, and 16 averages and it makes very little difference in timing for me. Walter On Tuesday, May 4, 2021 at 11:33:51 AM UTC-4 [email protected] wrote: > Hi Walter, > > Thank you so much for the reply. I think my setup is exactly the same as > what you have (win10 and BBB wireless). That really motivated me to see > somebody else successfully run the system with the same setup. > I actually made some preliminary progress after two nights brooding and I > am able to read out ADC data through rpmsg. Thanks a lot for your tips. > > I think the problem is still in the makefile and environment. As you > mentioned, you are using makefile from PRUcookbook while I started off with > TI's built-in makefile. I believe there is a couple of slight difference > between Debian system and TI SDK environment which turns out to be critical > in compiling. I carefully compared the difference between two makefiles and > created one which is close to the makefile in the PRUcookbook. That works > like a charm. > > Next step I also want to explore precise timing and see how fast the adc > can run. May I ask what is the speed you are reading out from ADC? > > Regards, > Cheng > > 在2021年5月3日星期一 UTC-4 上午11:24:23<[email protected]> 写道: > >> I just went through this pain and the people in this group were awesome >> help. >> >> I needed to read three analog inputs and it was a bear but once I got it, >> it has been going well. >> >> You don't mention the OS of your development platform or I may have >> missed it. I'm on a Windows 10 box and using a BBB Wireless. TI's entire >> learning system for this expects a Linux development platform so it's not >> as useful as it could be if you are on Windows. I didn't want to go to the >> trouble of even bringing up a virtual Linux on my Windows box for this. I >> did install Code Composer Studio (CCS) from TI, but gave up on it. There's >> no easy way to transfer your compiled firmware to the BBB from within it >> according to TI. So I just do everything on the Beagle and it meets my >> needs. >> >> I use the cloud9 IDE that ships with the BeagleBones for coding both the >> ARM and PRU code. This environment compiles the ARM-side code and executes >> it just like any normal host (aka Linux, aka ARM) program just fine. >> However, to compile the PRU code and load it I go over to a PUTTY session >> and use the make files from Mark Yoders' PRU Cookbook ( >> https://markayoder.github.io/PRUCookbook/) . My process is clunky but >> my programs aren't huge or extremely complex (yet) and this works for me. >> I don't have and don't want to invest in a debug probe so debugging the PRU >> code can be a pain and slow. The only option really is to use RPMsg almost >> like printf to send messages back at key points in the PRU code to let me >> know where it is executing and what's happening. (Purists and more >> advanced developers are barfing and laughing at me right now I am sure.) >> >> I strongly encourage you to get the Technical Reference Manual for the TI >> ARM335x and specifically spend time with the Touchscreen Controller >> chapter. If you need precise timing, you'll want to spend time in the >> Industrial Ethernet Peripheral chapter too. These are powerful tools once >> you understand them. >> >> Also, get the PRU Optimizing C/C++ Compiler manual from TI and go through >> it. One thing that really tripped me up was their implementation of the >> __far keyword. GCC doesn't recognize that and I didn't understand what >> was going on at first. >> >> As Mark commented, some people encourage using remoteproc, some encourage >> using libpruio and some still use the uio. TI supports remoteproc and I >> expect them to be around so I went with remoteproc. It may have its >> drawbacks but it is working just fine for me. I can't comment on the other >> two as I have not tried them. Also, I've found the TI E2E forum's >> moderators to be patient with me as a neophyte. But the Google group's >> members do have wider experience. >> >> FYI - watch out for how TI puts some register settings that cross nibble >> or byte boundaries. It can really bite you! Take a look at the >> STEPCONFIGn registers implementation of averaging to see what I mean. >> >> I hope this helps! >> >> On Saturday, May 1, 2021 at 12:46:03 PM UTC-4 lazarman wrote: >> >>> <<<My first intention is to post in TI E2E support forums >>> <https://e2e.ti.com/>, but it requires a company email to do so. >>> >>> Hello Cheng >>> >>> I want to Help you but it appears my message is lost in translation >>> >>> What it sounds like to me is TI pays these engineers $$ to answer >>> questions and does not want to waste time and $$$ with users that dont >>> follow their well written instructions *which say use SDK Yocto Linux >>> on the ARM for this example.* >>> >>> For me I start with a working example with instructions and >>> documentation then modifyit >>> >>> If I undertsand correctly you have *never* had an example working >>> >>> If you like breaking examples and working on projects that ONLY works >>> from a unix script and hides all the details then this is the correct group >>> to to ask questions (-: >>> >>> I suggest you try the example *you found* following the intructions >>> exactly. if you cant or wont do that switch to DEbian/Cookbook >>> >>> But if you do the latter I suggest don't change things follow the >>> instructions >>> >>> What is interesting is a Linux C application program should work >>> correctly if it was coded generic especially when both Linux variants are >>> for the same chip. Trying to figure out what is different between Linux >>> variants to me is not productive its not my focus for you maybe it is. >>> >>> Perhaps the Linux in the SDK was configured differently which implies it >>> handle PRU slightly different Im not surprised by this. >>> >>> Perhaps you can find what's different that may be a valid approach that >>> works for you and maybe someone can help. I think Dennis gave you a good >>> clue. >>> >>> I will watch the thread hopefully I can be of help should you choose to >>> follow the path E2E and the SDK layed out for you >>> >>> Cheers >>> >>> On Friday, April 30, 2021, 07:52:09 PM CDT, Cheng Chen < >>> [email protected]> wrote: >>> >>> >>> Hey Mark, >>> >>> Thanks for spending time for replying. I really appreciate it. >>> I totally agree with you that one should spend time investigating first. >>> I apologize if they are dumb questions, but I have stuck there for two >>> weeks. I am more a circuit guy and just started picking up Beaglebone as a >>> hobby and potential career expansion. >>> >>> My first intention is to post in TI E2E support forums >>> <https://e2e.ti.com/>, but it requires a company email to do so. If >>> this particular .org is not a good place for rookie questions, would you >>> please advise some place for suitable for discussion? >>> >>> Regarding to the documents, are you referring to processor SDK Linux >>> Software Developer's guide? If that is the one, I did follow its >>> instructions, but maybe I missed something. I will go over it again. If >>> that's not the one, which document are you referring to? I also went >>> through PRUcookbook and Exploring BeagleBone by Derek Molly. Not a lot are >>> mentioned regarding this topic. >>> >>> The code is built-in in the Beaglebone Black, this is one of the reasons >>> I am confused why it cannot be compiled. One can also download freely from >>> TI github ( >>> https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/ >>> ). >>> >>> Again thanks for the advice and suggestion. I am very glad that there is >>> such a nice place that I can call for help and I hope after some practice I >>> am also able to contribute here. >>> >>> Regards, >>> Cheng >>> >>> 在2021年4月30日星期五 UTC-4 下午5:09:01<lazarman> 写道: >>> >>> Hello >>> >>> I know the code. It's all explained in the SDK documention. I also like >>> these examples. >>> Your asking questions about an SDK that's supported by Texas >>> Instruments. You do understand this .org group you posted in may contain TI >>> employees but is NOT TI support it's Beagle board Debian. >>> >>> I think if you read the documents you will understand the answers >>> >>> I'm sure you could compile this with some work the sdk instructions >>> talk about This. >>> >>> Hypothetical question ❓ >>> If the instructions told you a virtual box build was not supported and >>> not recommended would you use one anyway and then ask the person who told >>> you not too do this why it doesn't work. >>> >>> I'm struggling to be nice in this reply. >>> >>> I remember asking questions as a young engineer that clearly showed I >>> made zero effort to research anything. >>> >>> Then one day I got some really critical replies about my skills. >>> >>> Do some reading then if stuck ask questions >>> >>> Or better yet follow what the sdk instructions suggest. >>> >>> If you found this code on internet and don't have a TI account or are >>> not eligible for ITAR restrictions to download the sdk you have a big >>> problem. >>> >>> I see you have a Gmail account >>> >>> >>> >>> >>> >>> >>> Sent from Yahoo Mail on Android >>> <https://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature> >>> >>> On Fri, Apr 30, 2021 at 3:09 PM, Cheng Chen >>> <[email protected]> wrote: >>> >>> 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 [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/beagleboard/1d43aa7b-0e94-4431-9e31-13545213940bn%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/beagleboard/1d43aa7b-0e94-4431-9e31-13545213940bn%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >>> -- >>> 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]. >>> To view this discussion on the web visit >>> >>> https://groups.google.com/d/msgid/beagleboard/39813de1-fa27-41d7-9422-7ef375ae36b4n%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/beagleboard/39813de1-fa27-41d7-9422-7ef375ae36b4n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- 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]. To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/ca296f29-c476-45fc-906d-e24595453270n%40googlegroups.com.
