2014-01-20 157 views
1

我正在使用SAMA5D31-EK板,並試圖讓SAMA5D31內部PWM控制器通過PIO引腳輸出信號:特別是PE31。該主板運行Linux 3.10.0+,並使用sysfs接口管理PWM。這個界面似乎正確執行:我可以創建設備(寫入'導出'文件),激活它,更改period和duty_cycle文件的內容(當讀回它們包含寫入它們的最新值時)。 至於PIO PE31的配置我改變拱/ ARM /開機/ DTS/sama5d3.dtsi文件,包括PWM0的sama5d3 pwm拒絕工作

pwm0 { 
    pinctrl_pwml1: pwml1-0 { 
    atmel,pins = 
     <AT91_PIOE 31 AT91_PERIPH_B AT91_PINCTRL_NONE>; /*PE31*/ 
    }; 
}; 
       pwm0: [email protected] { 
         compatible = "atmel,sama5d3-pwm"; 
         reg = <0xf002c000 0x300>; 
         interrupts = <28 IRQ_TYPE_LEVEL_HIGH 4>; 
         #pwm-cells = <3>; 
         status = "disabled"; 
       }; 

狀態從「已禁用」,以「好」在sama5d31也發生了變化。 dts文件

因特網上的某處我已經瞭解到,這種行爲可能與這些dts文件中缺少的時鐘定義有關。我讀過的其他地方需要升級到3.11或3.12內核。

任何幫助將不勝感激。

謝謝, 瓊。

+0

最後我成功具有PWM工作;或者更精確地說:通過PIO引腳使PWM輸出信號可用。 – user3215837

回答

1

最後,我設法讓PWM工作;或者更確切地說:通過GPIO引腳獲取PWM輸出信號。

上面的dts代碼有兩個問題。首先,PE31(選定的GPIO引腳)正被另一個進程使用。但更重要的是:PWM控制器節點缺少一些pinctrl定義和pwm單元的正確數量(5)。它應該閱讀:

   pwm0: [email protected] { 
         compatible = "atmel,sama5d3-pwm"; 
         reg = <0xf002c000 0x300>; 
         interrupts = <28 IRQ_TYPE_LEVEL_HIGH 4>; 
         pinctrl-names = "default"; 
         pinctrl-0 = <&pinctrl_pwmh1>; 
         #pwm-cells = <5>; 
         status = "disabled"; 
       }; 

BR, 瓊