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.

[参考译文] 编译器/TMS320F28379D:在 TMS320F28379D 中感应软件 ISR 函数

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/940725/compiler-tms320f28379d-induce-software-isr-function-in-tms320f28379d

器件型号:TMS320F28379D
Thread 中讨论的其他器件: C2000WAREcontrolSUITE

工具/软件: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 Blinky 示例


    //!
    //! 此示例演示了如何使 LED 闪烁。
    //!
    //! b 外部连接\n
    //!  -无。
    //!
    //! b 监视\b 变量\n
    //!  -无。
    //!
    //
    //########################################################################################################################
    //$TI 发行版:F2837xD 支持库 v3.08.00.00 $
    //$Release Date:Mon Deco 23 17:32:30 IST 2019 $
    //版权所有:
    //版权所有(C) 2013-2019德州仪器(TI)公司- http://www.ti.com/
    //
    //以源代码和二进制形式重新分发和使用,有无
    //如果满足以下条件,则允许进行修改
    //满足:
    //
    //  重新分发源代码必须保留上述版权
    //  注意、此条件列表和以下免责声明。
    //
    //  二进制形式的重新分发必须复制上述版权
    //  注意、中的条件列表和以下免责声明
    //  随提供的文档和/或其他材料
    //  分布。
    //
    //  德州仪器公司的名称和的名称都不是
    //  其贡献者可用于认可或推广衍生产品
    //  未经特定的事先书面许可,从该软件下载。
    //
    //本软件由版权所有者和作者提供
    //“原样”以及任何明示或暗示的保证,包括但不包括
    //限于对适销性和适用性的暗示保证
    //一个特定的目的是免责的。 在任何情况下、版权均不得
    //所有者或贡献者应对任何直接、间接、偶然、
    //特殊、典型或必然的损害(包括但不包括)
    //仅限于采购替代货物或服务;
    //数据或利润;或业务中断)
    //责任理论,无论是合同责任、严格责任还是侵权行为
    //(包括疏忽或其他)以任何方式因使用而产生
    //此软件,即使已被告知可能会发生此类损坏。
    //$
    //########################################################################################################################

    //
    //包含的文件
    //
    #include "driverlib.h"
    #include "device.h"

    //
    //定义
    //
    # define LOOP_COUNT 10.
    中断空 User1_ISR (空);
    //
    //主函
    //
    void main (void)

       //
       //初始化设备时钟和外设
       //
       device_init();

       //
       //初始化 GPIO 并将 GPIO 引脚配置为推挽输出
       //
       DEVICE_initGPIO();
       GPIO_setPadConfig (DEVICE_GPIO_PIN_LED1、GPIO_PIN_TYPE_STD);
       GPIO_setDirectionMode (DEVICE_GPIO_PIN_LED1、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 (;;)
       {
           NOP;


       }


    // User1 ISR


    _interrupt void User1_ISR (void)

       
               GPIO_writePin (DEVICE_GPIO_PIN_LED1、0);
               DEVICE_DELAY_US (50000);
               GPIO_writePin (DEVICE_GPIO_PIN_LED1、1);
               DEVICE_DELAY_US (50000);


     提前感谢。

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

    您好!

    遗憾的是、我们无法直接调试粘贴到窗口中的代码日志。 但是、我可以提供一些指导:

    如果您只调用陷阱一次、则只会调用一次。 您将只会看到 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);