Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

XMC7000 MCU: 最後に送信された CANFD Tx バッファのインデックスを正しく取得する方法 - KBA231463

NXTY_hayashi
Level 5
Level 5
10 solutions authored 25 replies posted 50 sign-ins

Hi,

I want to translate the following article into Japanese, please confirm to my work.
URL:https://community.infineon.com/t5/Knowledge-Base-Articles/XMC7000-MCU-Get-the-index-of-the-last-tran...

Best Regards,
Kazunari Hayashi

0 Likes
1 Solution
NXTY_hayashi
Level 5
Level 5
10 solutions authored 25 replies posted 50 sign-ins

XMC7000 MCUファミリでは、Txバッファ内のCAN FDメッセージが送信されると、CANFDx_CHx_TXBTOレジスタの対応するビットが設定されますが、これは新しい送信が要求されたときにのみリセットされます。
したがって、CANFD_CH_TXBTOレジスタは期待する値にならない場合があり、配慮が必要です。

XMC7000 MCUファミリーのCANFD_CH_TXBTOレジスタについては、Technical Reference Manualの説明を参照してください。
XMC7100 TRM Page95
XMC7200 TRM Page98

CANFD_CH_TXBTOレジスタを処理するソフトウェア例を下記に示します。

1. Tx送信要求時にCANFDx_CHx_TXBTIEレジスタの対応ビットを設定し、Txバッファ送信割り込みを有効にする

//1つのTxバッファ割り込みを有効にする
CANFD0_CH1 ->M_TTCAN.TXBTIE = 1ul << vTxBufferIndex;

//TxバッファのTxメッセージを転送する
Cy_CANFD_UpdateAndTransmitMsgBuffer((CANFD_HW,CAN_HW_CHANNEL, &CANFD_txBuffer_0,CAN_BUFFER_INDEX, &canfd_context);)

2. 送信完了割り込みが設定(CANFDx_CHx_IR.TC = 1)されている場合、CANFDx_CHx_TXBTIEとCANFDx_CHx_TXBTOレジスタを確認することにより、最後に送信したTxバッファインデックスを特定することができる

3.CANFDx_CHx_TXBTIEレジスタをクリアする

//TXBTIEレジスタの値取得
vTxBufIntStatus = CANFD0_CH1_M_TTCAN->TXBTIE;

//TXBTIEとTXBTOレジスタのビットをチェックする
for(vIndex=0;vIndex < 32;vIndex++)
{

vTxbufSatus=Cy_CANFD_GetTxBufferStatus(CANFD_HW,CAN_HW_CHANNEL,1);

//TXBTIE.bit == 1かつTXBTO.TOx =1、TXバッファ送信発生/成功かつTXBCF.CFx =0キャンセルなし
if (((1ul << vIndex)& vTxBufIntStatus) && (vTxbufStatus == CY_CANFD_TX_BUFFER_TRANSMIT_OCCURRED) ))
{

//Txバッファ割り込みを無効にする
CANFD0_CH1_M_TTCAN.TXBTIE = 0x00000000;

//vIndexは最後に送信されたTxバッファのインデックス
gTxBufferIndex = vIndex;

}

}

以上

 

 

View solution in original post

0 Likes
5 Replies
IFX_Publisher2
Community Manager
Community Manager
Community Manager
500 replies posted 100 sign-ins First comment on blog

Hi, Kazunari Hayashi- san

Confirm to work on this KBA

Thanks,
BIndu

0 Likes
NXTY_hayashi
Level 5
Level 5
10 solutions authored 25 replies posted 50 sign-ins

XMC7000 MCUファミリでは、Txバッファ内のCAN FDメッセージが送信されると、CANFDx_CHx_TXBTOレジスタの対応するビットが設定されますが、これは新しい送信が要求されたときにのみリセットされます。
したがって、CANFD_CH_TXBTOレジスタは期待する値にならない場合があり、配慮が必要です。

XMC7000 MCUファミリーのCANFD_CH_TXBTOレジスタについては、Technical Reference Manualの説明を参照してください。
XMC7100 TRM Page95
XMC7200 TRM Page98

CANFD_CH_TXBTOレジスタを処理するソフトウェア例を下記に示します。

1. Tx送信要求時にCANFDx_CHx_TXBTIEレジスタの対応ビットを設定し、Txバッファ送信割り込みを有効にする

//1つのTxバッファ割り込みを有効にする
CANFD0_CH1 ->M_TTCAN.TXBTIE = 1ul << vTxBufferIndex;

//TxバッファのTxメッセージを転送する
Cy_CANFD_UpdateAndTransmitMsgBuffer((CANFD_HW,CAN_HW_CHANNEL, &CANFD_txBuffer_0,CAN_BUFFER_INDEX, &canfd_context);)

2. 送信完了割り込みが設定(CANFDx_CHx_IR.TC = 1)されている場合、CANFDx_CHx_TXBTIEとCANFDx_CHx_TXBTOレジスタを確認することにより、最後に送信したTxバッファインデックスを特定することができる

3.CANFDx_CHx_TXBTIEレジスタをクリアする

//TXBTIEレジスタの値取得
vTxBufIntStatus = CANFD0_CH1_M_TTCAN->TXBTIE;

//TXBTIEとTXBTOレジスタのビットをチェックする
for(vIndex=0;vIndex < 32;vIndex++)
{

vTxbufSatus=Cy_CANFD_GetTxBufferStatus(CANFD_HW,CAN_HW_CHANNEL,1);

//TXBTIE.bit == 1かつTXBTO.TOx =1、TXバッファ送信発生/成功かつTXBCF.CFx =0キャンセルなし
if (((1ul << vIndex)& vTxBufIntStatus) && (vTxbufStatus == CY_CANFD_TX_BUFFER_TRANSMIT_OCCURRED) ))
{

//Txバッファ割り込みを無効にする
CANFD0_CH1_M_TTCAN.TXBTIE = 0x00000000;

//vIndexは最後に送信されたTxバッファのインデックス
gTxBufferIndex = vIndex;

}

}

以上

 

 

0 Likes
IFX_Publisher2
Community Manager
Community Manager
Community Manager
500 replies posted 100 sign-ins First comment on blog

Hi Kazunari Hayashi san,

Can you please Translate the Title of the KBA also?

Thanks,
Bindu

0 Likes

Hi, Bindu-san,

the title has been translated to Japanese.

0 Likes
IFX_Publisher2
Community Manager
Community Manager
Community Manager
500 replies posted 100 sign-ins First comment on blog

yes, Confirmed to receive this KBA.

Thank you for your contribution.

Thanks,
Bindu

0 Likes