器件型号: TMS320F2800155-Q1
你(们)好
我想知道 ADC 的正常运行时间是多久
adcStruct[AIP_IP1].ADC_BUFFER = ADC_readResult (ADCARESULT_BASE、ADC_SOC_NUMBER0);
我在由 ePWM 触发器触发的 ISR 中调用此函数。
我得到了 2.98 微秒的排泄时间..但我觉得它的两个高..

附加相同的设置
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.
器件型号: TMS320F2800155-Q1
你(们)好
我想知道 ADC 的正常运行时间是多久
adcStruct[AIP_IP1].ADC_BUFFER = ADC_readResult (ADCARESULT_BASE、ADC_SOC_NUMBER0);
我在由 ePWM 触发器触发的 ISR 中调用此函数。
我得到了 2.98 微秒的排泄时间..但我觉得它的两个高..

附加相同的设置
尊敬的 Muntaha:
示例 ADC_EX10_MULTIUL_SoC_EPWM 具有以下 ISR:
__interrupt void adcA1ISR(void)
{
//
// Store results
//
adcAResult0 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
adcAResult1 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);
adcAResult2 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER2);
adcCResult0 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0);
adcCResult1 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER1);
adcCResult2 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER2);
//
// Clear the interrupt flag
//
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
//
// Check if overflow has occurred
//
if(true == ADC_getInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1))
{
ADC_clearInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
}
//
// Acknowledge the interrupt
//
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}
当中断触发时、ISR 例程会在堆栈中移动、因此 ISR 中使用的所有变量和函数也都将复制到堆栈中。 对于执行时间、复制变量和函数会影响周期时间。 不要读取所有 6 个转换结果、而是只尝试其中一个。 这应该会缩短您正在观察的执行时间。
此致、
Joseph
__ interrupt void adcA1ISR (void)
{
//
//存储结果
//
GPIO_writePin (myGPIO28、1);
adcAResult0 = ADC_readResult (ADCARESULT_BASE、ADC_SOC_NUMBER0);
//
//清除中断标志
//
ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_number1);
//
//检查是否发生溢出
//
if (true == ADC_getInterruptOverflowStatus (ADCA_BASE、ADC_INT_number1))
{
ADC_clearInterruptOverflowStatus (ADCA_BASE、ADC_INT_number1);
ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_number1);
}
GPIO_writePin (myGPIO28、0);
//
//确认中断
//
INTERRUPT_CLEARACKGROUP (INTERRUPT_ACK_GROUP1);
}
尊敬的 Muntaha:
如果您在读取 ADC 结果寄存器后立即移动 GPIO_writePin (myGPIO28、0)、而不是在清除中断后立即移动、您是否仍会看到 GPIO 持续时间约为 2.98uS? 如果检查并清除中断状态是占用大部分 GPIO 时间的转换、则当前存在会生成中断、而该中断不是读取结果周期的一部分。
尝试仅在一个 ADC 上运行一个 SOC 转换、查看是否检查和清除中断会缩短总体周期时间。
此致、
Joseph