簡介
本文詳細介紹如何使用 EB 工具配置 Flagchip FC7300 MCAL 按鍵(Key3)中斷控制 LED。首先以實例的方式介紹 Icu 功能的配置過程,對於這個實例中的相關模塊(MCU、EcuC、Common、OS、Port、Dio)的功能介紹,請查看本網站的其他相關博文。
硬體平台:旗芯微 FC7300 Demo Board V2 開發板
軟體平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.07
AUTOSAR 版本:V4.6.0
FC7300 MCAL版本:0.4.0
一、MCAL 配置
1.1 配置 MCU 模塊
如圖 1.1.2 所示為 demo board LED 原理圖,為了進行點亮 LED 燈的配置,我們需要確保 Port A 、PortD 的外設時鐘配置為使能。
▲ 圖 1.1.1
▲ 圖 1.1.2
1.2 配置 PORT 模塊
進入 Port A 的 PortPin 界面下,添加 PTA11 引腳並命名為 KEY3,配置 PTA11 為 GPIO 、輸入模式,默認電平為低。LED port 配置請查看本網站的其他相關博文。
▲ 圖 1.2
1.3 配置 ICU 模塊
1.3.1 在 Module Configurations 中添加 ICU 模塊,在 ICU 模塊中的 IcuPort 下添加 Port_A。

▲ 圖 1.3.1
1.3.2 在 ICU 模塊中的 IcuChannel 下添加通道。

▲ 圖 1.3.2
1.3.3 雙擊 Index 2 進入 IcuChannel 的配置界面,選擇 Icu Hardware Module 為 PORT_A,Channel Of Hardware Module 修改為 11 ,選擇邊沿檢測方式為上升沿,檢測方式為信號邊沿檢測,填入邊沿檢測名字和回調函數名字。
▲ 圖 1.3.3
二、示例代碼解析
2.1 將 EB 配置好的工程編譯並更新代碼至 FCIDE 中。
2.2 Main 函數
調用 Bsp_Icu_Init 函數。
▲ 圖 2.2
- Bsp_Mcu_Init(); MCU 初始化。
- Bsp_Port_Init(); PORT 初始化,將 LED1、LED2、LED3 對應的 PORT 引腳初始化為 GPIO 模式,初始狀態為高電平,所以這個初始化程序結束之後 LED 被點亮。
- Bsp_Icu_Init(); Icu 初始化,將 Key3 IO 配置為 PORT_A_11,選擇邊沿檢測方式為上升沿,檢測方式為信號邊沿檢測,使能 PORT_A 中斷,使能 Key3 回調函數。
2.3 Icu_PBcfg.c
我們可以看到 PORTA_11 在 EB 工具配置好的屬性與回調函數的聲明。


▲ 圖 2.3
2.4 Bsp_Icu.c
2.4.1 demo 示例中已經提供了 Icu_Key3_Edge_Detect 函數實體,我們需要添加 Bsp_FlipLed 函數使 LED 燈翻轉。


▲ 圖 2.4.1
2.4.2 找到 Bsp_Icu_Init 這是 demo 示例對 MCAL API 的調用。
IntMgr_SetPriority(PORTA_IRQn, 4);設置 PORTA 中斷極性。
IntMgr_EnableInterrupt(PORTA_IRQn);使能 PORTA 中斷。
▲ 圖 2.4.2
三、燒錄 & 調試
3.1 將工程編譯並燒錄到開發板
觀察 3 顆 LED ,初始化時燈為亮,當按鍵 Key3 按下時燈熄滅,再次按下燈點亮。

▲ 圖 3.1
四、MCAL ICU 模塊詳解
FC7300 ICU 模塊提供邊沿計數、信號邊沿檢測通知、周期性信號時間測量、邊沿時間戳捕獲、中斷喚醒等功能。
4.1 General 配置

▲ 圖 4.1
① IcuConfigSet
- IcuMaxChannel:在 IcuChannel 內添加通道後需在 IcuMaxChannel 輸入通道數量
②IcuGeneral
- IcuDevErrorDetect:Icu 模塊開發錯誤檢測使能
- IcuReportWakeupSource:開啟喚醒源上報
- IcuOverflowTimeStatistics:用來信號測量,ICU Mode 選擇 Icu_mode_signal_Messurement,溢出了後還可以再計數,計數值不會清零,用來延長計時時間
- Icu MultiCore Support :Icu 支持多核
③IcuNonAUTOSAR
- IcuGetInputLevelApi :啟用後,該函數可以返回輸入引腳狀態
- IcuOverflowNotificationApi:使能溢出後的回調通知函數
④IcuOptionalApis
根據功能需要,配置某個 API 使能,如 IcuDeInitApi 取消初始化 ICU 模塊、Icu(Disable/Enable)WakeupApi 禁用或啟用某個 ICU 通道的喚醒源、IcuSetModeApi 設置 ICU(正常/睡眠)模式等。
4.2 IcuChannel配置
添加對應 ICU 的通道來配置測量模式

