本文是對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,同上