使用sdk8.0,编写驱动程序,配置通过gpio114输入产生中断,配置成上升沿触发,
进入中断服务程序后,控制gpio18脚输出,使用示波器测量gpio114和gpio18,测量
两个信号间的时间(中断响应时间),测试出来的结果为100us。
这个时间是不是太长了,不知道是否还能缩短?
(以前使用DM3730做过同样的测试,测试结果为5us)
谢谢!
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.
使用sdk8.0,编写驱动程序,配置通过gpio114输入产生中断,配置成上升沿触发,
进入中断服务程序后,控制gpio18脚输出,使用示波器测量gpio114和gpio18,测量
两个信号间的时间(中断响应时间),测试出来的结果为100us。
这个时间是不是太长了,不知道是否还能缩短?
(以前使用DM3730做过同样的测试,测试结果为5us)
谢谢!
Jian Zhou:您好!
在进行测试时,中断里面只是控制gpio进行输出,没有其它代码。
谢谢!
Eggsy Pang:您好!
经过多次测量,结果完全一样,都是100us。
请问下,你们是否有做过这样的测试,结果如何?
谢谢!
jiew:您好!
请教一下,你也是使用gpio中断吗,初始化时,除了申请gpio,注册中断之外,是否有其它操作?
另外,你用的是3358吧,sdk版本也是8.0吗?
谢谢!
是不是你的GPIO中断处理里面加了一些其他的操作,导致延时变大。
Jian Zhou:您好!
中断处理里面没有多余的操作,下面是中断服务程序:
static irqreturn_t gpio114_int_Handle(int irq, void *dev_id)
{
gpio_set_value(18, 1);
return IRQ_RETVAL(IRQ_HANDLED);
}
谢谢!
Jian Zhou:您好!
你所说的消耗时间的GPIO操作是:”gpio_set_value(18, 1);“吗?还是指的其它操作?
我也尝试过使用ioremap之后,用writel直接写寄存器的方式来控制GPIO输出,测量
的结果是一样的。
谢谢!
linux就是非实时系统,100us已经不错了。
335x最新的tisdk v3.x.x有linux-rt版本,可以做到硬实时。我今天刚下下来,还没研究呢
Dachuan Liu:
单纯看,100us也算可以吧。问题是本来能达到4-5us的,这相差了20倍,都不知道
问题出在哪里了。很想找到问题根源在哪里?
谢谢!
这是linux内核设计的问题啊,中断不是实时响应的,不像裸机中断直接由cpu硬件跳转的。系统接管了所有的中断向量,系统调用可以长时间地关中断,无法保证每次都很快的。