开发板为x86cpu
4个串口共享同一个硬件中断IRQ
驱动使用installable ISR,在驱动中将isr挂到中断链上。
ce在中断异常发生时从内核isr进入oal isr,即扫描ISR链,寻找中断源,链上只要有isrhandler返回sysintr,中断链扫描立即返回,然后设置sysintr对应的event,IST开始工作。IST工作完毕后调用InteruptDone重新打开IRQ.
这一机制引起的问题便是谁先挂到中断链,谁的优先级就高。
造成的实际问题是,多个串口同时传输时各个串口都会产生中断,那么com1先挂上去,总是能得到优先的响应,com4能得到cpu处理的概率最低。造成丢失数据的问题,严重性从com1到com4依次递增。
就如何解决中断链上isr得到公平的处理机会向坛子里头的高手请教了!
------解决方案--------------------
1. For giisr, 就像LZ所描述的現象, 無解, 或是試著用較高級的CHIP, FIFO比較大, 或可減少 interrupt 的次數.
2. LZ 可試著用 isr16550.dll
Paul, Chao @ Techware
------解决方案--------------------
------解决方案--------------------
低手过来帮顶一下吧,呵呵。
------解决方案--------------------
我在想是不是因为中断太频繁,结果使得前面的中断还没处理完,后面的中断又触发了,引起数据丢失。不知道改一改fifo的trigger是否能解决。
------解决方案--------------------
楼主,你的问题解决的怎样了?我的不是共享中断,用了4个中断。把trigger level改为了14后,情况大有改观。不过在测试过程中(我只同时测试了port a and b,没有同时测试4个,我用的是16554),出现几次port b 不接收数据了,port a还在接收。关了重开又可以了。不知道什么原因。
------解决方案--------------------
学习了
------解决方案--------------------
关注学习……