▲ 圖 4.2
- Icu Hardware Module :選擇外設模塊,選擇外設模塊前需要在 IcuFtu 或 IcuPort 中先添加
- Channel Of Hardware Module:選擇外設通道
- IcuDefaultStartEdge :選擇信號觸發邊沿
- IcuMeasurementMode:選擇信號測量方式
- IcuOverflowNotification:填寫定時溢出後的回調函數名稱,需聯合配置 IcuOverflowTimeStatistics, IcuOverflowNotificationApi
- IcuWakeupCapability:啟用該通道的喚醒源
①IcuSignalEdgeDetection
當選擇信號邊沿觸發時,需要在 IcuSignalNotification 填入回調函數名稱
②IcuSignalMeasurement
當選擇信號測量時,需要在 IcuSignalMeasurementProperty 填入測量類型,此類型不能在運行時更改
③IcuTimestampMeasurement
當時間戳測量時,在 IcuTimestampMeasurementProperty 選擇循環緩衝區或線性緩衝區模式。在 IcuTimestampNotification 中填入回調函數名稱,如果獲取了請求時間戳的數量(時間戳通知>0)時,會調用回調函數的使用
④IcuWakeup
當 IcuWakeupCapability 啟用,且 IcuChannelWakeupInfo 啟用後,則會將喚醒源信號傳遞給 ECU 抽象層
4.3 IcuFtu 配置
▲ 圖 4.3
- Ftu Hardware Module:選擇 Ftux 外設
- Icu FlexTimer clock source:選擇 Ftu 模塊的時鐘源
- Icu FlexTimer Prescale:配置 Ftu 模塊的分頻係數
- Icu FlexTimer Period Value:設定周期值
- Icu FlexTimer Channel Filter Prescaler:配置 Ftu 通道濾波器的分頻係數
- Icu FlexTimer - Channel 0、1、2、3 Input Filter value:Ftu 通道濾波時間,0-15 可選,0 則不濾波
4.4 IcuPort 配置
可以添加 Port A 這些埠用於引腳中斷。
▲ 圖 4.4
4.5 IcuAontmr 配置
做定時喚醒使用

