主题中讨论的其他器件: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。 问题可能出在哪呢?