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.
你好。 我将 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 触发一次?
弗拉基米尔
1) 1) SD-CX 的频率是多少?
2) 2)您是否未使用 FIFO (或)?
3) 3)您希望每70us 中断一次有何根据?
4) 4)您如何知道每6us 就会收到一次中断?
5) 5)您发现问题的滤波器通道是什么?
此致、
曼诺伊
一段时间后、我没有听到您的反馈。 此问题是否已解决?
-Manoj