▲ 圖 4.5
- IcuAontmrChannelClkSrc:Icu 定時器通道時鐘源選擇
- IcuAontmrPrescalerEnable:定時器計數器模式下使能預分頻器,在脈衝模式下使能脈衝濾波器
- IcuAontmrPrescaler:配置脈衝計數器模式下的毛刺過濾器時鐘源的預分頻
- IcuAontmrPinSelect:配置脈衝計數器模式下使用的時鐘輸入源
- IcuAontmrPartitionRef:將 lcu Aontimer 實例映射到 ECU 分區
4.6 Icu Cmp
比較器
▲ 圖 4.6
- Icu Cmp Hardware Module:Icu 比較器硬體模塊選擇,CMP0、CMP1、CMP2
- IcuCmpFunctionMode:功能模式選擇
- IcuCmpPositiveInputSrc:選擇比較器正輸入源,數模轉換器或多路復用器
- IcuCmpNegativeInputSrc:選擇比較器負輸入源,數模轉換器或多路復用器
- IcuCmpPositiveInputMuxSelect:選擇正輸入多路復用器
- IcuCmpNegativeInputMuxSelect:選擇負輸入多路復用器
- Icu Filter Sample Period:指定比較器輸出濾波器的採樣周期(以總線時鐘周期為單位)
- IcuCmpFilterCnt:選擇 CMP 過濾器計數號。注意:過濾器計數器可能在某些功能模式下禁用
- IcuCmpHystCtrlType:選擇比較器硬塊滯環控制
- IcuCmpStopModeEnable:在 STOP 模式下啟用模擬比較器或 DAC
- IcuCmpHighSpeedMode:比較器高速模式,加快了轉換速度,但同時也增加了功耗
① IcuCmpDacConfig:數模轉換器的配置
- IcuCmpDacEnableSrc:如果選擇 ICU_CMP_DACENABLE_DCR,則 DCRIDAC_EN] 啟用 CMP DAC。如果選擇 ICU_CMP_DACENABLE_CCRO,則 CCR O[EN] 啟用 CMP DAC
- IcuCmpDacDcrEnable:通過使能 DCR[DCR_EN] 使能 Dac
- IcuCmpDacReference:Dac 參考電壓源選擇
- Icu Dac Voltage:DAC 輸出電壓選擇,該位從 256 個不同電平中選擇一個輸出電壓 DACO=(Vin/256)*(DAC_DATA+1),所以 DACO 的範圍是從 Vin/256 到 Vin
②IcuCmpOutPinConfig:比較器輸出引腳配置
- IcuCmpOutPinEnable:CMPO 輸出使能
- IcuCmpDacReference:CMPO 輸出源選擇,濾波比較器輸出或未過濾的比較器輸出
③IcuCmpWindowConfig:比較器窗口配置
- IcuCmpWinOutUserDef:當窗口關閉時,用戶可以定義 CMPOUT_WIN 級別
- IcuCmpOutWinUserDefLevel:選擇 CMPOUT_WIN 級別
- IcuCmpCloseWindowEnable:使能比較器關閉窗口
- IcuCmpCloseWinEvent:選擇導致 Cmp 窗口關閉的事件,上升沿、下降沿、雙邊沿
- IcuCmpInvSampleEnable:反轉 WINDOW/SAMPLE 信號(僅用於窗口模式)
- IcuCmpPartitionRef:將 lcu Cmp 實例映射到 ECUC 分區
4.7 PublishedInformation ICU 模塊版本信息
4.8 ICU 模塊常用接口函數
- Icu_Init: 初始化 ICU 模塊
- Icu_DeInit:將 ICU 模塊復位至默認狀態
- Icu_SetMode: 設置ICU模塊的模式,Sleep 或者是 Normal
- Icu_DisableWakeup :禁用單個 ICU 通道喚醒功能
- Icu_EnableWakeup: 使能單個 ICU 通道喚醒功能
- Icu_CheckWakeup: 檢查具有喚醒功能的 ICU 通道是否是喚醒事件的源,如果是有效的 ICU 通道喚醒事件,則調用 ECU 狀態管理器服務 EcuMSetWakeupEvent
- Icu_SetActivationCondition:設置單個 ICU 通道 輸入引腳邊沿檢測模式
- Icu_DisableNotification: 失能單個 ICU 通道通知功能
- Icu_EnableNotification:使能單個 ICU 通道通知功能
- Icu_GetInputState:返回單個 ICU 通道 輸入引腳狀態
- Icu_StartTimestamp:開啟單個 ICU 通道邊沿捕獲時間計數
- Icu_StopTimestamp:停止單個 ICU 通道邊沿捕獲時間計數
- Icu_GetTimestampIndex: 讀單個 ICU 通道的時間戳
- Icu_ResetEdgeCount:將單個 ICU 通道的邊沿計數設置為 0
- Icu_EnableEdgeCount:使能單個 ICU 通道的邊沿計數功能
- Icu_EnableEdgeDetection:使能單個 ICU 通道邊沿檢測功能
- Icu_DisableEdgeDetection: 失能單個 ICU 通道邊沿檢測功能
- Icu_DisableEdgeCount: 失能單個 ICU 通道的邊沿計數功能
- Icu_GetEdgeNumbers:讀單個 ICU 通道的邊沿計數值
- Icu_StartSignalMeasurement:開始對單個 ICU 通道信號進行測量
- Icu_StopSignalMeasurement: 停止對單個 ICU 通道信號進行測量
- Icu_GetTimeElapsed:讀取單個 ICU 通道的信號周期時間
- Icu_GetDutyCycleValues:讀取單個 ICU 通道的 PWM 周期與占空比
- Icu_GetVersionInfo: 獲取 ICU 模塊版本信息
- Icu_GetInputLevel:讀取單個 ICU 通道的當前輸入電平
五、總結
本文以按鍵中斷控制 LED 為示例,詳細介紹了如何配置和使用 ICU(Interrupt Control Unit)模塊,通過本文的講解,讀者可以了解到如何正確配置 ICU 模塊,以實現 Port 中斷的功能。如果有問題,可以發送郵件 atu.sh@wpi-group.com與我們聯繫。
六、參考文獻
(1) AUTOSAR_SWS_IcuDriver.pdf
(2) FC7300 Reference Manual V0.6.pdf
歡迎在博文下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:紮根地下
更多資訊,請掃碼關注我們!
評論