簡介
本文將詳細介紹如何使用 EB 工具配置 Flagchip FC4150 MCAL 來點亮 LED 燈,並重點強調了配置 mcu、port 和 dio 模塊的過程以及對這些模塊的詳細解釋。
硬體平台:旗芯微 FC4150 DEMO BOARD V2 開發板
軟體平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.04
MCAL: V1.1.0 & V1.1.1
一 、MCAL 配置
1.1、配置 MCU 模塊
1.1.1、 在 Module Configurations 中添加 MCU 模塊,選擇 MCU Clock Setting Config 下的 Index ,雙擊並打開。
▲ 圖 1.1.1
1.1.2、 配置系統時鐘
①、配置外部輸入晶振時鐘為 24 Mhz。
▲ 圖 1.1.2.1
②、配置 PLL0 的輸入時鐘為 FOSC 、我們將 PLL0 頻率設置為 150Mhz 的話,算出 PLL0 Pre Divider 的分頻係數為 4 、再設置倍頻係數為 50 ,此時 PLL0 頻率為 300Mhz,因為 PLL0 會自動二分頻,所以 PLL0 頻率為 150Mhz。
▲ 圖 1.1.2.2
③、配置 PLL0 為系統時鐘
▲ 圖 1.1.2.3
④、根據 demo board LED 原理圖所示,我們需要在 PCC 下添加 Port B 、C、D 的外設並配置為時鐘使能
▲ 圖 1.1.2.4.1
▲ 圖 1.1.2.4.2
▲ 圖 1.1.2.4.3
1.2、配置 PORT 模塊
1.2.1 在 Module Configurations 中添加 PORT 模塊,在 PORT 模塊中的 PortConfig 下添加 PORT B、C、D。
▲ 圖 1.2.1
1.2.2 雙擊 Index 1 進入 Port B 的 PortPin 界面下,添加 PTB28 引腳並命名為 LED2
▲ 圖 1.2.2
1.2.3 雙擊 Index 1 進入 PTB28 的配置界面,將 PTB28 配置為 GPIO 輸出,初始狀態為高
▲ 圖 1.2.3
1.2.4 如 1.2.2-1.2.3 所示,PTC30、PTD4 的 IO 配置重複以上步驟即可
1.3、配置 DIO 模塊
1.3.1 在 Module Configurations 中添加 DIO 模塊,在 DIO 模塊中的 DioPort 下添加 5 個 Dioport,將 Dio Port Id一一修改,Dio Port Id 0 (對應 PortA )、Dio Port Id 1 (對應PortB)、以此類推。
▲ 圖 1.3.1
1.3.2 雙擊 Index 1 進入 Dioport_B ,添加一個 DioChannel 命名為 LED2,DIO Channel id 修改為 28 ,對應圖 1.2.4.1 中的 PTB_28 引腳。
▲ 圖 1.3.2
1.3.3 如 1.3.2所示,PTC30、PTD4 的DIO 配置重複以上步驟即可
二、示例代碼解析
2.1 將 EB 配置好的工程編譯並更新代碼至 FCIDE 中
▲ 圖 2.1
2.2 Mcal_DemoBoard_Project 工程目錄 & 文件介紹
▲ 圖 2.2
- _MCAL_generate_2M: EB 工具生成的配置文件
- APP: 示例應用代碼
- MCAL: 微控制器抽象層
- MiddleWare:Uart 連接層
- Source:main.c
2.3 _MCAL_generate_2M->include文件夾下Dio_Cfg.h
我們可以看到在 EB 配置好生成的 LED0、LED1、LED2 宏定義
▲ 圖 2.3
2.4 APP -> include文件夾下Bsp_io.c
這是 demo 示例對 MCAL API 的調用
▲ 圖 2.4
三、燒錄 & 調試
3.1 將工程編譯並燒錄到開發板
觀察 3 顆 LED 已經點亮,(EB 配置這三個 GPIO 初始化狀態為高)
▲ 圖 3.1
四、MCAL MCU 模塊詳解
MCU 模塊提供 mcu 初始化、復位、休眠、系統時鐘配置、外設時鐘配置等功能
4.1 General 配置
▲ 圖 4.1
- DevErrorDetect:Mcu 模塊開發錯誤檢測使能
- McuGetRamStateAPI:獲取 MCU RAM 狀態的 API
- McuInitClockAPI:MCU 時鐘初始化 API
- McuNoPLL:MCU 鎖相環禁用
- McuVersionInfoApi :讀取 MCU 模塊版本信息 API
- McuPerformResetApi:MCU 執行軟復位 API
- McuCalloutBeforePerformReset:開啟 McuPerformResetApi 後可以使用。通過填寫 McuPerformResetCallout 的回調函數名稱,可以在執行軟復位前進行一些軟體動作
- McuPerformResetCallout:回調函數名稱
4.2 McuResetReasonConf 配置
獲取 Mcu 復位的原因
▲ 圖 4.2
4.3 McuClocksettingConfig 配置
較為複雜,需要配合板載晶振 & Data sheet 時鐘樹進行配置
4.3.1 McuClocksettingConfig-> General :mcu 時鐘監控
▲ 圖 4.3.1
4.3.2 McuClocksettingConfig-> FOSC :外部高速晶振配置
▲ 圖 4.3.2
- FOSC Enable :時鐘使能
- FOSC Clock Monitor Enable :時鐘監測器啟用
- FOSC clock monitor reset Enable :時鐘監控異常復位啟用
- FOSC Stop Enable: 時鐘停用
- FOSC Bypass Enable:使用有源晶體時需要勾選
4.3.3 McuClocksettingConfig-> SOSC :外部低速晶振配置
▲ 圖 4.3.3
- SOSC Enable :時鐘使能
- SOSC Bypass : 使用有源晶體時需要勾選
- SOSC Monitor Enable :時鐘監測器啟用
- SOSC monitor reset Enable :時鐘監控異常復位啟用
- SOSC Frequency(32768HZ): 填入外部低速晶振的時鐘頻率
4.3.4 McuClocksettingConfig-> SIRC :內部 12Mhz 低速 RC 振盪器配置

