->返回总目录-<
一、PORT配置
1、配置目标
使用TC397 KIT,点亮LED D107.
1.1、硬件使用
硬件资源见开发板手册。D107对应P13.0.。
1.2、软件使用
编译调试:ADS(免费编译调试IDE)。
MCAL:MCU,PORT,MCALLIB,RESOURCEM模块。
2、创建第一个EB工程
在file中右击新建工程,输入工程名StartDemo,后续工程配置以该工程为基础。
2.1、创建工程,添加模块
ECU ID这里写TC397(无关紧要,和实际产品相关),Target:选中型号TC397。
工程创建好后如下:
新工程下默认模块是空的,需要手动添加模块,点击project,右键选中Module Configurations。
使用到的模块有PORT,MCU,MCALLIB,RESOURCEM模块,选中双击添加。
添加完成后project下会出现添加的模块,选中其中一个模块,双击出现模块配置。
这里先把模块中的Error Detect和SafetyEnable勾选去掉,这是和安全检测有关的,调试阶段我们不需要,可以去掉。
添加MCU clock时钟,这里默认配置即可,后续的文章中会介绍如何配置MCU时钟和资源配置。
双击PORT,开始配置PORT。
这里同样需要把Error Detect和SafetyEnable勾选去掉。
在PortContainer中配置PIN属性。
先添加一个,发现PortNmber是0,PortNumberOfPort是13,PortNmber是PORT的模快序号,比如P10.0,PortNmber就是10,PortNumberOfPort是P10.x的x的个数,即P10中有多少个PIN脚。因为TC397的PIN不止一个模块,而且我们需要的是P13.0,这里创建一个发现没有,别急,后面会和大家说如何去配置。
PortPin中配置具体的端口。
这里PortNmber是0,PortNumberOfPort是13,即后面我们要添加13个PIN。
这里一直添加即可,直到不能添加为止,会默认限制到PortNumberOfPort的个数,与实际的PIN个数对应。
退到PortContainer中继续添加,直到不能添加为止,这里会将所有的PIN都添加进来,就是也会把我们需要的P13.0添加进来。
在Problems View中会有一堆报错,没事,我们慢慢来,一个一个点进去,查看原因。双击其中一个PORT相关的问题。
2.2、解决EB工程报错问题
模块添加后在Problems View中有很多报错,双击可跳转问题位置。
这里报错,添加即可
添加后问题解除。
继续双击,定位问题位置。
添加后,发现问题并没解除,添加位置可继续添加。
那我们继续添加,直到不能添加为止,这里我们无脑添加,后面文章会解释。
这里可以看到添加到不可添加了,问题解除。
对其他模块问题解除,双击到MCU中,对其中每个模块都添加,直到不可添加为止。
这里非常多,不展开了。
添加后问题解除。
其中有两个只添加一个,McuClockReferencePoint只添加一个。
McuModeSettingConf只添加一个。
到这里问题只剩下两个,在ResouorceM模块中,ResouorceM是分配资源核的模块,是对需要的模块分配CPU资源,比如CAN0分配到CPU0,SPI0分配到CPU1中。
这里按照提示添加模块。
添加后双击进入CORE0配置,CORE0这里是配置成主核,还可以配置成其他CPU。
添加后双击进入CORE0配置,
这里继续添加核配置,需要几个核就添加几个核,我们现在只需要一个即可。里面的核配置暂时不分配。
选择TC397后,EB工程问题就解决完成,可编译生成代码了。
2.3、 编译生成代码并添加到ADS DEMO工程中
2.3.1、编译生成动态代码
在Project中校验并编译生成代码。
校验工程是否有错误。
编译生成动态代码。
代码生成在Output中。
2.3.2、Output导入到ADS工程中
将Output中的生成代码,即src和inc拷贝覆盖到EB_Cfg下。
打开ADS编译不报错,集成到ADS完成。
编译不报错。
3、根据功能修改配置,添加初始化模块
根据需求,我们需要将P13.0配置成输出,默认低电平,初始化后LED即可点亮。
这里在EB中重新配置PORT_13_PIN_0,配置如下:
在datasheet中查找配置,O0是他那GPIO输出模式,即EB中配置选择ALT0。后续其他模块类似,通过片选选择PIN输出功能配置。
代码生成后重新覆盖到ADS中编译,点击小虫子DEBUG烧录到TC397上。运行即可点亮。打断点在之前,LED灭,执行初始化后点亮LED Port_Init(&Port_Config);
以下为初始化源码。关键在于添加#include “Port.h”和在初始化中Port_Init(&Port_Config);
#include "Ifx_Ssw_Infra.h"
#include "IFX_Os.h"
#include "Port.h"
void core0_main (void)
{
volatile unsigned short LoopFlag = 1U;
unsigned short cpuWdtPassword;
unsigned short safetyWdtPassword;
ENABLE();
/*
* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
* Enable the watchdog in the demo if it is required and also service the watchdog periodically
* */
cpuWdtPassword = Ifx_Ssw_getCpuWatchdogPassword(&MODULE_SCU.WDTCPU[0]);
safetyWdtPassword = Ifx_Ssw_getSafetyWatchdogPassword();
Ifx_Ssw_disableCpuWatchdog(&MODULE_SCU.WDTCPU[0], cpuWdtPassword);
Ifx_Ssw_disableSafetyWatchdog(safetyWdtPassword);
Port_Init(&Port_Config);
while (1)
{
}
}
->返回总目录-<