OMAPL138中断嵌套解决办法

OMAPL138中断嵌套解决办法

问题由来

在一个数据采集项目中,采用OMAPL138作为主控芯片。在DSP侧开启一个125us的定时器,采集80个通道的AD数据后,然后启动DMA数据传输,在传输完成中断中,进行计算处理。

采集数据大约需要100us,数据传输大约需要140us,计算需要14ms。明显的计算过程比较耗时,但是计算周期是20ms,只需要在20ms内完成计算即可,所以也是可以的。定时器采用4号中断,DMA采用8号中断.。

但是问题是由于OMAPL138的中断优先级,仅仅在当两个中断同时到来时才有效。也就是说如果同时发生4号和8号中断,则会优先响应4号中断,但是如果8号中断正在执行,此时若发生4号中断cpu是不会响应的。由此带来的问题是:在计算过程中是停止采样的,显然这是不允许的。而如果将计算过程放到主循环中,由于主循环时间不能保证,所以不能保证计算的实时性。因此,需要解决在低优先级中断执行过程中,被高优先级中断打断的问题。

解决方法

通过查阅TI的官方文档sprufe8b.pdf

可知,通过软件可以实现中断嵌套问题。

#include <c6x.h>

interrupt void xxISR(){

	unsigned int restore_irp;
	unsigned int restore_pgie;
	unsigned int restore_itsr;

	/*this is used for nest interrupt*/
	//save context
	restore_irp=IRP;
	restore_pgie=CSR & 2;
	restore_itsr=ITSR;
	CSR|=1;//enable GIE
	IER|=1<<4;

	//your isr code
	....

	/*this is used for nest interrupt*/
	//restore context
	CSR &=0xfffe;//clear gie
	CSR |=restore_pgie;
	ITSR=restore_itsr;
	IRP=restore_irp;

}

以上代码在实际中可以使用,达到了预定目标。实际使用中会损失几us的切换时间。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值