中文字幕第二一区_久久久久在线视频_精品国产自在现线看久久_亚洲精品一区二区三区电影网

產品分類

當前位置: 首頁 > 產品應用

類型分類:
科普知識
數據分類:
產品應用

NXP iMX7 M4核心PWM驅動開發

發布日期:2022-04-27 點擊率:151

  • 關鍵詞: ARM FreeRTOS PWM

  • 摘要:在早先的一篇文章已經介紹過基于NXP iMX7 異構多核架構進行開發調試,本文就延續這一篇文章的介紹,以PWM功能為示例著重介紹在iMX7 多核架構里面的M4核心上面開發驅動的方式。



1). 簡介

在早先的一篇文章已經介紹過基于NXP iMX7 異構多核架構進行開發調試,本文就延續這一篇文章的介紹,以PWM功能為示例著重介紹在iMX7 多核架構里面的M4核心上面開發驅動的方式。


而本文所演示的ARM平臺同樣來自于Toradex 基于NXP iMX7 ARM處理器的Colibri iMX7 ARM嵌入式平臺。


2. 準備

a). ColibriiMX7S ARM核心版配合Colibrievaluation Board,分別連接A7核心默認調試串口UART1(載板X27)和M4核心默認調試串口UART2(載板X25上)到開發主機方便調試,另外由于iMX7S只支持一個USB接口,需要通過載板X30連接一個USB Hub后來擴展鍵盤鼠標外設。更多關于Colibri iMX7的說明請參考Datasheet和Linux開發上手指南。


b). Colibri iMX7A7核心系統使用Toradex官方發布的EmbeddedLinux,更新方法請參考這里。


c). 另外,由于本文演示示例使用到了載板上面PWM驅動LED和按鍵資源,需要連接如下:

X10 SODIMM-28 -> X21LED1

X10 SODIMM-133 -> X21SW6


d). SEGGER J-link 仿真器,USB一端連接開發主機,JTAG一端連接載板X13。



3). Colibri iMX7 M4核心FreeRTOS基本資料

a). Colibri iMX7 架構基本說明請參考如下:

 https://developer.toradex.cn/knowledge-base/freertos-on-the-cortex-m4-of-a-colibri-imx7


b). 本示例中M4核心運行FreeRTOS v8系統,相關的源代碼和sample程序請從下面git下載:

http://git.toradex.cn/cgit/freertos-toradex.git/


c). 基本的SDK配置和編譯請參考如下:

https://developer.toradex.cn/knowledge-base/freertos-on-the-cortex-m4-of-a-colibri-imx7#Linux_support


d). 編譯好的M4 firmware如何在Colibri iMX7上面加載運行請參考如下:

https://developer.toradex.cn/knowledge-base/freertos-on-the-cortex-m4-of-a-colibri-imx7#Running_a_Firmware_on_CortexM4


e). 幾個自帶的sample代碼簡單說明請參考如下:

https://developer.toradex.com/knowledge-base/freertos-on-the-cortex-m4-of-a-colibri-imx7#Examples



4). Colibri iMX7 M4核心FreeRTOS PWM驅動開發

a). 在上一章節中提到的iMX7 M4 FreeRTOS源代碼中,已經包含了一些接口的驅動示例,比如GPIO,UART,I2C,Flexcan等,但并沒有包含PWM部分,因此我們需要手動添加PWM驅動。


b). 首先我們要找到提供iMX7芯片核心寄存器定義的macrocode文件,獲取PWM相關寄存器定義以及做細微調整。

./ 文件為platform/devices/MCIMX7D/include/MCIMX7D_M4.h

這個文件是整個iMX7 M4 FreeRTOS代碼最核心的文件之一,里面定義了所有芯片寄存器macro code,具體的寄存器功能說明需要參照 NXP iMX7 Reference Manual文檔。

./ 在這個文件里面,如下”PWM Peripheral Access Layer”開始的部分定義了PWM相關的寄存器,是最關鍵的部分。

