环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產品分類

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

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

NXP iMX7 M4核心PWM驅動開發

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

  • 關鍵詞: 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

推薦產品

更多
主站蜘蛛池模板: 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 耐压仪-高压耐压仪|徐吉电气| 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | UV-1800紫外光度计-紫外可见光度计厂家-翱艺仪器(上海)有限公司 | 盐城网络公司_盐城网站优化_盐城网站建设_盐城市启晨网络科技有限公司 | 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 中开泵,中开泵厂家,双吸中开泵-山东博二泵业有限公司 | 慢回弹测试仪-落球回弹测试仪-北京冠测精电仪器设备有限公司 | 机械立体车库租赁_立体停车设备出租_智能停车场厂家_春华起重 | 礼堂椅厂家|佛山市艺典家具有限公司| 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | 双相钢_双相不锈钢_双相钢圆钢棒_双相不锈钢报价「海新双相钢」 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 空气净化器租赁,空气净化器出租,全国直租_奥司汀净化器租赁 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 | 翅片管换热器「型号全」_厂家-淄博鑫科环保 | 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 棕刚玉-白刚玉厂家价格_巩义市东翔净水材料厂 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 天空彩票天下彩,天空彩天空彩票免费资料,天空彩票与你同行开奖,天下彩正版资料大全 |