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.
工具/软件:TI-RTOS
尊敬的:
我们正在项目中使用 Piccolo F28069 DSP,该固件平台是 TI SYS/BIOS–版本6.50。 ADC ISR 为35KHz、每20ms 将有一个事件发布或从 ADC ISR 到任务的 Swi 发布。
我发现、有时 Event_post ()或 Swi_post ()需要很长时间、这会影响正常的 ADC ISR 频率- 35KHz。 在这种情况下,它将丢失一个 ADC ISR。 如果从任务中布置事件或 Swi、似乎没有发生这样的问题。
在 坏情况下,例如 Event_post ()花费45us,ADC ISR 运行60us,Swi_post ()花费56us,ADC ISR 运行70us,比正常时间更长。
测试代码如下:
#pragma CODE_SECTION ("ramfuncs");
_interrupt void ADC_ISR (void)
{
GPIO_ISR_HIGH ();
//其他代码。 。 。 。 。 。
if (ac_zero_accacc2000)// 20ms 周期
{
GPIO_POST_HIGH ();
EVENT_POST (task_event_PFC、EVENT_ID_PFC_UTILITYZERO);
GPIO_POST_LOW();
}
//其他代码。 。 。 。 。 。
GPIO_ISR_LOW ();
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //清除 ADCINT1标志为下一个 SOC 重新初始化
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;//清除 INT1的 PIE 确认位
}
请帮您解决此问题吗? 谢谢!
陈德芳
是的、您是对的、我将测量从 GPIO_ISR_HIGH 到 GPIO_ISR_LOW 的时间。 测量的时间如下:
最长时间- 14uS
平均时间- 7uS
最短时间- 6uS
ADCINT1以35KHz 的频率触发、频率应为固定频率。 当我使用中断关键字直接配置 ISR 时、 每个 ISR 之间的间隔时间(GPIO_ISR_HIGH -> GPIO_ISR_HIGH)为28.6us、非常精确。 但是、如果我使用的是 RTOS 的 Hwi、则间隔时间非常不稳定、这介于18us ~ 36us 之间。
如果使用 RTOS 的 Hwi、ISR 似乎无法及时触发。
没关系、Todd。
我尝试了禁用时钟模块的计时器的方法、比以前更好。 虽然两个 ADC ISR 之间仍然存在差距、但这一差距已发生了大约1us ~ 2us 的变化。
我使用 中断关键字而不是 OS Hwi 测试了代码、 有时 两个 ADC ISR 之间也存在1us ~ 2us 的间隔。 我 想这可能 是由操作系统内核引起的、在 某些情况下、操作系统内核会禁用全局中断、例如 任务的上下文切换等
此致
更方便
在我的系统中、ADCINT1位于 PIE 组1中、Hwi 的中断号为32。 我尝试将 Hwi.zeroLatencyIERMask 设置为1、它显示错误消息"Hwi 32 Conflicts with IER Mask 0x1"。 配置零延迟中断是否存在任何问题?
在配置文件中、代码如下所示:
VAR Hwi = xdc.useModule('ti.sysbios.family.c28.Hwi');
var hwi0Params = new hwi.Params();
hwi0Params.instance.name ="hwi0";
program.global.hwi0 = Hwi.create (32、"&ADC_ISR"、hwi0Params);
Hwi.zeroLatencyIERMask = 1;