求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
AUTOSAR实战教程
1.AUTOSAR相关知识
1. 老板说项目要上AUTOSAR,我慌得一批
2. 我淡定地撸了一遍AUTOSAR的基本概念
3. AUTOSAR初学者最想搞懂的东西
2.AUTOSAR理论基础
AUTOSAR架构
1. AUTOSAR架构的故事(干货)
2. AUTOSAR架构之通信服务(干货)
3. 这次我通过Interface来贯穿整个AUTOSAR架构
AUTOSAR启动与初始化
1. 解析AUTOSAR Startup
2.AUTOSAR架构中的配置文件
3.SWC详解与配置实现
1.AUTOSAR Port原理概念详解
4.BSW原理和实战演练
1. AUTOSAR折磨,从新建工程开始
2. AUTOSAR的BswM模块详解
3. 图解AUTOSAR NVM模块
4. AUTOSAR架构的 Pdu Router
5. AUTOSAR中的vLinkGen可以干嘛
6. MCAL Wdg模块解析
7. MCAL PWM Module详解
8. AUTOSAR的Memory是如何设计的?
9. AUTOSAR NvM Block的Native、Redundant和Dataset有什么区别?
10. AutoSAR,在多核汽车MCU中如何运行
11. AUTOSAR架构中的Configurator
12. AUTOSAR中的Fee
5.MCAL应用配置
1.ADC模块的配置
2.MCU模块的配置
3.PWM模块的配置
 
 
MCAL MCU Module详解和配置说明
 来源: 嵌入式软件实战派
1022 次浏览
7次  

1. 基本概念

描述了MCU(Microcontroller Unit) 驱动程序的功能和 API。 MCU 驱动程序为其他 MCAL 软件模块所需的基本微控制器初始化、断电功能、复位和微控制器特定功能提供服务。除了启动代码(见下图)之外,初始化服务还允许灵活的和应用程序相关的 MCU 初始化。启动代码非常特定于 MCU。本文档中提供的启动代码描述用于指导在标准化 MCU 初始化能够启动之前必须考虑的功能。

MCU 驱动程序直接访问微控制器硬件,位于微控制器抽象层 (MCAL) 中。

MCU驱动的功能特点:

1.MCU 时钟、PLL、时钟预分频器和 MCU 时钟分配的初始化

2.RAM 部分的初始化

3.进入MCU低功耗模式

4.触发MCU复位

5.提供从硬件获取复位原因的服务

2. 模块依赖

MCU模块有个依赖,即start-up code

在MCU驱动程序可以初始化之前,必须执行一个基本的MCU初始化。这个MCU特定的初始化通常在start-up code中执行。

上电和任何类型的MCU复位后,都要执行MCU的启动代码。它启动初始化,并应保持简短,也应涵盖MCU特定的初始化,不包含其他MCU服务或其他MCAL驱动程序的一部分。下面的描述总结了start-up code中包含的基本功能要求:

1.初始化interrupt和 trap vector tables的基地址;

2.初始化interrupt stack pointer(如果MCU支持);

3.初始化user stack pointer;

4.初始化context save operation用的Memory(如果MCU支持context save operation);

5.在初始化MCAL watchdog之前,保证MCU内部watchdog不要被触发,这个可以通过增加watchdog时间来做;

6.初始化并使能data/code cache memory(如果MCU支持cache memory);

7.初始化MCU内部关于内部memory的特定功能,例如memory protection;

8.如果用了External Memory,也要对其做初始化,并且还要做好区域划分;

9.不同的Memory划分配置,需要以参数的形式提供给start-up code;

10.需要默认初始化时钟,并包括全局时钟分频器;

11.需要使能特殊功能寄存器(SFR's)的保护机制(如果MCU支持);

12.初始化一次写入的寄存器或者多Driver公用的一次写入寄存器,而不是多次重复写入;

13.初始化最小量的RAM以供Driver service使用。

3. 应用时序

1)初始化

对MCU模块的一系列初始化动作。

2)唤醒

在睡眠之前,先调用Mcu_SetMode,然后在睡眠状态被唤醒,可以获得Wake-up Reason。

3)复位原因

通过调用Mcu_GetResetReason或Mcu_GetResetRawValue可以获得复位原因。

4)执行复位

这个比较简单,调用Mcu_PerformReset函数可以让MCU复位

