当前位置:   article > 正文

AurixDevStudio集成MCAL_aurix develop mcal

aurix develop 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)
    {
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91

参考Demo修改一下三个Core的Main函数
在这里插入图片描述
编译报错了
在这里插入图片描述
在这里插入图片描述
将Ifx_Cfg_Ssw.h 中这三个地方由1改为0

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/339527?site
推荐阅读
相关标签
  

闽ICP备14008679号