一、簡介
MCAL:微控制器抽象層;位于BSW層中的最下層;
MCAL細(xì)分,可將驅(qū)動(dòng)分為:微控制器驅(qū)動(dòng)、存儲(chǔ)器驅(qū)動(dòng)、通信驅(qū)動(dòng)、IO驅(qū)動(dòng):
二、MCAL的配置(EB-Tresos)
1.PORT
我理解的PORT:MCAL層中的IO驅(qū)動(dòng)組中的pin腳總體配置:
Port就是芯片上的每個(gè)pin腳,可以配置成DIO ADC PWM ICU等單引腳的功能,也能配置成CAN的TX或者RX、SPI的MOSI等等其他1功能的單個(gè)pin腳功能;
總之,PORT就是芯片上的具體的某個(gè)引腳。
配置如下:
PortPinId:邏輯上的Id值,從1遞增 PinId:對應(yīng)[芯片XX]芯片手冊的pin引腳ID,根據(jù)實(shí)際使用選擇對應(yīng)的pin引腳 Mux:選擇PortPin用作哪個(gè)功能,最多八個(gè),選擇復(fù)用的功能需要查看TRM來選擇 InputSelect:根據(jù)實(shí)際pin使用功能決定輸入選擇;比如Port用作IO Input 則選擇SEL_NONE;比如用作CANFD1_Rx,則選擇對應(yīng)的CANFD1_Rx(參考[芯片XX]_Procesor_TRM_Rev_00.06_For_xxx.pdf的IO Control/PINCTRL_SAFETY/Input Source Select) PadSetting:需要根據(jù)該P(yáng)ort用作的功能進(jìn)行選擇,如果是GPIO則選擇PAD_SETTING_DEFAULT,如果是CAN則選擇PAD_SETTING_CAN;有些pin比較特殊,建議沿用之前的配置。 OpenDrain:是否啟用開漏,選擇是啟用。 PortPinModeChangeable:是否啟用在APP中更改PortPin的模式,一些特定場合會(huì)用到。 PortPinDirection: Port的方向,輸入:PORT_PIN_IN, 輸出:PORT_PIN_OUT PortPinDirectionChangeable:是否可以在程序運(yùn)行過程中改變PortPin的方向(輸入,輸出)。 PortPinLevelValue:設(shè)置PortPin的初始化,只對Outout有效 PortPinInitialMode:不需要配置
2.DIO
DIO一共分為五組,如下圖所示:
Dio沒什么好配置的,只需要按照對應(yīng)的ChannelId 更改下Name就好了。
3.ADC
[芯片XX]只有一個(gè)ADC內(nèi)含8個(gè)通道,最大支持12位精度(8,10,12);
AdcPrescale: [公司]的[芯片XX]是填的199, BaseClock = 400MHz ,基于400MHz進(jìn)行分頻。
AdcLogicalChannelId:邏輯通道從0遞增 AdcPhysicalChannelId:物理通道和邏輯通道保持一致,否則數(shù)據(jù)讀取不正確 AdcChannelResolution:選擇ADC的采樣精度8/10/12 AdcSampleFrequency(Hz):通道的采樣頻率,ADC一共八個(gè)通道,代碼中配置每個(gè)通道采樣兩次(MCAL暫時(shí)不能配置),內(nèi)部FIFO的WaterLevel=64,按照配置中的800Hz來算(1/800hz*16)*64=5ms
![af090130-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNGAPfq6AAOBISKH6Nw984.png)
AdcGroupConversionMode:配置連續(xù)采樣和單次采樣,目前[芯片XX]只支持連續(xù)采樣 AdcGroupTriggsrc:ADC_TRIGG_SRS_SW:由軟件API調(diào)用促發(fā)的組 ADC_TRIGG_SRC_HW:由硬件觸發(fā)的組 AdcNotification:[芯片XX]ADC采樣必須使用中斷模式,所以配置一個(gè)Notification進(jìn)行數(shù)據(jù)處理。
4.CAN
4.1 CAN-General
VirtualCanEnable:指定CAN消息是否由(SDPE)半驅(qū)動(dòng)器包引擎路由。如果啟用,所有的CAN驅(qū)動(dòng)程序?qū)⒂蒘DPE處理 CanDevErroDetect:指定是否在每個(gè)API中啟用錯(cuò)誤檢測 CanIndec:對于[芯片XX]系列CAN驅(qū)動(dòng),該參數(shù)應(yīng)該始終是0 CanLPduReceiveCalloutFunction:當(dāng)收到幀時(shí)調(diào)用用戶回調(diào)函數(shù) CanMainFunctionBusoffPeriod:指定調(diào)用Can_MainFunction_BusOff的周期 CanMainFunctionWakeupPeriod:指定調(diào)用Can_MainFunction_Wakeup的周期 CanMainFunctionModePeriod:指定調(diào)用Can_MainFunction_Mode的周期 CanMultiplexedTransmission:是否支持多路傳輸,多路傳輸用于防止傳輸幀時(shí)的優(yōu)先級反轉(zhuǎn) CanTimeoutDuration:指定阻塞功能的超時(shí)時(shí)間,例如模塊的enable/disable, freeze/unfreeze在控制器的初始化,注意:目前不支持此配置 CanVersionInfoApi:指定是否支持Can_GetVersionInfo函數(shù) CanSupportTTCANRef:[芯片XX]系列不支持TTCAN,因此不使用此配置。
![af32d1f4-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNGABZBFAAQcF1A2BkY053.png)
CanControllerActivation:Channel配置信息必須勾選此處才會(huì)生效 CanControlledId:需和DaVinci中的ControlledId保持一致,不一致時(shí),實(shí)際通信過程中CAN通道以DaVinci中的配置為準(zhǔn),會(huì)導(dǎo)致通道開啟錯(cuò)誤,進(jìn)而無法通信的問題。 CanControllerBaseAddress:要和CanControllerInstance保持一致,BaseAddress參考TRM手冊。 例如:CAN1 0xF0030000 CAN 2 0xF0040000 CAN 3 0xF0050000… CanRxProcessing:INTERRUPT/POLLING CanTxProcessing:INTERRUPT/POLLING CanWakeupFunctionalityAPI:沒驗(yàn)證過該功能 CanWakeupProcessing:INTERRUPT/POLLING CanWakeupSupport:沒驗(yàn)證過該功能 CanIndividualRxMaskEnable:勾選啟用Rxfiltermask功能 CanControllerDefaultBaudrate:需要現(xiàn)在CanControllerBaudrateConfig配置波特率,然后才能選擇 CanCpuClockRef:Clock時(shí)鐘選擇24M
![af4e8b56-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNKAAkvyAAK5ZyTWuZA909.png)
在 CanControllerBaudrateConfig 選項(xiàng)卡中配置CAN的波特率和采樣點(diǎn)等。 CanControllerBaudRate:直接填寫期望的波特率,在驅(qū)動(dòng)中會(huì)自動(dòng)進(jìn)行分頻計(jì)算 CanControllerBaudRateConfigID:ID從0開始遞增 CanControllerPropSeg:廣播同步段 CanControllerSeg1:同步緩沖段1 CanControllerSeg2:同步緩沖段2 CanControllerSyncJumpWidth:同步跳轉(zhuǎn)段。 Note:采樣點(diǎn)值的確定需根據(jù)客戶的輸入來確定,采樣點(diǎn)計(jì)算方法: (1+CanControllerPropSeg+CanControllerSeg1)/(1+CanControllerPropSeg+CanControllerSeg1+CanControllerSeg2)*100%=采樣點(diǎn) 在計(jì)算采樣點(diǎn)參數(shù)時(shí)要注意這四個(gè)參數(shù)的關(guān)系,具體請參考百度或者J1939定義,否則EB不能生成代碼。
![af5423b8-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNKAEhbGAALAybsWrOs668.png)
CanMessageBufferRegionName:選擇CAN_MB_REGION_0/CAN_MB_REGION_1,每個(gè)region有256byte CanMessageBufferRegionSize:選擇CAN_MB_8_BYTES_PAYLOAD/CAN_MB_16_BYTES_PAYLOAD/CAN_MB_32_BYTES_PAYLOAD/CAN_MB_64_BYTES_PAYLOAD,每個(gè)region大小512byte,選擇CAN_MB_8_BYTES_PAYLOAD一共可以接收512/(8+8)=32幀報(bào)文。如果配置成CAN_MB_32_BYTES_PAYLOAD一共可以接收512/(32+8)=12
4.2 CAN-CanHardwareObject
在CanHardwareObject對CAN信號進(jìn)行配置,該處配置需和DaVinci cfg的CanHardwareObject保持一致,否則協(xié)議棧處理會(huì)出現(xiàn)信號錯(cuò)位的問題。此處先講解如何配置,然后再詳細(xì)講解如何和DaVinci cfg里的保持一致。
![af8a7148-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNKAQji8AAJkJcWwmxw426.png)
此處以一個(gè)Tx信號為例: CanHandleType:BASIC/FULL CanHwObjectCount:配置成Tx并選擇BASIC,配置決定該HTH可以使用幾個(gè)MailBoxs,此處配置為32,第一個(gè)Region全部用作了發(fā)送 CanIdType:STANDARD/EXTENDED/MIXED CanObjectId:需要和DaVinciCFG里面的保持一致 CanObjectType:TRANSMIT/RECEIVE CanControllerRef:該信號屬于哪路Cantroller就選哪路 CanMessageBufferRegionRef:選擇使用哪一個(gè)BufferRegion,一定要注意每個(gè)Region最多配置32個(gè)8Byte的報(bào)文
5.SPI
SpiMaxChannel:與SpiChannel選項(xiàng)卡配置的Channel值保持一致 SpiMaxJob:與SpiJob選項(xiàng)卡配置的Jobs值保持一致 SpiMaxSequence:與SpiSequence選項(xiàng)卡配置的Sequence值保持一致 SpiChannelBuffersAllowed:0:1B,1:EB,2:IB&EB SpiLevelDelivered:0:1B , 1: EB , 2: IB&EB
![afc4974c-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNOANjtdAAKkR1N7H_k386.png)
SpiCsSelection:CS_VIA_PERIPHERAL_ENGINE/CS_VIA_GPIO選擇SPI_SS或者GPIO作為CS,選擇CS_VIA_PERIPHERAL_ENGINE在SpiCsPin處選擇Port的配置,選擇CS_VIA_GPIO在SpiCsViaGpio處選擇Dio的配置 SpiHwUnit:CSIB1-CSIB8對應(yīng)SPI0-SPI7
6.MCU
McuClockReferencePointFrequency:期望的Clock頻率和McuClockDefaultClock保持一致 McuClockDefaultClock:選項(xiàng)有MCU_CLOCK_UART_80M/MCU_CLOCK_TIMER_HIGH_FREQUENCY_400M/MCU_CLOCK_TIMER_LOW_FREQUENCY_24M/MCU_CLOCK_12C_133_3M/MCU_CLOCK_CANFD_80M/MCU_CLOCK_PWM_400M/MCU_CLOCK_PWM_EXT
![b01b32f0-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNSAd7pbAAKguccmolI955.png)
我們使用了哪些外設(shè)模塊就需要在此處Enable它,否則會(huì)導(dǎo)致該模塊工作不正常或者初始化異常。
如果勾選了外設(shè),則該外設(shè)只能由SECURE Doamin訪問和使用,SAFETY Domain失去該模塊的使用權(quán)限。
配置Mcu_InitRamSection的大小和寫入值。(該截圖里的值和[公司]的配置是一樣的)。
7.Gpt
在[芯片XX] SOC 處理器中GPT模塊配置的時(shí)鐘是可以給其他模塊使用的,例如在現(xiàn)有的項(xiàng)目開發(fā)中,Gpt有用作Os Timer, System timer ,和電源芯片定時(shí)喂狗中斷等。
對于ICU模塊來說只能使用GPT的配置作為時(shí)鐘源。
[芯片XX]一共有8個(gè)Timer, 每個(gè)Timer有6個(gè)Channel,這6個(gè)Channel共享一個(gè)Timer時(shí)鐘源和分頻,換句話說,在APP中同一個(gè)Timer中最后生效的時(shí)鐘源和分頻是被最后一個(gè)初始化的Channel決定的。
6個(gè)Channel分別是:GPT_HW_TIMER_G0/GPT_HW_TIMER_G1/GPT_HW_LOCAL_A/GPT_HW_LOCAL_B/GPT_HW_LOCAL_C/GPT_HW_LOCAL_D, A/B/C/D共享一個(gè)中斷號,G0/1共享一個(gè)中斷號。支持使用同一個(gè)Timer的不能Channel,即使中斷號共享[芯片XX]會(huì)自動(dòng)識(shí)別到底是哪一個(gè)Chnnale觸發(fā)的中斷,進(jìn)而去調(diào)用你所配置的Notification.
Gpt基礎(chǔ)配置,選擇是否Enable某些功能和函數(shù)。
GptHwModule:[芯片XX]一共有8個(gè)Timer,每個(gè)Timer有6個(gè)Channel,這6個(gè)Channel 共享一個(gè)Timer時(shí)鐘源和分頻,換句話說,在APP中同一個(gè)Timer中最后生效的時(shí)鐘源和分頻是被最后一個(gè)初始化的Channel決定的,更詳細(xì)的介紹請參考[芯片XX]官方文檔。 GptHwModuleChannel:GPT_HW_TIMER_G0…GPT_HW_LOCAL_D GptChannelMode:Channel模式GPT_CH_MODE_CONTINUOUS/GPT_CH_MODE_ONESHOT Note:只有Local A/B/C/D可以配置成One shot模式 GptChannelTickFrequency:配置期望的頻率,和GptChannelClkSrcRef保持一致 GptChannelTickValueMax:配置該GPT channel 最大的Ticks值產(chǎn)生中斷或者其他 GptChannelClkSrcRef:選擇GPT的時(shí)鐘源
![b09237c4-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNWAJweqAAHelGOUfbM414.png)
GptClockReference: 選擇GPT可以選擇配置的時(shí)鐘源,只能選擇已經(jīng)在MCU模塊配置好的時(shí)鐘。
8.ICU
對于ICU模塊來說只能使用GPT的配置作為時(shí)鐘源
ICU基礎(chǔ)配置,選擇是否Enable某些功能和函數(shù).
9.PWM
[芯片XX] 一共有8個(gè)PWM模塊,每個(gè)pwm模塊有四個(gè)子Channel,分別是A/B/C/D,四個(gè)子Channel共享同一個(gè)溢出值,所以子Channel的周期都一樣的,占空比可以單獨(dú)控制。更詳細(xì)的可以參考官方文檔。
PWM基礎(chǔ)配置,選擇是否Enable某些功能和函數(shù)
PwmIndex:暫時(shí)用不到
PwmHwModule:PWM_MODULE1/PWM_MODULE2/…/PWM_MODULE8 PwmPeriodDefault:設(shè)置PWM默認(rèn)周期,我們通常在這里配置為0,如果配置成其他值且默認(rèn)占空比也有配置,則初始化之后會(huì)立即輸出PWM波 PwmMcuClockReferencePoint:Pwm的時(shí)鐘源選擇,只能選擇在Mcu模塊中已存在的配置,目前只能選擇400MHz PwmModuleFrequency:不可修改 PwmHwModulePrescaler:Pwm的分頻系數(shù) 400MHz/(PwmHwModulePrescaler+1)=期望頻率
![b0fcc8aa-bb5b-11ee-8b88-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/BE/6A/wKgZomWyHNaACmNMAALFI2iAtfM759.png)
PwmSubChannelId: 子ChannelID 0/1/2/3
DutycycleDefault: 默認(rèn)占空比,通常配置為0x0
Polarity: Pwm的極性,根據(jù)項(xiàng)目需求配置
IdleState: Pwm空閑狀態(tài),通常與Polarity相反。
三. 項(xiàng)目實(shí)踐
1.說明:
項(xiàng)目實(shí)踐中,MCAL需要配置兩個(gè)新增功能,pwm和icu輸入捕獲。
功能描述:增加LSS8_EN(E12) / DI_AC_Wake(J4)PWM通道
(1)配置一個(gè)pin腳,讓其輸出pwm波形
(2)配置一個(gè)pin腳,讓其捕獲一個(gè)pwm波形
查看PinMap表格:
如圖excel-PinMap表格描述了單片機(jī)中的兩個(gè)引腳功能:
第一個(gè):CPIO_C10引腳,配置成MIUX6的功能PWM3_CH2,Output模式的引腳,要輸出信號,【功能描述】里的內(nèi)容可以配置引腳名稱時(shí)用。
第二個(gè):GPIO_H3引腳,輸入信號,使用的功能是MUX3,即TIM7_CH1,做輸入捕獲的功能。
3.配置第一個(gè)功能:PWM輸出
(1)配置PORT
找到GPIO_C10 ,配置名稱為DO_LSS8_Driver (截圖示例為新建一個(gè)port)
根據(jù)【PinMap】文檔中介紹的pin腳功能:配置。
(2)配置DIO
因?yàn)檫@個(gè)引腳十一輸出的引腳 所以需要配置DIO (相當(dāng)于GPIO 輸出高電平或者低電平)
image-20240107212653255
根據(jù)【PinMap】文檔 ,查看MUX_0 = GPIO.IO58 ,配置IO58。
(3)配置PWM
引腳輸出高電平的波形配置成PWM波形(有占空比 周期等參數(shù)的波形)
先配置模塊,該芯片有8個(gè)PWM模塊,每個(gè)模塊有4個(gè)channel.
新增一個(gè)pwm模塊(即第三個(gè)pwm模塊) ,命名為PWMChannel_3 ,配置相關(guān)參數(shù)。
再配置子通道channel:
如上,完成【PinMap】文檔中的PWM3CH2的配置。
(4)配置MCU
添加PWM3的使能
如上,完成對引腳GPIO_C10的配置。
4.配置第二個(gè)功能:ICU輸入捕獲
(1)配置PORT
如【PinMap】文檔,找到GPIO_H3 ,配置如下:
(2)配置DIO
(3)配置GPT
需要用到時(shí)鐘驅(qū)動(dòng)(【PinMap文檔中的MUX功能】) MUC3 = TIM7_CH1
【+】新增 ,配置如下:
(4)配置ICU
配置完成,生成代碼即可。生成的代碼是MCAL動(dòng)態(tài)配置文件。
項(xiàng)目中,MCAL靜態(tài)庫和動(dòng)態(tài)配置文件通常在不同路徑下:
SDK包:BSWShareUtilesG9_SDK: 工程件:BSWShareUtilesMicroSarStatic_G9:BSW層除MCAL外的其他模塊代碼:BsmWCanIFDem等 DavinCi配置生成代碼:CustomerConfigSourceMicroSarConfig:bsw層除mcal外的其他模塊的PBCfg.c和LCfg.c(例如Ea_Cfg.cOS_xxx_Cfg.c等等) MCAL靜態(tài)庫:BSWShareUtilesMCALStatic_G9:adc.hadc.c...MCAL層的驅(qū)動(dòng)文件 MCAL動(dòng)態(tài)配置文件:CustomerConfigSourceMcalConfig:Adc_PBCfg.cPort_Cfg.cPwm_Cfg.
審核編輯:劉清
-
微控制器
+關(guān)注
關(guān)注
48文章
7658瀏覽量
152183 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7530瀏覽量
164401 -
AUTOSAR
+關(guān)注
關(guān)注
10文章
363瀏覽量
21801 -
ADC采樣
+關(guān)注
關(guān)注
0文章
134瀏覽量
12911 -
BSW
+關(guān)注
關(guān)注
0文章
15瀏覽量
3527
原文標(biāo)題:精華總結(jié):一網(wǎng)打盡AUTOSAR MCAL模塊
文章出處:【微信號:智能汽車電子與軟件,微信公眾號:智能汽車電子與軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
解決在輸出繼電器的觸點(diǎn)斷開時(shí)CD4513的輸入端懸空方法
AUTOSAR MCAL驅(qū)動(dòng)程序與演示程序中的Libraries中的驅(qū)動(dòng)程序有什么不同之處?
ARM經(jīng)典300問
最實(shí)用的LEDE驅(qū)動(dòng)設(shè)計(jì)的18個(gè)經(jīng)典案例
【下載有獎(jiǎng)】Fluke紅外熱像資源中心,紅外熱像解讀,一網(wǎng)打盡!
AUTOSAR MCAL MCU模塊的相關(guān)資料分享
基于RT-Thread內(nèi)核的AUTOSAR在n32g上的實(shí)現(xiàn)方案
S32K3 MCAL支持哪些版本的Autosar?
AUTOSAR MCAL解析:MCU
![<b class='flag-5'>AUTOSAR</b> <b class='flag-5'>MCAL</b>解析:MCU](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AUTOSAR MCAL軟件的開發(fā)
AUTOSAR MCAL-基于Infineon TC3xx芯片的ADC模塊
一網(wǎng)打盡總結(jié) Mysql的所有Buffer
![<b class='flag-5'>一網(wǎng)打盡</b>總結(jié) Mysql的所有Buffer](https://file1.elecfans.com/web2/M00/AD/80/wKgaomVN5WWACEKHAAAt_eGiTLM987.png)
一網(wǎng)打盡十二款高端智能手表,兼顧功能與價(jià)格,總有一款適合你!
![<b class='flag-5'>一網(wǎng)打盡</b>十二款高端智能手表,兼顧功能與價(jià)格,總有<b class='flag-5'>一</b>款適合你!](https://file1.elecfans.com//web2/M00/C8/C9/wKgaomYXRNyAbEv9ABEfMKKh3wo607.jpg)
評論