-----------------------------

 -- PWM Peripheral Access Layer


typedef struct {

__IO uint32_t PWMCR;                                 

__IO uint32_t PWMSR;                                 

__IO uint32_t PWMIR;                                 

__IO uint32_t PWMSAR;                                

__IO uint32_t PWMPR;                                 

__I   uint32_tPWMCNR;                                

} PWM_Type, *PWM_MemMapPtr;

-----------------------------

./ 在這里,為了后面PWM驅動配置方便,我們做了如下patch

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/MCIMX7D_M4.patch


c). 然后是關于CCM(ClockControl Module)驅動配置頭文件,添加PWM所需要的clock源

./ 文件為 - platform/drivers/inc/ccm_imx7d.h


./ 如下patch,增加PWM所需clock gate

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/ccm_imx7d.patch


d). 接下來就是在 ”plaftform/drivers/inc” 和 ”platform/drivers/src” 下分別增加PWM驅動頭文件”pwm_imx.h” 和源文件 ”pwm_imx.c”,完成PWM相關基本寄存器的讀寫操作等基本功能函數的實現。

./ pwm_imx.h 文件代碼如下

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/pwm_imx.h


./ pwm_imx.c 文件代碼如下

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/pwm_imx.c



5). Colibri iMX7 M4核心FreeRTOSPWM驅動應用示例

a). 在上面章節基本驅動配置好之后,我們就可以調用驅動進行示例開發了。本文就簡單演示通過一個GPIO按鍵來動態調整PWM輸出占空比的示例。本示例所使用的GPIO Key為examples里面已經配置的”BOARD_GPIO_KEY_CONFIG”,PWM使用為PWM2。


b). 首先進入 “examples/imx7_colibri_m4”目錄,對幾個基本文件進行修改適配

./ board.h – 這個文件定義了當前examples下所有示例所涉及到的接口,中斷,clock等定義,因此需要將PWM2相關定義添加進來,如下面patch。

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/board.patch


./ pin_mux.h 和pin_mux.c – 定義了除了GPIO之外的所有示例所涉及的接口功能的對應管腳的Pin Mux配置,這里我們將PWM2的管腳配置添加進來,如下面patch。GPIO管腳的Pin Mux配置在gpio_pins.h/gpio_pins.c 中定義。

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/pin_mux.patch


c). 然后再創建 ”pwm_imx” 目錄,為了方便,可以復制同一目錄下的 gpio_imx目錄后進行修改。

./ hardware_init.c – 硬件初始化,board,GPIO/PWM RDC/Clock等,代碼如下

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/pwm_imx/hardware_init.c


./ main.c – 主程序文件,包含三個子程序和main主程序,三個子程序分別負責GPIO初始化,GPIO Key按鍵響應處理以及PWM中斷Handler,main主程序完成了對GPIO和PWM初始化配置后,在每次按鍵的時候將PWM輸出占空比從25%-50%-75%之間循環,具體代碼如下:

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/pwm_imx/main.c


./ 最后修改“armgcc/CMakeLists.txt” 文件,將所有新創建的文件包含進去,然后進行編譯,具體內容如下:

https://github.com/simonqin09/iMX7_M4_PWM_Driver/blob/master/pwm_imx/armgcc/CMakeLists.txt


./ 對iMX7 M4 FreeRTOS代碼進行debug的方法請參考這里,本文就不再贅述。



6). Colibri iMX7 M4 PWM驅動示例部署

a). 在部署之前,首先需要確保將本文所使用的PWM2 從iMX7 A7 核心Linux device tree中disable,以免發生資源沖突。有兩種方法如下:

./ 參考這里下載A7 Linux kernel源代碼,再參考這里修改device tree后重新編譯部署。


./ 可以直接在uboot中通過”fdt_fixup” 環境變量來臨時禁止某個外設

-----------------------------


# ubipart ubi

# ubiread ${fdt_addr_r} dtb

# fdtaddr ${fdt_addr_r}

# fdtlist


