Port代碼配置內建
先講下底層代碼在哪裡找,後面就不寫了。
所有的底層代碼都在你安裝的NXP 提供的mcal包裡面,我這邊是在c盤下面,src和include就是我們內建需要的代碼。
1、先看一下上次配置生成的代碼
主要分為兩部分,一部分是Port_Cfg.c Port_Cfg.h與Port_PBcfg.c, 我是不太懂這個postbuild和prebuild的分類的,好像是後面那個初始化的時候,生成的那個config是不需要入參的。
我這個是選的postbuild,是以Port_Cfg.c裡面是空的,Port_Cfg.h 裡面主要是一些API的宏的開關,還有一些配置的IO口的索引,這個比較簡單,隻要你配置了,拿出來一看就基本上懂了。
Port_PBcfg.c裡面,基本上都是配置的内容了,包括未使用的管腳,屬性以及需要設定的預設值,最重要的一個表就是所使用的管腳的表。
這裡面就是我要使用的一些管腳配置生成的一個數組。
2、Port代碼內建
內建的話,在那個內建手冊裡面都有寫需要的檔案支援,如果不想去看的話,可以直接編譯,提示你沒有的檔案就去給我的mcal包裡面去搜一下,基本上涉及到其他子產品的都是通用的檔案,比如Base裡面的Port_MemMap.h。最主要的是Port的代碼。
我這裡面就是這些底層檔案,來支撐配置檔案的使用。
Port的內建比較簡單,隻要在初始化的時候調用Port_Init(&Port_Config)就可以了。
這個裡面包括了未使用管腳以及已經使用管腳的配置,隻需要調用這個初始化函數就OK了,其他的函數可以直接去看一下。
Dio配置
Dio的配置稍微簡單點,主要是配合Port的使用一些基本的IO輸入與輸出,channel組什麼的我也沒用過,使用的過程中我也隻是一個一個的設定。這裡面前面的API勾選就不看了,主要是針對Dio_Port的這個配置。看簡介寫的是這樣的:
意思應該是每一個Dio Port Id代表着一組IO口,是以我這邊把所有的都标注了下。
再看每一個選項裡面,DioChannel選項,我本來以為是對應的Dio Channel Id 是我Port裡面設定的Id,後面再點燈的時候發現寫寄存器的值和IO口是不對的,後來才發現這個是端口的符号,比如我的LED燈在的位置是PA6,這裡面對應的Dio Channel Id就是6,然後代碼會自動生成PA6對應的MSCR的number,這個等下看下生成的代碼就清楚了。
Dio我就配置到這裡就結束了,至于DioChannelGroup我就沒有再看,反正現在也用不到,有興趣的就看一下吧。
Dio代碼內建
先把Dio需要的底層代碼拷貝一下,再看下配置生成代碼。
Dio應該是不需要初始化的,可能是我配置的太少,這個沒試過,用的也都是自己嘗試的,Dio_Cfg.c裡面的也沒用。
這邊好像是我配置了所有的組 A - I ,生成了9個可找到的進行讀寫的PIN,還有個Dio_Config,是空的,就不看了。
看下剛才管腳組生成的索引吧。
Dio_Cfg.h 裡面前面就是API的宏開關,後面是生成的管腳索引。
這個是配置的PE[13] 生成的果然是MSCR的值 GPIO[77],下面看下使用。
點亮LED訓示燈
前面Port的初始化工作已經完成了,這裡直接調用輸出就可以實作了。我這邊使用的是Dio_WriteChannel這個函數
Dio_WriteChannel(DioConf_DioChannel_DioChannel_LED,STD_HIGH);
Dio_WriteChannel(DioConf_DioChannel_DioChannel_LED,STD_LOW);
将Dio_Cfg.h 裡面生成的配置直接放到入口參數就OK了,代碼也很簡單,可以看到最後是寫進去了對應的寄存器,可以設定個計數,反轉LED就可以閃爍起來了,其他的API也可以嘗試下讀寫,初期可以多實踐實踐。
寫的隻是經驗,有啥搞錯的也請大家指明一下,也是第一次玩這個,看網上教程很少,基本是都是自己在嘗試,順便記錄下,發現寫出來也能自己更清晰些。