TMS320C645x DSP SRIO寄存器(五)——LSU和其他特殊事件中断

本文是对TI的TMS320C645x DSP SRIO User’s Guide中5.21-5.24、5.28-5.31节内容的搬运
与第4章大部分内容相关

一、LSU中断

LSU中断状态寄存器(LSU_ICSR)

LSU中断状态寄存器
LSU的中断共8种,一个寄存器中每8位对应一个LSU。8中中断情况如下:

  1. 逻辑层的发送缓冲区中该优先级的事务包数量未超过设定的阈值,因此没有发送(在寄存器PER_SET_CNTL中设置阈值);
  2. 接收到了重发的门铃事务的响应包或者发起的原子操作不允许;
  3. DMA数据传输出错;
  4. 不支持的事务包类型,或者出现一些无效的编码;
  5. 收到传输错误的响应包;
  6. 被“流控制”(flow control)阻塞;
  7. 事务包发送超时;
  8. 事务包传输完成,可以在LSU_REG4中对中断是否产生进行设置。一般如果为了高效传输,不用开启传输完成中断。

LSU中断清除寄存器(LSU_ICCR)、LSU中断路由寄存器(LSU_ICRR0-LSU_ICRR3)

与上一篇文章中提到的门铃中断、CPPI中断相同。即一个ICS对应有一个ICC和ICR。最终将一个中断源指向8个中断目的之一。

二、其他中断

错误、复位和特殊事件中断状态/清除寄存器(ERR_RST_EVNT_ICSR、ERR_RST_EVNT_ICCR)

其他中断
中断源包括设备复位、端口错误、接收到端口写入请求、接收到广播事务的控制符号。
其中的中断状态、中断清除和中断路由都和上述的几种中断情况相同。
比较特殊的是:有一些中断的清除需要一些额外的步骤。主要和SP_IP_MODE和SPx_ERR_STAT寄存器有关。下面是表格中的部分内容,具体细节可以参考手册97页表38中提到的步骤。
中断清除

三、中断状态解码寄存器(INTDSTn_DECODE)

中断源数量统计:

中断源 数量
门铃 64
CPPI 32
LSU 32
其他 8
合计 136

8个中断目的,当有中断产生时,很难立刻判断出具体是产生了什么中断。因此需要有专门的寄存器进行中断解码。每个中断目的都有一个对应的中断解码寄存器。内容如下:
中断解码寄存器
例如:当中断解码寄存器中的第29位为“1”时,就表明是CPPI的接收或者发射队列中的第2个队列产生了中断,再进一步判断RX_CPPI_ICSR和TX_CPPI_ICSR就可以得知是哪个中断源产生的中断。多个中断源都是采用逻辑连到同一个中断解码寄存器的标志位中。
当然,在设计的时候可以人为地把中断目的和中断源联系起来。比如只把某一种中断源连到一个中断目的上,那样就只要读一次中断解码寄存器就能知道是哪个中断源。
对应关系
这里需要注意的是,CPPI的低位对应ISDR中的高位,而Doorbell是高位和ISDR中的高位对应。

四、中断速率控制寄存器(INTDSTn_RATE_CNTL)

8个中断速率控制寄存器分别对应8个中断目的。8个中断目的,可以分别进行中断速率控制。
中断速率控制寄存器
往该寄存器存入一个32位的无符号数后,会立即开始倒计数,当计数值为0后才可以接收新的中断。从而达到控制中断产生速率的目的。计数的参考时钟为DMA时钟。
这里有两点需要注意

  1. 一旦接收到中断,如果没有重新给该寄存器赋值,就不会在这个中断目的接收到其他中断;
  2. 即使不作中断速率的控制,每次处理完中断后也都需要给该寄存器写“00000000h”
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章