Hi, I am replying to my own E-mail. I amanaged to get PWM to work on 3.18.1-bone1. I used the code from:
https://github.com/SaadAhmad/beaglebone-black-cpp-PWM and the information from: http://hipstercircuits.com/enable-pwm-on-beaglebone-with-device-tree-overlays/ Both these sites have information for 3.8 kernels and assume you have a working Cape manager. For 3.18.1 there is no cape manager. A a Newbie to this here is what I did to get it to go. May not be a correct way, but I do see in /sys/kernel/debug/pwm platform/48304200.ehrpwm, 2 PWM devices pwm-0 ((null) ): pwm-1 (PWM_P8_13 ): requested enabled And on an Osilloscope the expected trace of a swuare wave that I can change the Mark-Space ratio on. There are some newbie things worth nothing here that I did not know until I went through this: 1) 3.8 Kernel Device Tree Overlays ==> change these to XXX.dtsi files (device tree include files) for 3.18.1-bone1. You can do this by hacking out the target, fragment etc. stuff. Note (it took be a while to realize this) DTC also does an OVERLAY with dtsi and dts files too, so it is not limited to just Capemgr overlays. 2) You need to get a good control of the DTB generation of the kernel. Robert C . Nelson has this in his build_kernel.sh script. As shown in this: https://www.mail-archive.com/[email protected]/msg19714.html you can break that out like this: cpp -Wp,-MD,src/arm/.am335x-boneblack.dtb.d.pre.tmp -nostdinc -Iinclude - Isrc/arm -Itestcase-data -undef -D__DTS__ -x assembler-with-cpp -o src/arm/. am335x-boneblack.dtb.dts.tmp src/arm/am335x-boneblack.dts ; dtc -O dtb -o src/arm/am335x-boneblack.dtb -b 0 -i src/arm -d src/arm/. am335x-boneblack.dtb.d.dtc.tmp src/arm/.am335x-boneblack.dtb.dts.tmp ; cat src/arm/.am335x-boneblack.dtb.d.pre.tmp src/arm/.am335x-boneblack.dtb.d. dtc.tmp > src/arm/.am335x-boneblack.dtb.d 3) I found I had to edit the include dtsi files: am33xx.dtsi and am335x-bone-common-pinmux.dtsi to remove conflicts, some of which do not become apparent before you load the kernel and look a dmesg upon boot. 4) in the &am335x_pinmux bit. You can add pins with any name so long as you do not have a label that matches something else already there. 5) in the &ocp bit, if you have more than one device driver, e.g. bone-pinmux-helper that tries to grab a pin as well as your driver, in my case pwm_test, P8_13 then the kernel module fails to load on boot, and dmesg shows errors. Fix this by commenting out conflicts in the device tree files. (Not sure if this is the right way, but it worked for me). 6) You need to know a bit about your silicon. In the TI Sitara AM335x not all the components are switched on by default, you need to "turn on" in the device tree. So as well as configuring the pin, you need to turn on the EHRPWM and Clocks. And make a note of which EHRPWM and which *channel* of the EHRPWM to use for the pin that you want to use PWM on. For P8_13 that is EHRPWM2 Channel 1, sometimes called Channel B. A= 0, B = 1. Internally in the AM335x Ti Sitara, not all bits are connected to all pins, you you need to know a bit about the silicon so that the right internal components are (1) Turned on and (2) connected up. (Note the AM335x manual is almost 5,000 pages!). 7) Understanding what is in your device tree is important. I used the reverse dtb to dts function in the DTC compiler alot. That way you can see if your edits / hacks in all the dtsi and dts files had the desired effect. 8) Egrep-ing in all the am33*.dts* files also helps a lot to see where all the names and labels end up. When I first looked at a full DTS file it looked like someone was randomly bashing a keyboard with something. I soon realized it was his head ... !!! Hope this helps someone. Best, Mike. -- 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]. For more options, visit https://groups.google.com/d/optout.