# fdtlist /soc/aips-bus@30400000/pwm@30670000


# setenvfdt_fixup ‘fdt addr ${fdt_addr_r} && fdt rm /soc/aips-bus@30800000/spba-bus@30800000/serial@30890000&& fdt rm /soc/aips-bus@30400000/pwm@30670000’

-----------------------------


b). 然后就可以參考上面的相關文檔或者之前的文章進行加載M4 firmware運行了

./ 程序開始運行,如下示波器測量數據所示,PWM2輸出周期為500ms(周期來自main主函數文件里面的配置),占空比為25%,從LED等可以看到亮的時間比滅的時間較短。


./ 然后按動載板按鍵SW6一次,PWM2 輸出周期不變,占空比會變成50%。

iMX7%20M4核心PWM驅動開發_web.files/image002.png" height=" 170px" width=" 283px"/>


./ 再次按動載板按鍵SW6一次,PWM2 輸出周期不變,占空比會變成75%。


./ 以后每次按鍵都會循環上述過程。



7). 總結

如上述示例,iMX7 M4 核心可以非常方便的開發外設驅動并進行調用,尤其是基于FreeRTOS,相對于直接配置寄存器就更直觀寫,代碼也更具備靈活性和重用性。


下一篇:

上一篇: 索爾維全系列Solef?PV

推薦產品

