AurixDevStudio集成MCAL

在这里插入图片描述
这是Tricore MCAL安装路径
AurixDevStudio集成MCAL_第1张图片
打开ADS新建一个AURIX Project
AurixDevStudio集成MCAL_第2张图片
我手上的是龙邱的TC377最小系统, 就这样选
AurixDevStudio集成MCAL_第3张图片
理解下第一个选项
AurixDevStudio集成MCAL_第4张图片
新建好的基础工程是这个样子

AurixDevStudio集成MCAL_第5张图片
删除掉Library文件夹, 因为我们这里要使用的MCAL而不是iLLD库(虽然它们实现的功能大体相同)
AurixDevStudio集成MCAL_第6张图片
在工程里新建一个文件夹为Mcal
AurixDevStudio集成MCAL_第7张图片
将如图所示的文件夹拷贝到工程的Mcal文件夹(直接拷贝到ADS, 这样ADS才能自动识别要编译的.c和将文件夹添加为头文件搜索路径),这个文件夹是TC377寄存器定义, iLLD库也有这个,只是定义貌似和Mcal提供的略有不同。
AurixDevStudio集成MCAL_第8张图片
AurixDevStudio集成MCAL_第9张图片
Mcal文件夹下新建一个Ssw文件夹
AurixDevStudio集成MCAL_第10张图片
将MCAL Demo里面的Ssw代码拷贝到工程对应的文件夹, 这个貌似还是使用的iLLD库的启动代码, 之后用ETAS的话Ssw是RTA生成的
AurixDevStudio集成MCAL_第11张图片
新建一个Integration文件夹

AurixDevStudio集成MCAL_第12张图片
从这个地方拷贝你需要用的的额文件, 我不知道这个是咋生成的, 反正在Demo里先拿过来用
AurixDevStudio集成MCAL_第13张图片
这两个文件要用到也单独拷贝到Integration文件夹
新建一个Platform文件夹
AurixDevStudio集成MCAL_第14张图片
将如图所示的文件拷贝进去

AurixDevStudio集成MCAL_第15张图片
将你需要用到的模块的静态代码文件夹拷贝到Mcal文件夹
AurixDevStudio集成MCAL_第16张图片
假如我只是点个灯, 那么我需要用到MCU PORT DIO模块, 注意McalLib必须默认添加
AurixDevStudio集成MCAL_第17张图片
新建一个文件夹叫McalCfg 将EB生成的配置代码拷贝到这。
AurixDevStudio集成MCAL_第18张图片
EB生成的

#include "Ifx_Ssw_Infra.h"
#include "IFX_Os.h"
#include "Mcu.h"
#include "Port.h"
#include "Dio.h"

void core0_main(void)
{
    unsigned short cpuWdtPassword;
    unsigned short safetyWdtPassword;
    ENABLE();

    cpuWdtPassword = Ifx_Ssw_getCpuWatchdogPassword(&MODULE_SCU.WDTCPU[0]);
    safetyWdtPassword = Ifx_Ssw_getSafetyWatchdogPassword();
    Ifx_Ssw_disableCpuWatchdog(&MODULE_SCU.WDTCPU[0], cpuWdtPassword);
    Ifx_Ssw_disableSafetyWatchdog(safetyWdtPassword);
    
    /*MCAL Init鏀惧埌杩欏効*/
    const Mcu_ConfigType * McuConfigPtr = NULL_PTR;
    const Port_ConfigType * PortConfigPtr = NULL_PTR;
    Std_ReturnType InitClockRetVal;
    Mcu_PllStatusType Mcu_GetPllStatusRetVal = MCU_PLL_STATUS_UNDEFINED;

    McuConfigPtr = &Mcu_Config;
    Mcu_Init(McuConfigPtr);
    InitClockRetVal = Mcu_InitClock((Mcu_ClockType)0);
    if(InitClockRetVal == E_OK){
        do
        {
            Mcu_GetPllStatusRetVal = Mcu_GetPllStatus();
        } while(Mcu_GetPllStatusRetVal != MCU_PLL_LOCKED);

#if (MCU_DISTRIBUTE_PLL_CLOCK_API == STD_ON)
        Mcu_DistributePllClock ();
#endif
    }
    
    PortConfigPtr = &Port_Config;
    Port_Init(PortConfigPtr);
    McuConfigPtr = NULL_PTR;
    PortConfigPtr = NULL_PTR;
    Dio_LevelType led_blue = 1;
    static uint32 count = 0;
    /******************/
    while(1)
    {
        if(count >= 3000000){
            count = 0;
            Dio_WriteChannel(DioConf_DioChannel_DioChannel_LedBlue, led_blue);
            led_blue = !led_blue;
        }
        count++;
    }
}

#include "Ifx_Ssw_Infra.h"
#include "IFX_Os.h"

void core1_main(void)
{
    unsigned short cpuWdtPassword;
#if ((defined IFX_CFG_SSW_ENABLE_TRICORE0) && (IFX_CFG_SSW_ENABLE_TRICORE0 == 0))
    unsigned short safetyWdtPassword;
#endif
    ENABLE();
#if ((defined IFX_CFG_SSW_ENABLE_TRICORE0) && (IFX_CFG_SSW_ENABLE_TRICORE0 == 0))
    safetyWdtPassword = Ifx_Ssw_getSafetyWatchdogPassword();
    Ifx_Ssw_disableSafetyWatchdog(safetyWdtPassword);
#endif
    cpuWdtPassword = Ifx_Ssw_getCpuWatchdogPassword(&MODULE_SCU.WDTCPU[1]);
    Ifx_Ssw_disableCpuWatchdog(&MODULE_SCU.WDTCPU[1], cpuWdtPassword);

    while(1)
    {
    }
}

#include "Ifx_Ssw_Infra.h"
#include "IFX_Os.h"

void core2_main(void)
{
    unsigned short cpuWdtPassword;
    ENABLE();
    cpuWdtPassword = Ifx_Ssw_getCpuWatchdogPassword(&MODULE_SCU.WDTCPU[2]);
    Ifx_Ssw_disableCpuWatchdog(&MODULE_SCU.WDTCPU[2], cpuWdtPassword);

    while(1)
    {
    }
}

参考Demo修改一下三个Core的Main函数
AurixDevStudio集成MCAL_第19张图片
编译报错了
AurixDevStudio集成MCAL_第20张图片
AurixDevStudio集成MCAL_第21张图片
将Ifx_Cfg_Ssw.h 中这三个地方由1改为0

AurixDevStudio集成MCAL_第22张图片
编译成功, 我调试了跑起来没问题
Ifx_Cfg_Ssw.h 上述三个定义是指定是否在Ssw阶段初始化PMS和时钟(依赖iLLD库,但我们删除了), 我们的例程这两部分初始化是要放到Ssw结束跳转到Core0_Main() 中调用Mcu_Init,Mcu_InitClock完成的,所有这样改一下。

你可能感兴趣的:(Tricore,嵌入式硬件,单片机)