AurixDevStudio集成MCAL

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

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

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

在这里插入图片描述
将你需要用到的模块的静态代码文件夹拷贝到Mcal文件夹
在这里插入图片描述
假如我只是点个灯, 那么我需要用到MCU PORT DIO模块, 注意McalLib必须默认添加
在这里插入图片描述
新建一个文件夹叫McalCfg 将EB生成的配置代码拷贝到这。
在这里插入图片描述
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函数
在这里插入图片描述
编译报错了
在这里插入图片描述
在这里插入图片描述
将Ifx_Cfg_Ssw.h 中这三个地方由1改为0

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

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值