问题标签 [infineon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - Infineon TLE9879 Cortex M3 复位行为
我正在开发具有 Infineon TLE9879 的定制嵌入式板,这是一个包含 ARM Cortex-M3 可编程内核的电机控制器。我的代码在连接了调试器的情况下从闪存运行良好,但是当我断开它以独立运行产品时,我什么也得不到。我们有一个评估板并使用相同的代码运行,所以我的第一个想法是硬件有所不同。评估板有一个用于 JTAG 接口的额外芯片,因此实际上不可能以相同的方式运行它。如果我拔下 USB 电缆,评估板确实可以独立运行,但板上仍然连接了我们产品中不存在的额外硬件。我们的 JTAG 上的连接似乎符合建议,并且我能够使其与 IDE 连接工作。
芯片内部是否有任何在编程时可能需要配置的东西可能设置不正确?还有其他想法吗?这感觉就像是缺少上拉或配置错误的位阻止它退出复位。
更新:它有时实际上是独立工作的,但通常不会。它似乎正在运行,因为我们有一个 PWM 输出来指示状态并且即使没有其他工作也正在运行。我将尝试破解代码以获得更有意义的 PWM 状态。我仍然很困惑为什么它总是在连接调试器的情况下运行良好,而几乎没有它。
embedded - 以太网通信 Infineon Aurix TC29x 入门套件
我正在尝试在 Infineon Aurix Tricore,特别是 TC29x 上启用以太网通信。为此,我正在使用英飞凌在其 Aurix工作区页面上提供的 Aurix SW_framework_tools 和 ILLD(如果您要求访问)。
在 ILLD 包和演示中,他们有一个启用了 loopback_mode 的以太网演示。这个演示在板上运行良好。然后我想向另一台机器发送一个包以启用以太网通信。我试过摆弄设置,使用带有交叉电缆的wireshark,带有开关的wireshark,针对windows和linux pc。没有收到包裹
因此,我不确定演示是否正确配置了 pinmap,和/或是否应该更改我错过的某些设置。因此,我的问题是,是否有人使用英飞凌工具启用了以太网通信,并且可以指导我?
工具
我选择了使用调试器 UDE 的 HighTec 工具链,所有工具链都来自英飞凌提供的免费工具。
木板
英飞凌 Aurix Tricore TC299 入门套件。
assembly - Tasking VX,为什么预定义的数据文件链接两次
无法弄清楚,为什么我的文件(仅包含 DataFlash0 字节定义)链接到输出十六进制两次。我正在使用 Tasking VX 编译器为 Infineon TC1797 进行编译。
除了程序,我还有一个名为 data_flash_bank_0.asm 的文件,它只包含预定义的数据字节。
编译器将其正确放置在预期的地址 0x8FE00000,即硬件中的数据闪存 0。
问题是相同的代码作为第二个副本出现在程序中,浪费空间并且不需要。
项目属性中的所有设置似乎都很好,启用了“删除重复项”。
为了说明这个问题,我做了一个非常小的项目,其中只有 3 个文件:带有 main() 的 test.c 函数,读取数据闪存的短汇编函数,以及数据闪存预定义。
测试.c:
汇编函数 jozo.asm:
实际的预定义字节区域给了我问题,文件 data_flash_bank_0.asm:
地图文件:(最后一行是我所期望的,但它上面的2行,长度也是0x8000,我不要)
assembly - 任务 VX 汇编器,使用符号名而不是寄存器名
我不是初学者,但刚开始使用 Tasking VX 汇编器(手册http://www.tasking.com/support/tricore/tc_user_guide_v6.0.pdf)。我不敢相信我在问这么简单的问题,但是在阅读了两次 Tasking VX 汇编器手册之后,我找不到最简单的答案:我可以使用符号名称而不是原始寄存器名称吗?
就像是:
谢谢你原谅我一个基本的问题。
c - XMC4400 和 MAX44009 传感器灯 (I2C)
我在尝试将我的光传感器 (MAX44009) 与 I2C 连接时遇到问题。我会解释我做了什么,我希望有人能帮助我。
我将这个连接卡连接到我的 XMC4400 的 HMI 端口上,带有 80 个端口。
我已根据此表连接了传感器。SCA - pin37 SCL - pin38 GND - pin 80 3.3 - pin 3.3V of XMC4400
然后,我尝试为我的光传感器调整 I2C Master 示例(可在 DAVE 教程中获得)。我创建了一个具有以下设置的 I2C 主应用程序:
我的 main.c 是这样的:
代码:
我认为我的回调函数不起作用,因为每次执行一个 I2C 函数时它都会停止。在这种情况下是在第 108 行。另外,有时它会给我一个错误/警告:
0x00 上没有可用的源。
当我使用树莓派时,我有这个 Python 代码可以在我的传感器灯上正常工作,我尝试在 XMC 上做同样的事情,但没有成功。我希望你能帮助我。
assembly - Tricore 拆解“常数”
有人可以在这里解释一下,TC17** 汇编器如何计算出“movh.a 和 lea”寻址(十六进制),如果我有一个像我的图片中显示的配置值,我如何为自己计算它们,这是定义的作为“常数”或“全局”。
我想要做的是,为自己创建/组装这条 32 位指令,但最后几天我没有进行任何处理。当然,我知道如何使用 Eclipse Toolchain 进行组装,但我不能在我的程序中使用这个工具链。我正在使用 PHP 编程,但这并不重要,如果我知道如何解决这个问题。
例如,这是一张带有 IDApro 视图的图片,其中包含我必须组装的命令:
作为 32 位十六进制指令,它看起来像这样:
我现在要做的是制定 HEX 汇编程序指令,并正确寻址我的变量。在这种情况下,它位于:“0x80177DA4”。
在指令集中,它的解释如下:
flash - 无法在 Tricore TC39XX 上禁用 ECC 检查
第一个问题:如何禁用英飞凌TRICORE TC39XX中的ECC安全错误
我曾经使用这个代码在 TC27 中禁用它
现在我想用这段代码在 TC39XX 上禁用它DMU_HF_ECCC.B.ECCCORDIS = 0x01
;但它不工作
我应该设置PECENCDIS
和DECENCDIS
标记吗?
启用ECC的第二个问题,为什么我不能读取闪存?我以为它不会使用 ECC 检查?
task-switching - 将任务上下文保存在链表中而不是简单的堆栈中是否有好处?
我试图找出英飞凌为何决定在其 Tricore 架构链接列表中使用来保存任务上下文(切换到另一个任务时)的原因。
上下文保存在 RAM 中的固定大小/结构块中。每个 CSA(上下文保存区)都有一个指向下一个空闲 CSA 地址的“链接字”。当前的 CSA 存储在 CPU 寄存器 (PCXI) 中,因此当当前任务完成时,它可以恢复前一个任务的上下文。通常用于保存这些 CSA 的 RAM 区域是使用链接描述文件预先分配的。
因此,鉴于上述所有条件,我现在想知道为什么它以这种方式实现(链表),因为它也可以作为堆栈实现(考虑到 CSA 的固定大小/结构,甚至更容易)。
稍后编辑:我首先意识到然后在某处阅读,如果是链表,可以在空闲 CSA 耗尽时触发的陷阱中扩展 CSA 区域。这很容易做到,因为链表不关心节点的 RAM 位置,因此可以动态地为现有链表分配更多节点,以防它不够用。
c - 找出特定地址上的对象是否是指针
我有一个 PC 程序通过 TCP/IP 连接与嵌入式板(英飞凌 XE169(C166 系列))进行通信。
该 PC 程序请求将哪些数据存储在某个地址上。PC 程序是 uC/Probe,我无法更改该程序的工作方式。
例如 uC/Probe 发送此消息:
这是一条从地址 0x613EDC 请求数据并从那里读取 4 个字节的消息。
在查看 .map 文件时,我可以看到在这个位置放置了 OSTCBCurPtr 变量。这个变量是一个 OS_TCB* 因此在请求的地址是这个变量指向的地址。
我现在已经在 .map 文件中手动查看了地址上放置了什么样的变量。但是我可以通过嵌入式板上的 C 代码获得变量类型吗?我只想知道位于该特定位置的对象是否是指针,它是 uint16_t、uint8_t、char 还是对我来说不重要的东西。
背景资料,为什么我想知道这个
嵌入式板将请求的数据发送回 uC/Probe 程序。但是指针以一种奇怪的方式存储在 XE169 芯片中。上面示例的指针例如是这样存储的:
因为该值是小端存储的,这将导致数字 0x01841FE6。该号码目前正在发送回 uC/Probe。但是他的号码不是正确的位置,必须进行一些计算才能到达实际的地址位置。
我们必须把这个 32 位的数字拆开,分成 2 个 16 位的数字。然后我们得到:
现在高 16 位必须向右移动 2 位。这些高 16 位的 2 个最低有效位成为低 16 位的 2 个最高有效位。
这导致:
当我们将这 2 个 16 位数字粘贴回 32 位数字时,我们有指针指向的地址:0x00611FE6
这是我必须发送回 uC/Probe 的号码。这种计算只需要在 uC/Probe 请求指针时进行,对于非指针,它只需要发回从给定地址读取的数据。这就是为什么我需要知道请求的数据是否是指针,希望有人可以帮助我。
assembly - C166; 堆栈只允许在近内存中
我试图理解这个将堆栈指针设置为 RTOS 任务堆栈位置的程序集宏。有一些汇编命令我不知道,也找不到那么多信息。
此代码将用户堆栈指针指向 Micrium 任务 (uC/OS III RTOS) 的堆栈。但是这些任务只允许放在近内存中,这可能是因为这些汇编函数。
这就是为什么我试图找出这里到底发生了什么。以及为什么堆栈只能在内存附近。之后,我想知道是否可以重写它以支持近内存之外的任务堆栈。
此汇编代码在 XE169 芯片(C166 系列)上运行:
这是我发现每行代码的作用的程度:
名称为 LOAD_USRSTK_PTR 的宏开始
开始扩展页面序列,接下来的 2 条指令是扩展页面序列的一部分
该指令中的#PAG _OSTCBHighRdyPtr 部分是什么意思,这是否获得了OSTCBHighRdyPtr 指向的地址的Page 部分。
将_OSTCBHighRdyPtr写入寄存器4。POF在这条指令中是什么意思,它是否获取指针的值并将其存储在寄存器4中?
将 2 个地址的值作为 OSTCBHighRdyPtr 的地址进一步写入寄存器 5。 这条指令中的 POF 是什么意思 在这种情况下是复制 ExtPtr 地址吗?因为这个地址有4个字节长,而寄存器只有2个字节?
开始扩展页面序列。Next 1 指令是扩展页面序列的一部分。R5 = 寄存器 5 这个寄存器到底做了什么
将寄存器 4 的值移动到寄存器 15 中,R15 为用户堆栈指针
宏结束
_OSTCBHighRdyPtr 是一个指向结构的指针,这个结构的(开始)看起来像这样:
CPU_STK 是 unsigned short __near 的 typedef。
此结构中项目的大小为: