我的內核學習筆記16:海思Hi3516平臺GPIO使用記錄

本文介紹海思平臺 Hi3516 的 PWM 使用,包括手冊介紹及用戶空間控制。

一、PWM 概覽

芯片一共提供2路獨立的 PWM,分別以 PWM0 和 PWM1 稱呼。PWM 時鐘有3種選擇:3MHz、24MHz 和50MHz。週期和高電平拍數使用 26 比特存儲,最高支持 25MHz(即50MHz/2)輸出,最低約 0.045Hz(即3MHz/ 67108863)輸出。輸出脈衝個數可指定,也可一直輸出,如是前者,最大個數爲 1023,因其計數器爲 10 比特。
PWM0 基地址爲 0x1207_0000, PWM1 基地址爲 0x1207_0020,兩者地址相差 0x20。除此外,相關寄存器偏移和控制方式,完全一樣,故在驅動中可封裝爲統一接口(參考文後資源)。

二、PWM 控制

2.1 控制方式

  • 將 PWM0 或 PWM1 引腳複用爲 PWM。
  • PWM內部工作於 3MHz或者 24MHz或者 50MHz。
  • 選擇合適的時鐘源,通過計算得到需要的週期數和高電平拍數。
  • 將對應數據寫入PWMX_CFG0、PWMX_CFG1、PWMX_CFG2 寄存器。
  • 對PWMX_CTRL bit[0]寫入 1,使能PWM 輸出。
  • 如果是一直輸出,則 PWMX_CFG2 可不設置,但 PWMX_CTRL bit[2] 需寫入 1。
    注意,默認時鐘是3MHz,並且默認開啓了,其值爲0x2dc6c0,可用此計算週期。如果需要高頻率的,則需要設置高的時鐘源。

2.2 示例

himm 0x111F0028 0x601  // 複用GPIO6_7爲PWM1,其它默認
himm 0x111F0028 0x201  // 複用GPIO6_7爲PWM1,切換快 其它默認

## 如果設置時鐘,其基地址爲0x120101bc 默認是3MHz,打開

默認時鐘,頻率爲1:
CFG0 週期  himm  0x12070020  0x2dc6c0  默認399
CFG1 佔空比高電平 himm 0x12070024 0x16E360  默認199
CFG2 個數  himm 0x12070028  0xff
CRTL 控制 himm  0x1207002c  0x1
一直輸出:himm  0x1207002c  0x5

編寫程序,讀取PWM1 狀態 2 的值:

[1970-01-01 00:40:22] state2: 0xc14ff
[1970-01-01 00:40:26] state2: 0xbd4ff
[1970-01-01 00:41:14] state2: 0x8d4ff
[1970-01-01 00:41:43] state2: 0x6f4ff
[1970-01-01 00:41:47] state2: 0x6c4ff
[1970-01-01 00:42:13] state2: 0x514ff
[1970-01-01 00:42:22] state2: 0x494ff

低3個不變者:
4表示0100 0爲固定數目方波,1表示正在輸出方波,00和後面的表示數目。
ff:表示數目爲255個(用戶設定)。

未完事宜

設置頻率較低,是因爲想利用萬用表觀察電平變化。在上述示例中,GPIO6_7 由低變高,再由高變,偶爾會出現 0.45 這樣的值,由於沒有示波器,由於僅作實驗,未深入研究波形。僅證明可輸出不同電平。

參考資料

海思 Hi3516DV300 SoC 用戶指南。
https://github.com/Tvirus/hisi_pwm_driver

李遲 2020.6.23 週二  晚

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章