ZHCAA38E August 2021 – January 2023 TMS320F280021 , TMS320F280021-Q1 , TMS320F280023 , TMS320F280023-Q1 , TMS320F280023C , TMS320F280025 , TMS320F280025-Q1 , TMS320F280025C , TMS320F280025C-Q1 , TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1 , TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041-Q1 , TMS320F280041C , TMS320F280041C-Q1 , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1 , TMS320F28384D , TMS320F28384S , TMS320F28386D , TMS320F28386S , TMS320F28388D , TMS320F28388S , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
有四種觸發(fā)數(shù)據(jù)傳輸?shù)姆椒?,包括軟件觸發(fā)、外部觸發(fā) (EPWMx-SOCA/B)、使用 DMA 和硬件直通特性。對于軟件觸發(fā)方法,將 1 寫入到 TX_FRAME_CTRL.START 寄存器位中或使用 driverLib 函數(shù)“FSI_startTxTransmit()”將開始傳輸。如果使用外部觸發(fā)(例如 EPWMx-SOCA),則一旦發(fā)生外部觸發(fā)信號,就會(huì)發(fā)送數(shù)據(jù)。
由于可以在每次通過 FSITX 或 FSIRX 模塊完成數(shù)據(jù)幀發(fā)送或接收時(shí)生成 DMA 觸發(fā),因此它提供了一種方便的方法來傳輸和存儲數(shù)據(jù),尤其是海量數(shù)據(jù)。此處提供了使用 DMA 進(jìn)行 FSI 通信的配置示例。
必須將 TX_OPER_CTRL_LO.START_MODE 設(shè)置為 0x2,這意味著向幀標(biāo)簽/用戶數(shù)據(jù)字段寫入數(shù)據(jù)可以觸發(fā)傳輸,然后在 FSITX 上啟用 DMA 事件:
FSI_setTxStartMode(FSITXA_BASE, FSI_TX_START_FRAME_CTRL_OR_UDATA_TAG);
FSI_enableTxDMAEvent(FSITXA_BASE);
需要使用兩個(gè)連續(xù)的 DMA 通道來分別填充發(fā)送緩沖區(qū)和幀標(biāo)簽/用戶數(shù)據(jù)字段。 依次使用兩個(gè)通道,可以在設(shè)置幀標(biāo)記和用戶數(shù)據(jù)后,立即開始按照 TX_OPER_CTRL_LO.START_MODE 寄存器位中的配置進(jìn)行傳輸。在示例代碼中,使用了 DMA CH1 和 DMA CH2。此外,還務(wù)必注意,由于 FSI 發(fā)送緩沖區(qū)是一個(gè) 16 字的循環(huán)緩沖區(qū),因此必須對超過 16 個(gè)字的數(shù)據(jù)啟用飽和控制,否則超過 16 個(gè)字的數(shù)據(jù)會(huì)出現(xiàn)長度溢出。
DMA_configWrap(DMA_CH1_BASE, DMA_TRANSFER_SIZE_IN_BURSTS, 0, dest_WrapSize, 0);
此處,dest_WrapSize 表示在目標(biāo)地址繞回之前要傳輸?shù)拿}沖數(shù),因此 dest_WrapSize 應(yīng)該為 16/nWords。這可以實(shí)現(xiàn)為使 DMA 連續(xù)向發(fā)送緩沖區(qū)饋送數(shù)據(jù)(由 FSITX 觸發(fā),DMA 連續(xù)模式啟用)。
FSIRX 的配置與 FSITX 非常相似,不同之處在于,對于 RX 緩沖區(qū)和標(biāo)簽以及用戶數(shù)據(jù),DMA 通道沒有順序要求。在示例項(xiàng)目中,使用了 DMA CH3 和 DMA CH4。
利用硬件直通特性,可以在每個(gè)節(jié)點(diǎn)器件接收傳入數(shù)據(jù)包的同時(shí)傳輸該數(shù)據(jù)包。這樣一來,與其他觸發(fā)模式不同,每個(gè)器件不必等到接收到數(shù)據(jù)包之后,就可以將其傳輸?shù)骄栈ㄦ溨械南乱粋€(gè)器件。有關(guān)此特性的更多詳細(xì)信息,請參閱 F280039C 器件 TRM。要啟用此特性,需要設(shè)置 TX_OPER_CTRL_LO.TDM_ENABLE 和 TX_OPER_CTRL_LO.SEL_TDM_IN 寄存器字段。或者,可以使用下面的 driverLib 函數(shù)。
FSI_enableTxTDMMode(FSITXA_BASE);
FSI_enableRxTDMMode(FSITXA_BASE);