▲ 圖 4.3.4
- SIRC Monitor Enable :時鐘監測器啟用
- SIRC Clock Trim Enable :啟用 SIRC 時鐘自動修剪參考時鐘源
- SIRC Low Power Enable : 時鐘低功耗啟用
- SIRC Stop Enable : 使能 CMU0,功能安全時需要
- SIRC Trim Source: 選擇自動修剪參考的時鐘源
4.3.5 McuClocksettingConfig-> SIRC32K :內部 32KHz 低速 RC 振盪器配置
▲ 圖 4.3.5
4.3.6 McuClocksettingConfig-> FIRC :內部 96Mhz 高速 RC 振盪器配置
▲ 圖 4.3.6
- FIRC Enable:時鐘啟用
- FIRC Clock Monitor: 時鐘監測器啟用
- FIRC Clock Trim Enable: 啟用 FIRC 時鐘自動修剪參考時鐘源
- FIRC Stop Enable: 使能 CMU0,功能安全時需要
- FIRC Trim Source: 選擇自動修剪參考的時鐘源
4.3.7 McuClocksettingConfig-> PLL0 :倍頻器配置
▲ 圖 4.3.7
- PLL0 Enable : 時鐘啟用
- PLL0 Clock Monitor Enable: 時鐘監測器啟用
- PLL0 Clock Monitor Reset Enable: 時鐘監控異常復位啟用
- PLL0 Stop Enable : 使能 CMU0,功能安全時需要
- Mcu PLL0 Source Clock : 選擇 PLL0 的倍頻時鐘源
4.3.8 McuClocksettingConfig-> System Clock :系統時鐘配置
▲ 圖 4.3.8
- System Clock Select:選擇系統時鐘源
- Bus Clock Monitor :總線時鐘監控啟用
- SCG ClkOut Select:選擇 CLKOUT 引腳輸出的時鐘源
4.3.9 McuClocksettingConfig-> PCC :外設時鐘源配置
▲ 圖 4.3.9
雙擊 Index 可以進入具體外設配置界面如圖 4.3.10 所示,以 FTU0 為例
▲ 圖 4.3.10
- Mcu Peripheral Name : 選擇外設的名稱
- Enable peripheral:是否啟用外設時鐘
- Peripheral clock selection:選擇外設時鐘源
- Peripheral Clock Divider:用於需要時鐘分配器的外設 分頻係數 1-8
- Peripheral Clock Frequency:在時鐘源選擇後且外設啟用的情況下,會自動計算該值
4.3.10 McuClocksettingConfig-> Clock Reference Point:外設時鐘參考,需要在配置其他外設時引用它,如 FTU1_CLK、FTU4_CLK 在 GPT 配置中需要手動添加這兩個外設的時鐘(圖5.3.11、圖5.3.12)
▲ 圖 4.3.11
▲ 圖 4.3.12
4.3.11 McuClocksettingConfig-> SMISC:系統雜散項時鐘配置
▲ 圖 4.3.13
- McuClkOutConfigure :用於測量時鐘是否配置正確的模塊,可以通過示波器測量 CLK OUT Pin 腳
- McuAONClkConfigure:低功耗時會用到。如 RTC
- McuSysCGCConfigure:晶片的雜散時鐘配置使能項
4.4 McuModeSettingConf 配置
MCU 運行模式設置,不需要配置
▲ 圖 4.4
4.5 McuRamSectorSettingConfig 配置
MCU RAM 配置在 MCU 上電後,進入 Main 函數前,會在 Start_up 內執行 Ram 初始化,一般不需要配置
▲ 圖 4.5
4.6 MCU模塊接口函數
在 AutoSar 規範中 MCU 模塊的 API 有:Mcu_Init、Mcu_InitClock、Mcu_DistributePllClock、Mcu_GetPllStatus、Mcu_GetResetReason、Mcu_SetMode 等函數。
▲ 圖 4.6.1
初始化步驟:
①:調用 Mcu_Init 函數,使在 EB 工具中配置的 MCU 模塊初始化
②:調用 Mcu_InitClock 函數,初始化 PLL 時鐘以及其他時鐘配置項
③:調用 Mcu_GetPllStatus 函數,等待 PLL 的鎖定狀態為 Ture
④:調用 Mcu_DistributePllClock 函數,激活 PLL 時鐘到 MCU 時鐘分布
▲ 圖 4.6.2
五、MCAL PORT 模塊詳解
PORT 模塊就是 MCU 上的 Pin 腳配置,可以配置為 DIO、ADC、PWM、CAN、ICU、SPI 等引腳復用功能。
5.1 General 配置
▲ 圖 5.1
- Port Development Error Detect :PORT 模塊開發錯誤檢測使能
- Port SetPinMode Api:Pin 模式設置的 API 使能
- Port VersionInfo Api :讀取 PORT 模塊版本信息 API
- Port SetPinDirection Api:Pin 方向設置 API 使能
- Port Freeze Jtag And Reset Pins:將 jtag reset 引腳配置不可用,防止錯誤配置導致無法 Debug、復位。
5.2 Port Config 配置
5.2.1 Port Config Set 主要對 Port A、B、C、D、E 引腳屬性的定義
▲ 圖 5.2.1
5.2.2 PortContainer_0 -> PortPin_0 界面
▲ 圖 5.2.2
- PortPinId: 邏輯上的 Id 值,從 1 遞增
- PortPin Name:對應晶片手冊的 pin 引腳 ID
- PortPin Mode Changeable:是否啟用在程序運行過程中更改 PortPin 的模式
- PortPin Mode: 選擇PortPin用作哪個功能
- PortPin Pull Enable:是否啟用開漏
- PortPin Pull Select: 是否啟用上下拉
- PortPin Direction Changeable: 是否可以在程序運行過程中改變 PortPin 的方向(輸入,輸出)
- PortPin Direction : PortPin的方向,輸入, 輸出
- PortPin Level Value:設置PortPin的初始化電平狀態
- PortPin Drive Strength Enable:引腳驅動能力配置
- PortPin Slew Rate Enable:引腳轉換速率配置
- PortPin Passive Filter Enable:是否啟用引腳數字濾波
- PortPin Initial Mode: 不需要配置

