TMS320C645x DSP SRIO寄存器(一)——基本配置
本文是对TI的TMS320C645x DSP SRIO User’s Guide中5.1~5.9节内容的搬运
外设识别(PID,Peripheral Identification Register)
- 该寄存器只读,写无效 。包含外设的类型(type)、类(class)和修订(revision)信息,实际应用中可以直接不管。
外设控制(PCR,Peripheral Control Register)
- 最需要关心的只有一位,第2位,流控制使能,置一正常工作。只能在最后置一!!!,也就是说当我要使设备开始工作时,我得先配置完其它寄存器,最后再将该位置一。
- 第0位和第1位控制硬件仿真时的寄存器行为。第0位置一时,寄存器不受硬件仿真影响,也就是复位后的状态;
- 第0位和第1位都为0时,所有状态寄存器都被冻结在默认状态??我猜是仿真时候的暂停也会让寄存器停止工作,导致接收或者发送数据错误。
- 所以应该就让它们默认就好了,不需要去操作低两位。
外设设置控制(PER_SET_CNTL,Peripheral Settings Control Register)
- D30-27:均为保留值0,只读。
-
第26位:SW_MEM_SLEEP_OVERRIDE(Software memory sleep override)
当使用GLB_EN或者BLK_EN来使能或者shutdown所有模块(block)或者部分模块时,配置存储器进入睡眠模式(0),或者不进入睡眠模式(1),默认为“1”。 -
第25位:LOOPBACK
正常模式(0),回环测试模式(1) -
第24位:BOOT_COMPLETE
能够向只读寄存器写(0),不能向只读寄存器写(1)
当该位置为“1”时,启动端口链路初始化,完成初始化后,该位就不再有影响,可以将它置为“0”,然后对只读寄存器进行写操作(但这一般不需要)。只有再次用GLB_EN复位后,该位才能再起作用。 - D20-12:TX_PRIn_WM(n = 0~2,Transmit Priority Water Mark),n对应用两位二进制数表示的优先级。其中每三位组成对于某一优先级的包的发送数量阈值。当发送缓冲区中有一定数量的该优先级的包时,再进行发送。一般都设为0,可以实现最快地让所有优先级的包通过。
- D11-9:CBA_TRANS_PRI 不知道CBA是什么ORZ,但应该问题不大。该字段主要用于设置内部总线SRIO的优先级(DSP system transaction priority.)000为最高优先级,111为最低优先级
-
第8位:1X_MODE 该位决定UDI(User Defined Interface)缓冲的设置(是基于优先级还是基于端口) 基于优先级(0)基于端口(1)
当有多个端口时,比如1x/4p模式,需要将该位置一
(手册中2.3.13.2中的表格和示例代码好像有矛盾,之后去试试……) -
D7-4:PRESCALER_SELECT 预分频器选择
16种频率范围,需要与DMA的频率对应
用于设置内部时钟频率??不是很清楚是什么时钟??可能是内部DMA的时钟??
如果后面知道了,再来补充ORZ…… -
D3-0:以前用于使能SERDES的PLL,现在这四位不用了,都置“0”。SERDES的PLL配置采用另外的方法。C6455的CSL示例工程中仍然是利用这四位来使能SERDES的PLL,但在手册中这四位是不使用的
全局使能(GBL_EN,Peripheral Global Enable Register)
- 第0位 :EN (Global Enable)外设不工作(0)外设使能(1)
- 其它位保留且只读,均为“0”
全局使能状态(GBL_EN_STAT,Peripheral Global Enable Status)
- D9-6:对应端口3-0(SRIO port 3-0),对应block8-5
- D5:MESSAGE接收,对应block4
- D4:MESSAGE发送,对应block3
- D3:MAU(Memory Access Unit),对应block2
- D2:LSU(Load and Store Unit),包含四个LSU,对应block1
- D1:MMR(Memory-Mapped Registers),对应block0
- D0:全局状态
- 其它位保留且只读,均为“0”
模块n使能(BLKn_EN,Block n Enable Register)
- 第0位 :EN (Block n Enable)对应模块不工作(0),对应模块使能(1)
- 其它位保留且只读,均为“0”
模块序号与具体模块的对应关系
模块序号 | 对应模块 |
---|---|
block8-5 | SRIO port3-0 |
block4 | MESSAGE接收 |
block3 | MESSAGE发送 |
block2 | MAU(Memory Access Unit) |
block1 | LSU(Load and Store Unit) |
block0 | MMR(Memory-Mapped Registers) |
模块n使能状态(BLKn_EN_STAT,Block n Enable Status Register)
- 第0位:指示对应模块工作情况,对应模块不工作(0),对应模块使能(1)
- 其它位保留且只读,均为“0”
设备ID1(DEVICEID_REG1,DEVICEID1 Register)
-
D23-16:8位源设备ID,需要与SRIO的基本设备ID CSR(Base Device ID CSR)保持一致;
C645x系列DSP不会自动将BASE_ID中的值赋值给DEVICEID_REG1,需要手动赋值。(这TM也太坑了) -
D15-0:16位源设备ID,同上
设备ID2(DEVICEID_REG2,RapidIO DEVICEID2 Register)
- D23-16:8位源设备ID,可以直接与DEVICEID1一致。该寄存器中的设备ID用于与接收到的事务包中的目的设备ID进行比对,当接收广播事务时,可以将该寄存器中的值改为广播地址;
-
D15-0:16位源设备ID,同上