> On Apr 2, 2017, at 11:32 AM, Justin Pearson <justin.pear...@gmail.com> wrote: > > Hi Jelena, thanks for your message. See my inline responses: > > On Sun, Apr 2, 2017 at 9:39 AM, Jelena Freiherr <jeli.freih...@gmail.com > <mailto:jeli.freih...@gmail.com>> wrote: > Am Sonntag, 2. April 2017 17:26:10 UTC+2 schrieb Justin Pearson: > > On the 3.18 kernel, I was able to control the PWM with the PRU without > > needing the PRU to initialize the PWM. The trick was to load the PWM capes > > "am33xx_pwm" and "bone_pwm_P8_34" before running the PRU code. (And also > > loading Derek's cape to initialize the pruss.) Loading the capes causes > > some PWM kernel driver to initialize the PWM registers, I assume. Once > > that's done, the PRU just has to tweak a couple registers to change the > > duty cycle. Is this trick what you're referring to when you say "The kernel > > driver should also work"? > > > > Would this trick of pre-loading the capes also work in a 4.x kernel? > > > > Sorry, I don't know any of the overlays you mentioned. And, as I said, I > never used any kernel driver for GPIO, QEP, CAP, PWM or ADC. Instead I > use an all-in-one driver (which I named libpruio), that handles all that > stuff easier, more flexible and faster than any kernel driver framework. > In order to get PWM output, there're just a few registers to set (see > file pruio_pwmss.p in the package), so no need for all that multi source > overhead. > > Thank you for mentioning libpruio. I don't know very much about how device > tree overlays interact with linux kernel drivers, so until I can find a good > description of that, I'm inclined to use a more wasteful (but > well-documented) method of configuring the I/O. Do you know of a good way to > learn the details of how a device tree overlay is used by the kernel to > configure the SoC registers? So far I haven't found much good documentation > besides Derek Molloy's book. > > BTW: You're developing PRU code and you're using a real time kernel. May > I ask why? Since the PRUSS are very efficient for real time tasks, I see > no reason for using additionally a real time kernel. > > My team is working on a time-synchronization platform that aims to > synchronize devices' clocks on a network. It's sort of like NTP, but allows > users to specify the resolution of the time synchronization that they > require. Here is a paper on it for more info: > > https://users.ece.cmu.edu/~agr/resources/publications/RTSS16-timeline.pdf > <https://users.ece.cmu.edu/~agr/resources/publications/RTSS16-timeline.pdf> > Hi Justin
Are you using a disciplined clock on the BBB? Regards, John > We need the real-time Linux kernel for precise time synchronization, so > that's why we're using a real-time kernel. Additionally, we're using the PRU > to get precise I/O for some distributed control systems. > > Best, > Justin > > > > Regards > > PS: > I just checked Derek's cape. From a first glance I found the line > > compatible = "ti,beaglebone", "ti,beaglebone-black"; > > is wrong. The order is important, most specific first. It must be > > compatible = "ti,beaglebone-black", "ti,beaglebone"; > > And it does more than just enabling the PRUSS (you're loading > unnecessary overhead). In the libpruio package there's the tool > dts_custom, which you can use to easy create, compile and install > minimal custom overlays (single source, no overhead). > > > Am 02.04.2017 um 17:25 schrieb Justin Pearson: > > Thank you TJF, I never would have known about that register if you hadn't > > mentioned it. One more question (see below): > > > > On Sat, Apr 1, 2017 at 9:20 PM, TJF <jeli.freih...@gmail.com > > <mailto:jeli.freih...@gmail.com>> wrote: > > > >> Am Samstag, 1. April 2017 22:18:30 UTC+2 schrieb Justin Pearson: > >>> > >>> Are you saying that the only way to get PWM in a 4.x kernel is by > >>> modifying am33xx-clocks.dtsi? > >>> > >> > >> No. The kernel driver should also work (untested). But in your case > >> (controlling the PWM subsystem by PRU code) you have to modify that file. > >> (Or you can develop a loadable kernel module that writes to the register.) > >> > > > > On the 3.18 kernel, I was able to control the PWM with the PRU without > > needing the PRU to initialize the PWM. The trick was to load the PWM capes > > "am33xx_pwm" and "bone_pwm_P8_34" before running the PRU code. (And also > > loading Derek's cape > > <https://github.com/derekmolloy/exploringBB/blob/master/chp13/overlay/EBB-PRU-Example.dts > > > > <https://github.com/derekmolloy/exploringBB/blob/master/chp13/overlay/EBB-PRU-Example.dts>> > > to > > initialize the pruss.) Loading the capes causes some PWM kernel driver to > > initialize the PWM registers, I assume. Once that's done, the PRU just has > > to tweak a couple registers to change the duty cycle. Is this trick what > > you're referring to when you say "*The kernel driver should also work*"? > > > > Would this trick of pre-loading the capes also work in a 4.x kernel? > > > > Thanks for all your help! > > Justin > > > > > > > > > >> > >> > >>> Also, how can I verify whether the register is set correctly? > >>> > >> > >> The PRU cannot write to the Control Module registers, but it can read > >> them. Get a word from 0x44E10664 and pass it to the ARM code. Bits 0:2 must > >> be set to get output from all PWM subsystems. In your case bit 1 set is > >> sufficient to get ehrpwm1B working. > >> > >> Regards > >> > >> -- > >> For more options, visit http://beagleboard.org/discuss > >> <http://beagleboard.org/discuss> > >> --- > >> You received this message because you are subscribed to a topic in the > >> Google Groups "BeagleBoard" group. > >> To unsubscribe from this topic, visit https://groups.google.com/d/ > >> <https://groups.google.com/d/> > >> topic/beagleboard/LZhL4S9taic/unsubscribe. > >> To unsubscribe from this group and all its topics, send an email to > >> beagleboard+unsubscr...@googlegroups.com > >> <mailto:beagleboard%2bunsubscr...@googlegroups.com>. > >> To view this discussion on the web visit https://groups.google.com/d/ > >> <https://groups.google.com/d/> > >> msgid/beagleboard/3041a94e-58ab-4c28-ad29-ad3a2b90315b%40googlegroups.com > >> <http://40googlegroups.com/> > >> <https://groups.google.com/d/msgid/beagleboard/3041a94e-58ab-4c28-ad29-ad3a2b90315b%40googlegroups.com?utm_medium=email&utm_source=footer > >> > >> <https://groups.google.com/d/msgid/beagleboard/3041a94e-58ab-4c28-ad29-ad3a2b90315b%40googlegroups.com?utm_medium=email&utm_source=footer>> > >> . > >> > >> For more options, visit https://groups.google.com/d/optout > >> <https://groups.google.com/d/optout>. > >> > > > > -- > For more options, visit http://beagleboard.org/discuss > <http://beagleboard.org/discuss> > --- > You received this message because you are subscribed to a topic in the Google > Groups "BeagleBoard" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/beagleboard/LZhL4S9taic/unsubscribe > <https://groups.google.com/d/topic/beagleboard/LZhL4S9taic/unsubscribe>. > To unsubscribe from this group and all its topics, send an email to > beagleboard+unsubscr...@googlegroups.com > <mailto:beagleboard%2bunsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/beagleboard/85f0fe91-f65e-82f8-c6a0-5c8d133db5c4%40gmail.com > > <https://groups.google.com/d/msgid/beagleboard/85f0fe91-f65e-82f8-c6a0-5c8d133db5c4%40gmail.com>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. > > > -- > For more options, visit http://beagleboard.org/discuss > <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 > <mailto:beagleboard+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/beagleboard/CABCHBhKKct1cK1dM%2Bh%2BVgLNomvD1i2iPF1rPpXKi_RmmXi-3ag%40mail.gmail.com > > <https://groups.google.com/d/msgid/beagleboard/CABCHBhKKct1cK1dM%2Bh%2BVgLNomvD1i2iPF1rPpXKi_RmmXi-3ag%40mail.gmail.com?utm_medium=email&utm_source=footer>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- 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/FDB43AE2-3CD3-4B65-A46C-D46F9FB78BD5%40gmail.com. For more options, visit https://groups.google.com/d/optout.