TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280039C: ADC中断内执行少量代码也会影响中断速度

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),将由资深的英文论坛工程师为您提供帮助

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280039C: ADC中断内执行少量代码也会影响中断速度
分享到: 更多 (0)