更多
中文字幕第二一区_久久久久在线视频_精品国产自在现线看久久_亚洲精品一区二区三区电影网

      9000px;">

          一区二区三区欧美视频| 最新热久久免费视频| 国产精品一二二区| 蜜臀久久99精品久久久久宅男 | 亚洲免费三区一区二区| 日本一区二区三区国色天香 | 91麻豆福利精品推荐| 成人精品高清在线| 成人a级免费电影| av成人免费在线观看| 成人黄色a**站在线观看| 成人永久免费视频| 国产凹凸在线观看一区二区| 国产成人综合网| 成人av中文字幕| 一本色道久久综合亚洲91 | 久久九九99视频| 久久综合视频网| 国产片一区二区| 国产精品国产自产拍在线| 《视频一区视频二区| 亚洲电影一区二区三区| 秋霞电影一区二区| 国产成人午夜片在线观看高清观看 | 懂色av中文一区二区三区| aaa欧美日韩| 欧美精品日日鲁夜夜添| 日韩欧美国产三级电影视频| 中文字幕 久热精品 视频在线| 亚洲天堂精品在线观看| 亚洲高清视频在线| 国产美女娇喘av呻吟久久| 91影视在线播放| 欧美一二三区在线观看| 国产精品久久看| 香蕉加勒比综合久久| 国产91精品免费| 91九色最新地址| 久久综合狠狠综合久久激情 | 337p日本欧洲亚洲大胆精品| 国产精品久久综合| 日韩av中文在线观看| 波多野结衣精品在线| 日韩美女视频在线| 亚洲人成小说网站色在线| 天天免费综合色| 成人免费视频一区| 91精品国产综合久久小美女 | 久久精品国产亚洲a| 99精品久久久久久| 日韩丝袜情趣美女图片| 亚洲黄色av一区| 成人免费毛片app| 日韩精品最新网址| 亚洲国产一二三| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 成人免费在线播放视频| 欧美aaaaa成人免费观看视频| 91首页免费视频| 中文av一区特黄| 国产在线不卡视频| 日韩亚洲欧美一区| 天天爽夜夜爽夜夜爽精品视频| aaa亚洲精品| 国产日韩欧美不卡在线| 国产综合一区二区| 日韩一区二区三区精品视频| 亚洲资源中文字幕| 色哟哟亚洲精品| 国产精品国产a| 成人精品鲁一区一区二区| 精品第一国产综合精品aⅴ| 日本怡春院一区二区| 欧美电影在线免费观看| 亚洲小说欧美激情另类| 91久久精品一区二区三| 亚洲美女屁股眼交3| 97久久精品人人做人人爽50路| 欧美国产一区二区| 国产一区二区导航在线播放| 亚洲成人一区在线| 精品少妇一区二区三区日产乱码 | 欧美性色黄大片| 久久精品视频一区二区三区| 国产麻豆精品theporn| 亚洲免费三区一区二区| 日韩欧美国产午夜精品| 91视频91自| 国产一区二区美女诱惑| 亚洲综合色噜噜狠狠| 日韩一二三四区| 在线播放亚洲一区| 91亚洲精品乱码久久久久久蜜桃| 视频精品一区二区| 一区二区日韩av| 久久亚洲私人国产精品va媚药| 欧美日韩一区高清| www.日韩在线| av激情亚洲男人天堂| 国产精品自拍一区| 国产精品一区二区三区网站| 国产精品一区在线观看乱码 | 激情偷乱视频一区二区三区| 日韩—二三区免费观看av| 成人免费看视频| av色综合久久天堂av综合| 欧美色偷偷大香| 久久er精品视频| 精品影视av免费| 免费观看一级欧美片| 久久久久久毛片| 99久久久无码国产精品| 亚洲成在线观看| 久久日一线二线三线suv| 国产99久久久国产精品免费看| 亚洲色大成网站www久久九九| 欧美日韩一区中文字幕| 中文字幕一区三区| 伊人婷婷欧美激情| 舔着乳尖日韩一区| 日韩福利视频网| 一本久久a久久精品亚洲| 色综合久久天天| 欧美日韩你懂得| 偷拍与自拍一区| 欧美丝袜自拍制服另类| 国产三区在线成人av| 不卡av在线免费观看| 亚洲bt欧美bt精品| 日本一区二区三区电影| 欧美日韩一区高清| 不卡在线观看av| 极品少妇一区二区| 调教+趴+乳夹+国产+精品| 国产精品久久99| 久久理论电影网| 91精品中文字幕一区二区三区| 91麻豆swag| 成人a级免费电影| 国产精品主播直播| 亚洲成人精品一区二区| 亚洲同性同志一二三专区| 2欧美一区二区三区在线观看视频| 欧美午夜片在线观看| 91女人视频在线观看| 国产99久久久国产精品潘金| 激情综合网激情| 日韩精品一级二级| 香蕉av福利精品导航| 亚洲国产一区视频| 亚洲欧美日韩精品久久久久| 国产精品久久毛片av大全日韩| 久久久久久久综合狠狠综合| 日韩欧美国产综合一区| 欧美丰满嫩嫩电影| 欧美肥胖老妇做爰| 欧美日韩综合一区| 欧美最猛性xxxxx直播| 色屁屁一区二区| 99国产精品久久久久久久久久久| 东方aⅴ免费观看久久av| 国产激情一区二区三区桃花岛亚洲| 麻豆freexxxx性91精品| 日韩黄色在线观看| 久久精品久久精品| 激情小说欧美图片| 国精产品一区一区三区mba视频| 国内精品久久久久影院色| 韩国精品主播一区二区在线观看 | 欧美视频一区二区| 色女孩综合影院| 欧美午夜电影网| 91精品国产手机| 日韩免费高清av| 久久综合资源网| 中文字幕av一区 二区| 国产精品久久福利| 一个色在线综合| 视频在线观看一区二区三区| 美女在线一区二区| 国产裸体歌舞团一区二区| 丝袜亚洲另类欧美| 国产在线不卡视频| 91视频精品在这里| 欧美日本在线看| 精品区一区二区| 中文字幕一区不卡| 亚洲小说欧美激情另类| 久久av中文字幕片| 不卡av电影在线播放| 制服丝袜亚洲色图| 久久久影院官网| 亚洲自拍偷拍九九九| 精品一区二区三区在线播放 | 久久久www成人免费无遮挡大片 | 精品久久人人做人人爱| 国产精品嫩草久久久久| 天天色图综合网| 成人妖精视频yjsp地址| 欧美精品粉嫩高潮一区二区|