ARINC429总线收发器芯片DEI1016的原理及应用
IS,RD,WR pin;
// CPU方的I/O操作、读写信号,皆为低有效.
IOAddr=[A2,A1,X];
// CPU方I/O地址
ENTX429A=!TX429ARDY;javascript:window.open(this.src);" style="cursor:pointer;"/>
// ARINC429 发送使能.
// 读 第一路 ARCIN429 接收寄存器 高低字.
!RD429A =!IS & !RD & ((IOAddr == RX429ALW) # (IOAddr == RX429AHW));
// 读 第二路 ARCIN429 接收寄存器 高低字.
!RD429B = !IS & !RD & (IOAddr == RX429BLW) # IOAddr == RX429BHW);
// 写 第一路 ARCIN429 发送寄存器 高低字.
!WR429AL = !IS & !WR & (IOAddr == TX429ALW);
!WR429AH = !IS & !WR & (IOAddr == TX429AHW);
// 写 DEI1016 控制寄存器.
!WR429ACW = !IS & !WR & (IOAddr == CR429A);
!INT = !RX1RDY # !RX2RDY;
// 2路接收准备好共享中断请求.
……
javascript:window.open(this.src);" style="cursor:pointer;"/>
该模块有一路发送和两路接收。发送数据不需要用中断来解决。而当2路接收共享一个中断时,可能会出现覆盖而丢掉某一路数据的情况,也可能使边沿触发的中断失效而不再接收任何数据。其波形示意图如图6所示。图中,在A点,当第一路准备好Rx1RDY为低时 (L),XINT有效以引起中断,CPU响应中断处理,同时在AB之间判定为第一路有效并开始处理。当处理到B点时,第二路接收准备好引起中断。但此时XINT已经有效,故不会引起电平变化,中断响应程序继续进行,并在C点退出,此时并没有处理第二路接收。如果中断请求是电平 Level 敏感,中断处理退出后还可以再次进入,但这会有相当的系统开销。若中断请求是边沿edge触发,那么在C点退出之后,由于未处理第二路接收,所以中断请求 INT一直保持电平有效,但不能产生边沿跳变翻转,中断触发条件永远不能满足,系统处于死锁状态,从而使两路数据全部丢失。
对于这一问题,其实质性的解决办法需要“软硬兼施”。可以将图4 中DEI1016的Rx1RDY、Rx2RDY等状态信号同时送达CPU以组成只读“状态寄存器”,供CPU中断响应时查询。
由以上分析可知,对于ARINC429数据通讯系统,在具体的电路设计及软件算法中均应考虑收发数据的丢失问题。