Part Number:TMS320F280039C
我用280039C做ADC采样时,采用CPUTIMER 100KHz频率触发,ADCA 2分频且14个通道连续检测9次。发现在ADC中断终读多个检测结果时会影响中断速度,如果至读三个结果速度正常。程序初始化是由syscfg配置,中断执行代码如下,按照120MHz的主频速度,不会中断里连几行代码执行速度都会影响中断吧,麻烦帮我解答一下。
// Interrupt Settings for INT_ADC_1_1
__interrupt void INT_ADC_1_1_ISR(void)
{
if(io ==0)
io =1;
else
io =0;
inv2l_output_enable(io);
//
// Add the latest result to the buffer
//
adc1_result[0] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
adc1_result[1] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);
adc1_result[2] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER2);
adc1_result[3] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER3);
adc1_result[4] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER4);
adc1_result[5] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER5);
adc1_result[6] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER6);
adc1_result[7] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER7);
adc1_result[8] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER8);
adc1_result[9] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER9);
adc1_result[10] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER10);
adc1_result[11] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER11);
adc1_result[12] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER12);
adc1_result[13] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER14);
//adc2_result[0] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER0);
//adc2_result[1] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER2);
//adc2_result[2] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER3);
//adc2_result[3] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER4);
//adc2_result[4] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER5);
//adc2_result[5] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER11);
//adc2_result[6] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER12);
//
// Clear the interrupt flag
//
ADC_clearInterruptStatus(ADC_1_BASE, ADC_INT_NUMBER1);
//
// Check if overflow has occurred
//
if(true == ADC_getInterruptOverflowStatus(ADC_1_BASE, ADC_INT_NUMBER1))
{
ADC_clearInterruptOverflowStatus(ADC_1_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(ADC_1_BASE, ADC_INT_NUMBER1);
}
Interrupt_clearACKGroup(INT_ADC_1_1_INTERRUPT_ACK_GROUP);
}
? ?:
inv2l_output_enable(io);是一个IO电平输出翻转控制,用于判断中断执行速度
,
Barbecue:
ADC Acuisition(Sample and Hold) window (min) = 8 * Sysclk
ADC tLAT = 23 * sysclk
That's 31sysclk per channal.
31 * 14 (ch) * 9 (times) = 3906syclk,
120Mhz /3906 = 30.7kHz
The ADC SOC is triggered by CPUTIMER at 100kHz
,
? ?:
那如何解决这个问题,是降低每次采样次数吗,还是需要降低采样频率
,
Vivian Gao:
您好
感谢您对TI产品的关注!为更加有效地解决您的问题,我们建议您将问题发布在E2E英文技术论坛上(TI E2E support forums),将由资深的英文论坛工程师为您提供帮助