4. 参数配置

MCU模块表面上用到的功能不多,但是配置并不简单,特别是时钟配置,需要熟悉MCU内部时钟参数和要求。

这里有几个配置要特别注意的:

1. McuClockSettingConfig

(1) 8Mhz Ring Stop Request Mask

此参数启用或禁用 8MHz 环形振荡器的停止请求掩码。

false: stand-by mode下停止运行.

true: stand-by mode下可继续运行.

(2) Clk Mode Select

该参数是用于选择clock setting mode的。

MCU_EMCLK_ID_1: CPU clock as 8MHz Ring oscillator. If 8MHz ring oscillator is not working then 240KHz will be automatically supplied to the CPU.

MCU_MAIN_OSC_ID_2: CPU clock as Main oscillator fX.

MCU_CPLLCLK_ID_3: CPU clock from PLL.

这个参数最好配合参考Spec来选择

(3) Cpu Clock Divider

这参数用于Cpu Clock分频。

DIVBY_1_ID_1: CPUCLKSOURCE/1 is selected as clock divider.

DIVBY_2_ID_2: CPUCLKSOURCE/2 is selected as clock divider.

DIVBY_4_ID_3: CPUCLKSOURCE/4 is selected as clock divider.

DIVBY_8_ID_4: CPUCLKSOURCE/8 is selected as clock divider.

注:该参数包含 CPU 主系统时钟频率。这不会影响 MCU 驱动程序的行为,除非所选模式(即参数 McuClkModeSelect)为 MCU_CPLLCLK_ID_3。这是一个可供其他模块参考的频率。

2. 模块时钟配置

在McuClockSettingConfig Container上右键,Create Sub Container,可以有很多模块时钟配置选择,如上图。

以下以McuAwoAdc0模块为例讲解。

(1) Div Clock Sel

该参数是C_AWO_ADCA 源时钟分频器选择用的。

DIVBY_1_ID_1: Divider selection for source clock of C_AWO_ADCA.

DIVBY_2_ID_2: Divider selection for source clock of C_AWO_ADCA.

(2) Src Clock Sel

这参数是给C_AWO_ADCA时钟源选择。

DISABLE_ID_0: Disable the Source clock for C_AWO_ADCA.

FRH_ID_1: Source clock selection for C_AWO_ADCA from High Ring Oscillator.

FX_ID_2: Source clock selection for C_AWO_ADCA from Main Oscillator.

PPLLCLK_DIVBY_2_ID_3: Selects PPLLCLK2 as Source clock selection for C_AWO_ADCA.

(3) Stop Request Mask

此参数启用或禁用停止请求屏蔽寄存器。

false: Stops the operation in Stand-by mode.

true: Continues the operation in stand-by mode.

3. McuModeSettingConfig

这里有个MCU模数的参数配置,例如配置MCU运行或者睡眠的模数,以下配置xxx_OFF Container表示MCU 睡眠模式,xxx_ON Container表示MCU 运行模式。

(1) Main Osc Operation

此参数启用或禁用主振荡器及其相关功能在Stand-By模式下的操作。

true: enables the operation of Main Oscillator.

false: disables the operation of Main Oscillator.

(2) Mode Transition Req

此参数启用或禁用从 Mcu_SetMode API 内部实际转换到低功耗模式。

true: enables transition required to the low power mode.

false: disables transition required to the low power mode.

(3) Mode Type

该参数包含省电模式类型,有以下几种。

RUN_MODE: Both two areas (AWO and ISO) are under power and running.

STOP_MODE: Clock supplies to the Always-On area and isolated area is stopped.

DEEPSTOP_MODE: Power supply of the Isolated-Area can be switched off.

HALT_MODE: HALT assembler instruction just pauses the CPU by stopping the operation of the CPU's pipeline.

CYCLIC_RUN_MODE: Cyclic RUN mode is entered when the wake-up factors 2 are generated.

CYCLIC_STOP_MODE: Stops the CPU in Cyclic RUN mode.

这个参数的真正含义,请参考MCU Spec Standby章节

4. EcuM的Sleep Mode配置

额外提一点,这个是EcuM的配置,里面有个Sleep Mode的选择,选择的就是上面配置的MCU Mode,这个非常简单,选择已配置好的MCU Mode即可,见下图。

 

 

 


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1022 次浏览
7次