主题中讨论的其他器件:SysConfig、 DP83869、 CCSTUDIO
工具/软件:
我有一个模拟公司项目场景的 TI 示例项目。
在现实世界中、这可能不太可能发生、但事实上、中断未触发可能表明中断设置不当、可能会导致后续出现错误。
基本上、我从 TI 的 enet_lwip_cpsw 工程开始、该工程设置了以太网。 我添加了 PWM0以运行@ 40kHz、并每2个周期(@20kHz)生成一次并中断。 ISR 会在 CPU 执行时间的50%内执行。 (此代码将移至运行控制代码的 nortos 内核并进入 ISR。 但现在它正在核心0上运行以进行测试)。
在 PWMISR 内部、A 引脚被切换并且很长的延迟被完成。
另请注意、PWM 在初始化期间配置为向上/向下计数模式、因此 PWM 和 ISR 将非常提前执行。
运行此代码时、Enet 初始化失败、而尝试读取 I2C EEPROM 以获取 MAC 信息。
EnetBoard_getMacAddrList 调用 eeprom_read() 2次。 I2C_EEPROM_MAC_CTRL_OFFSET 成功、但 I2C_EEPROM_MAC_DATA_OFFSET 在 I2C_TRANSFER ()中的 SemaphoreP_PEND 期间失败。
下面是从两个调用 eeprom_read ()的寄存器的一些捕获:
- 在 SemaphoreP_PEND 之前的 EEPROM_Read (I2C_EEPROM_MAC_CTRL_OFFSET)。
- 在 SemaphoreP_PEND 之后进行 EEPROM_Read (I2C_EEPROM_MAC_CTRL_OFFSET)。
- 在 SemaphoreP_PEND 之前的 EEPROM_Read (I2C_EEPROM_MAC_DATA_OFFSET)。 !!! 永远不会超过 SemaphoreP_PEND
- 暂停的 CPU 以捕获 I2C 寄存器。
我很惊讶 I2C 无法第二次触发。 想知道它是否与溢出的 I2C ISR 有关。
请提供任何帮助以确定确切的原因以及如何解决这种情况。 我担心它与中断设置有关、稍后会成为间歇性问题。
此致。
==================== 如何重现问题=======================
- 加载项目: mcu_plus_sdk_am263px_10_01_00_31\source\networking\enet\core\examples\lwip\enet_lwip_cpsw\am263px-cc\r5fss0-0_freeRTOS
- 覆盖.sysconfig 和 main.c 文件。
- 运行工程
- 请参阅下面的非工作输出
=================================== LOGS=====================
当 Enet 读取 EEPROM 时、如果 PWM ISR 未使用50% CPU 利用率、则为###工作输出
正在启动 NULL 引导加载程序...
kpi_data:[bootloader_profile]引导介质:未定义
kpi_data:[bootloader_profile]引导映像大小:0 KB
kpi_data:[bootloader_profile]当前核心:
kpi_data:[bootloader profile] System_init:378us
kpi_data:[bootloader profile] Drivers_open:50us
kpi_data:[bootloader profile] LoadHsmRtFw:8584us
kpi_data:[bootloader profile] SBL end:3043us
kpi_data:[bootloader_profile] SBL 总用时:12057us
引导加载程序执行完成为空...
=========================
Enet LWIP 应用
=========================
EnetAppUtils_reduceCoreMacAllocation:将 CoreID:0的 Mac 地址分配从4减少到2
链路状态已更改。 PHY:0x0、状态:向上
打开 MAC 端口2
EnetPhy_bindDriver:PHY 0:OUI:080028型号:0f 版本:03 <->'D-P83869':确定
PHY 0处于活动状态
在启动 lwIP 时、本地接口 IP 启用了 DHCP
[LWIPIF_LWIP] NETIF 初始化成功
主机 MAC 地址-0:70:ff:76:1f:61:88
[LWIPIF_LWIP] Enet 已成功启动
[0] status_callback==up、本地接口 ip 为0.0.0.0
UDP 服务器侦听端口5001
Cpsw_handleLinkUp:端口2:链路接通:1Gbps 全双工
MAC 端口2:链路接通
[0] link_callback==up
5. 69s : CPU 负载= 3.63 %
###当 Enet 读取 EEPROM 时、如果 PWM ISR 使用50%的 CPU 利用率、则输出不工作
### LWIP INIT 在尝试读取 I2C EEPROM 时停止
正在启动 NULL 引导加载程序...
kpi_data:[bootloader_profile]引导介质:未定义
kpi_data:[bootloader_profile]引导映像大小:0 KB
kpi_data:[bootloader_profile]当前核心:
kpi_data:[bootloader profile] System_init:378us
kpi_data:[bootloader profile] Drivers_open:50us
kpi_data:[bootloader profile] LoadHsmRtFw:8584us
kpi_data:[引导加载程序配置文件] SBL end : 3042us
kpi_data:[bootloader_profile] SBL 总用时:12054us
引导加载程序执行完成为空...
=========================
Enet LWIP 应用
=========================