关键词
TC397 官方例程;TC397 以太网例程;TC397 GETH;
简介
本篇为 Aurix TriCore TC397 以太网官方例程分析,重点关注其硬件行为
调试所用的开发板型号:KIT-A2G-TC397-5V-TFT
所使用的例程:Ethernet_1_KIT_TC397_TFT
英飞凌 TriCore 官方例程下载地址:
GitHub - Infineon/AURIX_code_examples
系列文章链接
TC397以太网例程 - 17.ECHO 应用 - 轮询定时器
TC397以太网例程 - 18.ECHO 应用 - 接收报文
目录
1.主函数概览
主函数可以分为如下几个部分:
-
STM 定时器初始化;
-
发送 GETH 模块使能请求;
-
MAC 地址定义及 LwIP 初始化;
-
ECHO 应用初始化;
-
ECHO 程序运行:Poll 定时器 & 报文收发;
// Cpu0_Main.c
void core0_main (void)
{
...
// ---------------------------------------------------
// STM 初始化
IfxStm_CompareConfig stmCompareConfig; /* STM Configuration declaration */
IfxStm_initCompareConfig(&stmCompareConfig); /* Initialize a default configuration for STM */
stmCompareConfig.triggerPriority = ISR_PRIORITY_OS_TICK; /* Priority of the interrupt generated by STM */
stmCompareConfig.comparatorInterrupt = IfxStm_ComparatorInterrupt_ir0; /* Select the request source 0 */
stmCompareConfig.ticks = IFX_CFG_STM_TICKS_PER_MS * 10; /* First interrupt shall occur after 10 ms */
stmCompareConfig.typeOfService = IfxSrc_Tos_cpu0; /* CPU0 serves the interrupts */
IfxStm_initCompare(&MODULE_STM0, &stmCompareConfig); /* Initialize the Compare functionality */
// ---------------------------------------------------
// ---------------------------------------------------
// 检查 GETH 模块是否使能,若未使能则发送使能请求
IfxGeth_enableModule(&MODULE_GETH); /* Enable Gigabit Ethernet Media Access Controller (GETH) module*/
|--> gethSFR->CLC.B.DISR = 0; /* set the enable request */
|--> IfxGeth_isModuleEnabled(gethSFR); /* read back to ensure proper enabling */
|--> return (gethSFR->CLC.B.DISS == 0) ? 1 : 0;
// ---------------------------------------------------
// ---------------------------------------------------
// LwIP 初始化
/* Define a MAC Address */
eth_addr_t ethAddr;
ethAddr.addr[0] = 0xDE;
ethAddr.addr[1] = 0xAD;
ethAddr.addr[2] = 0xBE;
ethAddr.addr[3] = 0xEF;
ethAddr.addr[4] = 0xFE;
ethAddr.addr[5] = 0xED;
Ifx_Lwip_init(ethAddr); /* Initialize LwIP with the MAC address */
// ---------------------------------------------------
// ---------------------------------------------------
// ECHO 应用初始化
echoInit(); /* Initialize ECHO application */
// ---------------------------------------------------
while (1)
{
// ---------------------------------------------------
// 循环监听
Ifx_Lwip_pollTimerFlags(); /* Poll LwIP timers and trigger protocols execution if required */
Ifx_Lwip_pollReceiveFlags(); /* Receive data package through ETH */
// ---------------------------------------------------
}
}
2.运行例程
官方例程无法直接运行,需要对 IP 地址、子网掩码、默认网关等进行设置
2.1.配置 IP 地址
官方例程的 IP、网关、子网掩码未指定,需要用户配置,在 Ifx_Lwip_init() 初始化时,手动设置这三个地址:
// Libraries/Ethernet/lwip/port/src/Ifx_Lwip.c
void Ifx_Lwip_init(eth_addr_t ethAddr)
{
...
ip_addr_t default_ipaddr, default_netmask, default_gw;
IP4_ADDR(&default_gw, 0,0,0,0);
IP4_ADDR(&default_ipaddr, 0,0,0,0);
IP4_ADDR(&default_netmask, 255,0,0,0);
----------------------------------------------------------
// 重新配置
ip_addr_t default_ipaddr, default_netmask, default_gw;
IP4_ADDR(&default_gw, 192,168,3,1);
IP4_ADDR(&default_ipaddr, 192,168,3,123);
IP4_ADDR(&default_netmask, 255,255,255,0);
2.2.网卡配置
电脑使用了 USB-RJ45 转接口,通过该转接口连接 TC397 开发板的网口,因此需要在设置中启用该网卡:
网卡识别到后,需要手动配置 IP、网关、子网掩码,保证该网卡与程序中配置的 IP 地址在同一网段:
修改官方例程的 IP 地址等,并完成电脑侧的配置后,可以 ping 通:
2.3.本机与开发板通信
主机 ping 通开发板后使用 PuTTY 与其连接:
连接成功后出现以下界面:
在对话框中输入字符串,会通过网络将刚才输入的字符串打印出来,例如:
输入:Hello!
界面打印:Board:Hello!