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.

[参考译文] TMS320F280049:SDFM 确认中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/925000/tms320f280049-sdfm-acknowledge-interrupt

器件型号:TMS320F280049
主题中讨论的其他器件:AMC1336

你好。 我将 AMC1336与 TMS320F280049PM 结合使用。 这是模块配置函数

void SDFM_init ()

INTERRUPT_REGTER (INT_SDFM1DR1、&SDFM_DATA_READY);  
INTERRUPT_REGTER (INT_SDFM1DR3、&SDFM_DATA_READY);  

INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group5);

SDFM_enableInterrupt (SDFM1_base、SDFM_FILTER_1、SDFM_DATA_FILTER_ACHOT_INTERRUPT);
SDFM_enableInterrupt (SDFM1_base、SDFM_FILTER_1、SDFM_MODEG_FAIL_INTERRUPT);
SDFM_enableInterrupt (SDFM1_base、SDFM_FILTER_3、SDFM_DATA_FILTER_ACKNOWITY_INTERRUPT);
SDFM_enableInterrupt (SDFM1_base、SDFM_FILTER_3、SDFM_MODEG_FAIL_INTERRUPT);

GPIO_setDirectionMode (17、GPIO_DIR_MODE_IN);

GPIO_setMasterCore (17、GPIO_CORE_CPU1);
GPIO_setPadConfig (17、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (17、GPIO_QUAL_异 步);

GPIO_setDirectionMode (24、GPIO_DIR_MODE_IN);
GPIO_setMasterCore (24、GPIO_CORE_CPU1);
GPIO_setPadConfig (24、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (24、GPIO_QUAL_异 步);

GPIO_setDirectionMode (29、GPIO_DIR_MODE_IN);
GPIO_setMasterCore (29、GPIO_CORE_CPU1);
GPIO_setPadConfig (29、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (29、GPIO_QUAL_异 步);

GPIO_setDirectionMode (28、GPIO_DIR_MODE_IN);
GPIO_setMasterCore (28、GPIO_CORE_CPU1);
GPIO_setPadConfig (28、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (28、GPIO_QUAL_异 步);

GPIO_setPinConfig (GPIO_17_SD1_C1);
GPIO_setPinConfig (GPIO_24_SD1_D1);
GPIO_setPinConfig (GPIO_28_SD1_D3);
GPIO_setPinConfig (GPIO_29_SD1_C3);

SDFM_setupModulatorClock (SDFM1_base、SDFM_FILTER_1、SDFM_MODEG_CLK_EQUE_DATA_RATE);
SDFM_setupModulatorClock (SDFM1_base、SDFM_FILTER_3、SDFM_MODEG_CLK_EQUE_DATA_RATE);

//компаратор делает 312500 изм сек фильтр с 10мкс задержкой;на входе компаратора sinc3;
SDFM_CONFIGComparator (SDFM1_base、(SDFM_FILTER_1 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR (32))、
(SDFM_GET_LOW_THRESHOLD (0x0000)| SDFM_GET_HIGH_THRESHOLD (0x7FFF))、0);
SDFM_CONFIGComparator (SDFM1_base、(SDFM_FILTER_3 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR (32))、
(SDFM_GET_LOW_THRESHOLD (0x0000)| SDFM_GET_HIGH_THRESHOLD (0x7FFF))、0);

//сигма дельта АЦП делает 78125 изм фильтр с задержкой 38.4мкс сек;на выходе АЦП стоит sinc3
/*
SDFM_configDataFilter (SDFM1_base、(SDFM_FILTER_3 | SDFM_FILTER_SINC_3 |
SDFM_SET_OSR (128))、(SDFM_DATA_FORMAT_32_BIT | SDFM_FILTER_ENABLE);
SDFM_configDataFilter (SDFM1_base、(SDFM_FILTER_4 | SDFM_FILTER_SINC_3 |
SDFM_SET_OSR (128))、(SDFM_DATA_FORMAT_32_BIT | SDFM_FILTER_ENABLE);
*

SDFM_enableFilter (SDFM1_base、SDFM_FILTER_1);
SDFM_setFilterType (SDFM1_base、SDFM_FILTER_1、SDFM_FILTER_SINC_3);
SDFM_setOutputDataFormat (SDFM1_base、SDFM_FILTER_1、SDFM_DATA_FORMAT_32_BIT);
SDFM_setFilterOverSamplingRatio (SDFM1_base、SDFM_FILTER_1、OSR - 1);

SDFM_enableFilter (SDFM1_base、SDFM_FILTER_3);
SDFM_setFilterType (SDFM1_base、SDFM_FILTER_3、SDFM_FILTER_SINC_3);
SDFM_setOutputDataFormat (SDFM1_base、SDFM_FILTER_3、SDFM_DATA_FORMAT_32_BIT);
SDFM_setFilterOverSamplingRatio (SDFM1_base、SDFM_FILTER_3、OSR - 1);

SDFM_enableMasterFilter (SDFM1_base);

SDFM_enableMasterInterrupt (SDFM1_base);

这是中断

_interrupt void SDFM_DATA_READY (void)

second_time=CPUTimer_getTimerCount (CPUTIME1_base);
CPUTimer_stopTimer (CPUTIMEer1_base);
configCPUTimer (CPUTIMER 1_BASE、DEVICE_SYSCLK_FREQ、3000000);//每30000000用户
CPUTimer_startTimer (CPUTIMEer1_base);
first_time=CPUTimer_getTimerCount (CPUTIME1_base);


//ESTOP0;
如果(measure_counter<4)

SUM_UDC +=(float)((((int32_t) SDFM_getFilterData (SDFM1_base、SDFM_filter_3)))* scale_factor_U-offset_UDC;
SUM_IA +=(float)((((int32_t) SDFM_getFilterData (SDFM1_base、SDFM_filter_1)))* scale_factor_i-offset_IA;

其他

UDC = SUM_UDC /(measure_counter - 1);
IA = SUM_IA /(measure_counter - 1);

SDFM_clearInterruptFlag (SDFM1_base、SDFM_MASTER_INTERRUPT_FLAG | SDFM_FILTER_1_NEW _DATA_FLAG | SDFM_FILTER_3_NEW _DATA_FLAG);
//确认此中断以接收来自组5的更多中断
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group5);

据我了解、中断应每~70us 发生一次(OCR=256)。 调试模式下-每6us 一次。 功能 (SDFM_CLEAR 中断标志)不会将所需的位设置为1。 问题可能出在哪呢?

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

    请检查我的理解是否正确。

    您是否说 SDFM 不会触发 SDFM_DATA_READY ISR 例程? 当您发现问题时、SDIFLG 寄存器包含什么内容(32位读取)。 我还担心在您的案例中会触发 MFx (调制器故障)。

    此外、我想强调:

    F280049 SDFM、每个滤波器模块都有自己的数据就绪中断向量。 由于您使用2个滤波器模块、因此每个滤波器模块都需要两个 ISR 例程。

    此致、

    曼诺伊

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

    [引用用户="Manoj Santha Mohan"]

    请检查我的理解是否正确。

    您是否说 SDFM 不会触发 SDFM_DATA_READY ISR 例程? 当您发现问题时、SDIFLG 寄存器包含什么内容(32位读取)。 我还担心在您的案例中会触发 MFx (调制器故障)。

    此外、我想强调:

    F280049 SDFM、每个滤波器模块都有自己的数据就绪中断向量。 由于您使用2个滤波器模块、因此每个滤波器模块都需要两个 ISR 例程。

    此致、

    曼诺伊

    [/报价]

    否   它的名称是每6us ~70us 一次

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

    请您回答我提出的所有问题吗?

    那么、您的问题是、为什么 ISR 每6us 触发一次、而不是每70us 触发一次?

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

    仅确认位

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

    所有 MFx 均为零

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

    弗拉基米尔

    1) 1) SD-CX 的频率是多少?

    2) 2)您是否未使用 FIFO (或)?

    3) 3)您希望每70us 中断一次有何根据?

    4) 4)您如何知道每6us 就会收到一次中断?

    5) 5)您发现问题的滤波器通道是什么?

    此致、

    曼诺伊

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

    一段时间后、我没有听到您的反馈。 此问题是否已解决?

    -Manoj