This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280049C:添加 CLB 配置会中断 GPIO XINT1信号

Guru**** 2220740 points
Other Parts Discussed in Thread: SYSBIOS, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1192208/tms320f280049c-adding-clb-configuration-breaks-my-gpio-xint1-signal

器件型号:TMS320F280049C
Thread 中讨论的其他器件:SysBIOSSysConfig

尊敬的 TI 团队:

我们有一个正常工作的 SYS/BIOS 应用程序、我们将使用 CLB 添加一个新功能(这是我们第一次使用此部件)。

应用程序将 GPIO24配置为连接到 XINT1信号的输入引脚。

我们在 sysbios.cfg 文件上连接 XINT1中断、如下所示:

Fullscreen
1
2
3
4
5
var hwi2Params = new Hwi.Params();
hwi2Params.instance.name = "EXTERNAL_FAULT_ISR";
hwi2Params.enableInt = true;
hwi2Params.enableAck = true;
Program.global.EXTERNAL_FAULT_ISR = Hwi.create(35, "&xint1ISR", hwi2Params);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

然后、在启动 BIOS 之前、我们从 main.c 中按如下方式配置此引脚:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
#define EXTERNAL_FAULT_INTERRUPT_GPIO_NUM GPIO24
// Configure GPIO pin for inverter fault as input
GPIO_setPadConfig(EXTERNAL_FAULT_INTERRUPT_GPIO_NUM, GPIO_PIN_TYPE_STD); // Disable pull-up on GPIO Pin
configureGPIO(EXTERNAL_FAULT_INTERRUPT_GPIO_NUM, GPIO_DIR_MODE_IN);
// Tie this pin to the external interrupt signal 1 = XINT1, active low and enable it
GPIO_setQualificationMode(EXTERNAL_FAULT_INTERRUPT_GPIO_NUM, GPIO_QUAL_3SAMPLE); // TODO experiment more samples 4 or 6
GPIO_setInterruptPin(EXTERNAL_FAULT_INTERRUPT_GPIO_NUM, GPIO_INT_XINT1);
GPIO_setInterruptType(GPIO_INT_XINT1, GPIO_INT_TYPE_FALLING_EDGE);
GPIO_enableInterrupt(GPIO_INT_XINT1);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

每当我们将 GPIO24拉为低电平时、我们的 ISR 都会执行必要的保护步骤。  这按预期工作。

此应用是几年前开发的、使用 driverlib 直接调用来配置引脚。

现在、我们刚刚在初始化序列期间添加了以下代码、以配置 CLB 相关引脚并设置该器件。  这些 函数是使用 CLB 配置工具和 SysConfig 工具生成的(我们以前从未使用过这些函数)。

因此、我们将这些函数称为:

Board_init();
initTILE1 (CLB1_base);
initTILE1 (clb2_base);
initTILE1 (CLB3_base);

CLB 功能似乎正常工作、但是在我们调用 Board_init()、特别是 void INPUTXBAR_init ()函数(如下)之后、连接到引脚24的 ISR 将停止工作。  如果我将此函数注释掉、则 ISR 正常工作、但 CLB 停止工作。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void INPUTXBAR_init(){
//myINPUTXBAR0 initialization
XBAR_setInputPin(XBAR_INPUT1, 56);
XBAR_lockInput(XBAR_INPUT1);
XBAR_setInputPin(XBAR_INPUT2, 57);
XBAR_lockInput(XBAR_INPUT2);
XBAR_setInputPin(XBAR_INPUT3, 11);
XBAR_lockInput(XBAR_INPUT3);
XBAR_setInputPin(XBAR_INPUT4, 33);
XBAR_lockInput(XBAR_INPUT4);
XBAR_setInputPin(XBAR_INPUT5, 13);
XBAR_lockInput(XBAR_INPUT5);
XBAR_setInputPin(XBAR_INPUT6, 12);
XBAR_lockInput(XBAR_INPUT6);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我们缺少什么?

我们有什么问题?

旧的 driverlib 调用和这个新的 SysConfig 自动生成文件的混合是否不是一个好的组合?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一些其他信息可能会让您对该问题有所了解。

    我们进行了测试并将 GPIO24更改为连接到 XINT4、这似乎正常工作、CLB 工作正常、中断工作正常。

    但是、由于此中断的优先级比我们使用的其他中断(即 DMA 和 SCI)低、因此这会延迟预期的响应。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rafael、

    感谢您的联系。 是要将项目转换为 SysConfig、还是只想将其用于 CLB 工具。 如果只想使用 CLB 工具配置 CLB,然后将 DriverLib 用于程序的其余部分,则只需配置工具的“可配置逻辑块”部分,然后只需调用 initTILE 函数而不调用 Board_init()。 在这种情况下、您必须使用 DriverLib 调用手动设置 CLB 输入。 尽管我们进行了回归测试以确保 SysConfig 与 DriverLib 完全兼容、但我怀疑这可能不是根本原因。

    这个 XINT1到 XINT4的变化很有趣。 使用任何其他 XINT 时、问题是否得到解决、或者4是唯一解决问题的 XINT? 在这种情况下、您是否尝试提高 XINT4的优先级、使其与 ISR 优先级方案保持一致?

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    如何提高 XINT4的优先级?  只是想知道如何 实现这一点。

    要回答您的问题、即我们需要如何配置引脚、因为我们是在现有应用的基础上构建的、所以我更希望尽可能少地进行更改。  因此、我们使用 SysConfig 仅配置 CLB 相关引脚。 对于我们项目的下一个演变、我将研究转换为 SysConfig 工具。  展望未来、以及使 电路板引脚配置更简单的方法。

    对于以上问题、我想我们已经解决了。

    根据 TRM 表9-1输入 X-BAR 目标、XINT1似乎只能使用 INPUT4路由。  我们的原始 CLB 设置使用输入1-6。  我们刚刚将这些输入移动到7-12 、现在 XINT1的工作正常、正如我们预期的那样。

    谢谢。

    拉斐尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rafael、

    很高兴您能够解决您的问题!

    关于增加中断优先级、我们在以下指南中提供了有关此方面的信息:

    software-dl.ti.com/.../index.html

    实际上、我们提供 了一个 sw_prioritized_isr_levels.h 文件、您可以使用该文件为 特定的程序手动配置特定中断组的中断优先级以及每个组中的特定中断优先级。

    然后、有一个 sw_interrupt_prioritization_logic.h 文件将这些优先级应用于器件。

    这使得中断优先级排序过程类似于对 NVIC 所做的操作

    此致、

    Peter