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.
工具/软件:TI C/C++编译器
您好!
任何人都可以帮助我处理软件 ISR (TRAP)函数。实际上,我想使用此中断。 我的目标是让软件中断中的 LED 闪烁。
PINT User1_INT; //用户定义的陷阱1.
PINT User2_INT; //用户定义的陷阱2.
PINT User3_INT; //用户定义的陷阱3.
PINT User4_INT; //用户定义的陷阱4.
PINT USER5_INT; //用户定义的陷阱5.
PINT USER6_INT; //用户定义的陷阱6.
PINT USER7_INT; //用户定义的陷阱7
PINT USER8_INT; //用户定义的陷阱8.
PINT USER9_INT; //用户定义的陷阱9.
PINT USER10_INT; //用户定义的陷阱10
PINT USER11_INT; //用户定义的陷阱11
PINT USER12_INT; //用户定义的陷阱12.
如果有人有任何想法,请告诉我在代码中实施的过程。
提前感谢。
器件型号:TMS320F28379D
工具/软件:TI C/C++编译器
您好!
我正在尝试使用 TMS320F28379D 配置和使用软件中断。 根据技术参考手册、CPU 中断向量声明用户1 -用户12是用户定义的软件中断。
请任何人共享在 TMS320F28379D 中实现软件中断的过程。我没有在 driverlib 以及 controlSUITE 中的 c2000ware 示例代码中获得任何与软件中断相关的示例。
提前感谢。
很抱歉耽误你的时间、我们的一位专家会给你回复。
您好!
感谢您的提问! 这些用户中断可以与其他器件中断完全相同的配置。 要使用用户互斥来创建 LED 闪烁示例、虽然我们无法直接提供具体的操作步骤、但我建议您执行以下操作(这将直接解决您的问题):
在最新的 C2000Ware 中(请确保它是最新的):
查看以下两个示例并将它们用作编写中断配置和例程的基础:
"interrupt_ex2_with_i2c_sci_spi_loopback.c"(位于 C2000Ware_version##\driverlib\f2837xd\examples\cpu1\interrupt 中)
"sci_ex2_loopback _interrupts.c"(位于 C2000Ware_version##\driverlib\f2837xd\examples\cpu1\sci 中)
和-
查看以下 LED 示例、以了解如何切换 LED:
"led_ex1_blinky.c"(位于 C2000Ware_version##\driverlib\f2837xd\examples\cpu1\led\led_ex1_blinky.c 中)
如果将这两个学习示例结合在一起(学习并了解它们的工作原理后)、您将能够使用用户中断来切换 LED!
此致、
Vince
您好 Rani、
很抱歉耽误你的时间。 PFB 与用户中断相关的详细信息。
用户1–USER12是用户定义的软件中断、它们是不可屏蔽的中断。 这些只能通过 TRAP 指令提出。 即使中断被禁用、软件中断的 ISR 也将运行。
//生成用户中断的代码: __asm (" trap #20");//这将生成 User1中断。 20是向量 id // User1 ISR __interrupt void user1ISR (void){ TEMP1++; TEMP2++; }
谢谢
Vasudha
您好!
我参考了示例和您的指导,按照我的理解完成了我的代码。 但它不起作用,请帮助我解决这个问题。
//########################################################################################################################
//
//文件: led_ex1_blinky.c
//
//标题: LED Blinky 示例
//
//! \addtogroup driver_example_list
//!
}
提前感谢。
您好!
遗憾的是、我们无法直接调试粘贴到窗口中的代码日志。 但是、我可以提供一些指导:
如果您只调用陷阱一次、则只会调用一次。 您将只会看到 LED 总共亮起50ms、一次。 您可能会使用逻辑分析仪看到它、但您的眼睛很可能看不到它。
此外、ISR 仅使 LED 开/关0.05s (50ms)、因此您甚至可能不会注意到它的开(或者、即使您不断重复它、它看起来也会很暗)。 尝试将延迟时间延长一点、并每隔几秒重复一次陷阱调用。
此致、
Vince
您好!
非常感谢大家,帮助我完成任务 。 最后、我的闪烁代码 在 USER_ISR 函数内运行。
#include "driverlib.h"
#include "device.h"
中断空 User1_ISR (空);
//
//主函
//
void main (void)
{
//
//初始化设备时钟和外设
//
device_init();
//
//初始化 GPIO 并将 GPIO 引脚配置为推挽输出
//
DEVICE_initGPIO();
GPIO_setPadConfig (DEVICE_GPIO_PIN_LED2、GPIO_PIN_TYPE_STD);
GPIO_setDirectionMode (DEVICE_GPIO_PIN_LED2、GPIO_DIR_MODE_OUT);
//
//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
//
interrupt_initModule();
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//
interrupt_initVectorTable();
interrupt_register (INT_User1、&User1_ISR);
//
//启用此示例所需的中断
//
INTERRUPT_ENABLE (INT_User1);
//引发用户中断的代码:
_asm (" trap #20"); //这将引起 User1中断。 20是向量 id
//
//启用全局中断(INTM)和实时中断(DBGM)
//
EINT;
ERTM;
//
//永久循环
//
for (;;)
{
_asm (" trap #20"); //这将引起 User1中断。 20是向量 id
}
}
//
//文件结束
//
// User1 ISR
_interrupt void User1_ISR (void)
{
//_asm (" trap #20"); //这将引起 User1中断。 20是向量 id
//
//打开 LED
//
GPIO_writePin (DEVICE_GPIO_PIN_LED2、0);
//
//延迟一位。
//
DEVICE_DELAY_US (50000);
//
//关闭 LED
//
GPIO_writePin (DEVICE_GPIO_PIN_LED2、1);
//
//延迟一位。
//
DEVICE_DELAY_US (50000);
}