Linux AM437X timer产生PWM

来源:互联网 发布:vue push数组 编辑:程序博客网 时间:2024/06/05 04:51
step1:Enable timer4's clock in CM_PER 
 # devmem2 0x44DF8D40 w 0x2  
step2:select clock source in CM_DPLL (default 0x01 select CLK_M_OSC=24MHz)
 # devmem2 0x44df420c w 0x1    
step3:set the Pinmux for timer4
要加载驱动后才能使用。。。驱动会配置引脚
/*
设备树引脚配置:
infrared_pins:infrared_pins{
pinctrl-single,pins = <
0x270 ( INPUT_EN|MUX_MODE2)  /* D24=XDMA_EVENT_INTR0.timer4  */
>;
};


*/
step4:stop timer4
devmem2 0x48044038 w 0x1842
step5:calculate frequecy
Fs=24000000 Hz

Fd = Fs/(0x100000000-TLDR)
TLDR=0x100000000 -Fs/Fd
TLDR=TCRR
step6:calculate duty 
percent=<1~99>
TMAR=0x100000000-Fs/Fd*(100-percent)
step7:config&start timer4
# Auto-Reload
# Compare Mode Enabled
# Trigger set on overflow
# Toggle Mode
# start timer 
devmem2 0x48044038 w 0x1843

example:512Hz 20% Fs/Fd = 0xB71B
devmem2 0x44DF8D40 w 0x2         -->Enable clock(in CM_PER)
devmem2 0x44df420c w 0x1         -->select clock source in CM_DPLL (default 0x01 select CLK_M_OSC=24MHz)
devmem2 0x48044038 w 0x1842      -->stop timer
devmem2 0x44e00510 w 0x12        -->select the clk source for timer4 counter(CM_DPLL) 
devmem2 0x48044040 w 0xFFFF48E5  -->set TLDR(STEP5)
devmem2 0x4804403C w 0xFFFF48E5  -->set TCRR(STEP5)
devmem2 0x4804404C w 0xFFFF6D84  -->set TMAR(STEP6)

devmem2 0x48044038 w 0x1843      -->config&start timer4


参考: 

http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/p/59806/365348.aspx#365348

http://junkbox.wpblog.jp/2015/07/01/beaglebone-black%E3%81%AEdmtimer%E3%81%A7timer%E5%87%BA%E5%8A%9B%E3%82%92%E8%A1%8C%E3%81%86/

https://insight.io/github.com/torvalds/linux/commit/6604c6556db9e41c85f2839f66bd9d617bcf9f87#drivers/pwm/pwm-omap-dmtimer.c

上层应用直接操作物理地址(寄存器),可使用devmem2 :http://sources.buildroot.net/devmem2.c

http://d.hatena.ne.jp/rti7743/20131219/1387447643

0 0
原创粉丝点击