▲ 圖 5.3
六、MCAL DIO 模塊詳解
DIO (輸入、輸出)模塊是對 MCU 引腳的訪問進行了抽象,並且還可以對引腳進行分組,若使用 MCU 引腳進行輸入輸出控制,則需要先配置 PORT 模塊中的該引腳為 GPIO 模式,再進行 DIO 模塊配置。
6.1 General 配置
▲ 圖 6.1
- Dio Development Error Detect :DIO 模塊開發錯誤檢測使能
- Dio Flip Channel Api :引腳翻轉的 API 使能
- Dio Version Info Api :讀取 Dio 模塊版本信息 API
6.2 DioPort 配置
一共分為 5 組 index 分別對應 PORT A、B、C、D、E
▲ 圖 6.2
6.3 DioPort->idex 0
▲ 圖 6.3
點擊 + 可以添加一個 DioChannel Index 0 ,雙擊進入 Index 0 進行引腳名稱 & 引腳位號的配置,如圖3.2 所示
6.4 DIO 模塊配置生成 Mcal 代碼
在 EB 工具配置 DIO 模塊生成 Mcal 代碼後、 DIO 模塊中的的 name、Dio channel id 都會 Dio_Cfg.h文件中通過宏定義進行關聯起來如下圖所示:
▲ 圖 6.4
6.5 DIO 模塊常用接口函數
在 AutoSar 規範中 Dio模塊的 API 有:Dio_ReadChannel、Dio_WriteChannel、Dio_FlipChannel,分別為 讀、寫、翻轉通道的功能。
▲ 圖 6.5
七、總結
本文以點亮 LED 燈為示例介紹了有關 MCU 、PORT、DIO 相關模塊的配置並進行了模塊講解,其中 MCU 模塊最複雜的就是時鐘配置,需要結合晶片手冊去實現。
八、參考文獻
(1) AUTOSAR_SWS_PortDriver.pdf
(2) FC4150 Reference Manual V3.0.pdf
歡迎在博文下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:Better Yang / 楊琰傑
更多資訊,請掃碼關注我們!
評論