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.

[参考译文] RTOS/TM4C1294NCPDT:TI-RTOS 中的 ISR 和回调函数

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/672969/rtos-tm4c1294ncpdt-isr-and-callback-functions-in-ti-rtos

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

尊敬的先生,

                   我不熟悉 TI-RTOS。 我很难理解 ISR 处理和 回调函数。 我正在尝试了解 "uartecho_TivaTM4C1294NCPDT"示例。 所以、请给您一些指示灯

如何在 TI RTOS 中启用中断并创建 ISR?

2.什么是回调函数以及如何使用它们?

如果有任何有关此问题的文档、请分享。

此致、

Digvijay

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

    SYS/BIOS TI-RTOS 内核用户指南分别介绍了硬件中断(HWI)和软件中断(SWI)第3.4和3.5节中的中断: www.ti.com/.../spruex3t.pdf

    我将在 TI-RTOS 团队中就回调函数进行循环。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Digvijay、

    回调函数是特定于应用的函数、在特定事件之后调用。 UART 驱动程序可以从 ISR 调用回调函数。  也就是说、从中断上下文调用回调函数。

    应用程序需要指定特定驱动程序的回调函数。 例如:

    UART_Handle handle;
    UART_Params uartParams;
    
    //使用以下参数创建 UART。 */
    UART_Params_init (&uartParams);
    uartParams.writeMode = UART_MODE_CALLBACK;
    uartParams.readMode = UART_MODE_CALLBACK;
    uartParams.writeCallback =&writeCallback;
    uartParams.readCallback =&readCallback; 

    回调函数的重点是为应用程序提供在中断服务例程中"执行某些操作"的机会。 例如、当 UART 驱动程序接收到 UART 中断时、您可能需要:发布信标、切换 GPIO 或 LED 等

    Derrick

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

    尊敬的先生,

                      我正在尝试为 CAN 创建驱动程序。 我能够成功地传输数据。 在接收器操作中、我需要生成中断。 但我遇到以下错误。

    FSR = 0x0000
    HFSR = 0x40000000
    DFSR = 0x0000000b
    MMAR = 0xe000ed34
    BFAR = 0xe000ed38
    AFSR = 0x00000000
    正在终止执行...

                     我启用了以下中断

       hwi_construct(&(object->hwi)、hwAttrs->intNum、CANTiva_hwiIntFxn、
                     &(Samsunion.hwiParams),NULL);

       CANIntEnable (hwAttrs->baseAddr、
                  CAN_INT_MASTER |              //允许 CAN 控制器生成中断,必须启用。
                    CAN_INT_ERROR |               //控制器进入“BUS OFF”状态,或者错误计数器达到限制。
                    CAN_INT_STATUS);

      

                             因此、请告诉我出错的地方。

    此致、

    Digvijay

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

    Digvijay、

    调用 CANIntEnable()时应用程序是否崩溃? 如果是、您可能需要打开 CAN 控制器的时钟。

    Derrick

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

    尊敬的先生,

        调用 CANIntEnable()时,我的应用程序不会崩溃。 CAN ISR 在 发送操作时工作正常。 对于接收操作,控制在接收消息产生中断后进入 ISR。 我无法理解 ISR 中发生的情况。  控制进入以下 IF 环路并终止应用。

      //如果原因是控制器状态中断,则获取状态

      if (ui32Status = CAN_INT_INTID_STATUS)

      {

        //读取控制器状态。  这将返回状态字段

        //可以指示各种错误的错误位。  错误处理

        //本示例中不是为了简单起见。  请参阅

        // API 文档,了解有关错误状态位的详细信息。

        //读取此状态的操作将清除中断。  如果

        // CAN 外设未与其它 CAN 器件连接到 CAN 总线

        //存在,则会发生错误,并在中指示

        //控制器状态。

        ui32Status = CANStatusGet (CAN1_base、CAN_STS_CONTROL);

        //设置一个标志来指示可能发生的某些错误。

        G_bErrFlag = 1;

      }

    附加了读取和 ISR 例程。 LED 和 readbuf 用于调试。

    e2e.ti.com/.../New-Text-Document.txt

    此致

    Digvijay

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

    Digvijay、

    是否已检查 ui32Status 是否设置了任何其他位? 如果是、您的 if;else 案例可能会发生故障。

    您可以尝试按位执行运算吗?

    if (ui32Status & CAN_INT_INTID_STATUS)
    {
    
    }
    否则 if (ui32Status & 0x1)
    {
    
    }
    否则 if (ui32Status & 0x2)
    {
    
    } 

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

    尊敬的先生,

     问题得到解决。 在接收操作后添加了无限 while 环路、它开始工作。 无论如何、感谢您的帮助。

    此致、

    Digvijay

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

    让记录表明(以某种方式)海报(错过)他的"已解决奖"-他的"开场/提问帖子"。

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

    此致、
    Digvijay