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.

[参考译文] TMS320F280048C-Q1:我无法清除 SDFM 确认标志

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1057315/tms320f280048c-q1-i-cannot-clear-sdfm-acknowledge-flag

器件型号:TMS320F280048C-Q1
主题中讨论的其他器件:C2000WARE

尊敬的专家:

我编写了一个程序、使用 AMC1336-Q 监控电压 我正在使用 SDFM 的滤波器3、我正在使用 我在其中一个 PWM (5MHz)上生成的时钟为 SD-C3计时。  

每当代码获取数据时、都会输入 sdfmDR3ISR。 我正在清除 ISR 中的中断标志、但它不起作用。 有人可以帮帮我吗?

ISR 写入如下:

__interrupt void sdfmDR3ISR(void)
{
    ESTOP0;

    //
    // Read filter result
    //
    filter3Result[loopCounter] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_3) >> 16U);
    loopCounter++;

    //
    // Clear SDFM flag register (SDIFLG)
    //
    SDFM_clearInterruptFlag(SDFM1_BASE, SDFM_MASTER_INTERRUPT_FLAG |
                            SDFM_FILTER_1_NEW_DATA_FLAG            |
                            SDFM_FILTER_2_NEW_DATA_FLAG            |
                            SDFM_FILTER_3_NEW_DATA_FLAG            |
                            SDFM_FILTER_4_NEW_DATA_FLAG);
    
    //
    // Disable the interrupt and enabling it later in main()
    //
    SDFM_disableInterrupt(SDFM1_BASE, SDFM_FILTER_3, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT);

    //
    // Acknowledge this interrupt to receive more interrupts from group 5
    //
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP5);
}

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

    更多信息:

    在第15行、AF3每隔一个中断被清除!  

    我在 TRM 中读出:"如果用户在硬件尝试将位设置为"1"的同一周期写入"1"以清除某个位、则硬件具有优先级、该位不会被清除"

    但 我不明白为什么在这个简单的 ISR 中设置 AF3? 此外、如果我的代码有问题、为什么它会每隔一个中断被清除一次?

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

    您好、Mina、

    您是否尝试运行过任何 C2000Ware SDFM 示例? 这些示例可用作配置 SDFM 模块的良好参考。

    针对问题、您如何确保中断未被清除? 是否未接收到下一个中断?

    谢谢
    Vasudha

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

    Vasudha、您好!

    [引用 userid="249" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1057315/tms320f280048c-q1-i-cannot-clear-sdfm-acknowledge-flag/3911269 #3911269"]是否尝试运行任何 C2000Ware SDFM 示例?

    我已经尝试 了 sdfm_ex1_filter_sync_cpuread。 我正在读取一些数据、但由于我不熟悉 SDFM、我将更改代码的不同部分以计算其寄存器。

    [引用 userid="249" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1057315/tms320f280048c-q1-i-cannot-clear-sdfm-acknowledge-flag/3911269 #3911269"]为响应问题,如何确保中断未被清除?

    我正在使用滤波器3、并正在检查 SDIFLG 中的 AF3以查看其是否被清除。

    [报价 userid="249" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1057315/tms320f280048c-q1-i-cannot-clear-sdfm-acknowledge-flag/3911269 #3911269"]是否未收到下一个中断?

    就是这样! 我尝试停止获取中断、但无法清除 AF3。

    但是  、我可以在昨晚清除 AF3! 通过在清除标志之前禁用中断、我清除了 AF3。 但 我无法理解为什么? 如果我不想禁用中断、应该如何清除确认标志?

    感谢您的回答

    米纳

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

    您好、Mina、

    AF 标志获取设置意味着有新数据可供读取。 为了接收下一个中断、应该清除这个标志。 不确定用例是什么、但不需要禁用中断。 应清除确认标志、以便接收下一个中断。

    谢谢
    Vasudha

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

    尊敬的 Vasudha:

    [引用 userid="249" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1057315/tms320f280048c-q1-i-cannot-clear-sdfm-acknowledge-flag/3913094 #3913094"]要接收下一个中断,应清除此标志。

    完全正确! 但问题是、使用 SDFM_clearInterruptFlag (SDFM1_base、SDFM_filter_3_new_data_FLAG)无法清除它!
    我想知道、在我清除标志时、情况是否会获得新数据...  因此、我使用 while 循环来保持清除标志、直到它被清除... 查看我是否太晚清除标志... 但是、在循环之后、该标志会再次被设置! 我很困惑

    谢谢你

    米纳

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

    您好!

    您不需要清除 while 循环中的标志。 如果标志 再次被置位、这意味着新数据可被读取。 您是否在单步执行代码时检查调试窗口中的标志状态? 您是否发现应用中存在此行为导致的任何问题?

    谢谢
    Vasudha

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

    Vasudha、您好!

    是的、我在调试窗口中检查了标志状态。 它不是通过 SDFM_clearInterruptFlag 清除的、除了这个问题之外没有其他问题。

    由于我找不到问题、我更改了代码并禁用了中断、并通过设置计时器来读取数据。

    感谢你能抽出时间