SKEAZ128 Failed to send mscan

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

SKEAZ128 Failed to send mscan

2,069件の閲覧回数
shunyizhang
Contributor IV

can init:

shunyizhang_0-1701670514343.png

void CAN_Init(MSCAN_Type *pCANx,MSCAN_ConfigPtr pCANConfig)
{
    uint8_t bTxIntEn = 0;
 
    SIM->SCGC |= SIM_SCGC_MSCAN_MASK;
    
    CAN_Enable(pCANx);
    
    if(pCANConfig->sSetting.bCLKSRC)
    {
pCANx->CANCTL1 |= MSCAN_CANCTL1_CLKSRC_MASK;
    }
    CAN_InitialModeReq(pCANx);
    //enter into Initialization mode
    while(!CAN_IsInitialMode(pCANx));
    
    CAN_WriteIDAR0Reg(pCANx,(uint8_t *)&(pCANConfig->u32IDAR0));
CAN_WriteIDAM0Reg(pCANx,(uint8_t *)&(pCANConfig->u32IDMR0));
CAN_WriteIDAR1Reg(pCANx,(uint8_t *)&(pCANConfig->u32IDAR1));
CAN_WriteIDAM1Reg(pCANx,(uint8_t *)&(pCANConfig->u32IDMR1));
 
CAN_SetBaudRateReg(pCANx,pCANConfig->sBaudRateSetting);
    if(pCANConfig->sSetting.bListenModeEn)
    {
CAN_ListenModeEn(pCANx);
    }
    else
    {
        CAN_ListenModeDisable(pCANx);
    }
 
    if(pCANConfig->sSetting.bLoopModeEn)
    {
CAN_LoopModeEn(pCANx);
    }
    else
    {
CAN_LoopModeDisable(pCANx);
    }
    if(pCANConfig->sSetting.bStopEn)
    {
CAN_StopInWaitModeEn(pCANx);
    }
    else
    {
CAN_StopInWaitModeDisable(pCANx);
    }
    if(pCANConfig->sSetting.bWUPM)
    {
CAN_WakeUpModeFilter(pCANx);
    }
    else
    {
CAN_WakeUpModeNoFilter(pCANx);
    }
    if(pCANConfig->sSetting.bBusOffUser)
    {
        CAN_BusOffUserRecovery(pCANx);
    }
    else
    {
CAN_BusOffAutoRecovery(pCANx);
    }
 
// set Identifier Acceptance Mode
CAN_SetIDAMode(pCANx,pCANConfig->u8IDARMode);
    
    // exit initialization mode
    CAN_NormalModeReq(pCANx);
    //wait to exit initialization mode
    while(CAN_IsInitialMode(pCANx));
 
 
if(pCANConfig->sSetting.bOverRunIEn)
    {
CAN_OverrunIntEn(pCANx);
    }
    else
    {
CAN_OverrunIntDisable(pCANx);
    }
    if(pCANConfig->sSetting.bRxFullIEn)
    {
CAN_ReceiverFullIntEn(pCANx);
NVIC_EnableIRQ(MSCAN_RX_IRQn);
    }
    else
    {
CAN_ReceiverFullIntDisable(pCANx);
NVIC_DisableIRQ(MSCAN_RX_IRQn);
    }
    if(pCANConfig->sSetting.bRxStatusChangeIEn)
    {
CAN_ReceiverStatusChangeIntEn(pCANx);
bTxIntEn = 1;
    }
    else
    {
CAN_ReceiverStatusChangeIntDisable(pCANx);
    }
    if(pCANConfig->sSetting.bStatusChangeIEn)
    {
CAN_StatusChangeIntEn(pCANx);
bTxIntEn = 1;
    }
else
{
CAN_StatusChangeIntDisable(pCANx);
}
    if(pCANConfig->sSetting.bTimerEn)
    {
CAN_TimerEn(pCANx);
    }
    else
    {
CAN_TimerDisable(pCANx);
    }
    if(pCANConfig->sSetting.bTxEmptyIEn)
    {
CAN_TransmitterEmptyIntEn(pCANx);
bTxIntEn = 1;
    } 
    else
    {
CAN_TransmitterEmptyIntDisable(pCANx);
    }
    if(pCANConfig->sSetting.bTxStatusChangeIEn)
    {
CAN_TransmitterStatusChangeIntEn(pCANx);
bTxIntEn = 1;
    }
else
{
CAN_TransmitterStatusChangeIntDisable(pCANx);
}
    if(pCANConfig->sSetting.bWakeUpIEn)
    {
CAN_WakeUpIntEn(pCANx);
bTxIntEn = 1;
    } 
else
{
CAN_WakeUpIntDisable(pCANx);
}
    if(pCANConfig->sSetting.bWakeUpEn)
    {
CAN_WakeUpEn(pCANx);
    } 
else
{
CAN_WakeUpDisable(pCANx);
}
 
if(bTxIntEn)
{
// enable can tx interrupt
//NVIC_EnableIRQ(MSCAN_TX_IRQn);
}
 
if(pCANConfig->sSetting.bCanEn)
{
CAN_Enable(pCANx);
}
 
}
/*****************************************************************************//*!
   *
   * @brief Write a frame data to transmitter buff
   *        
   * @Param[in] pCANx      point to CAN module type.
   * @Param[in] pFrameBuff point to CAN frame buffer.
   *
   * @return send status, fail or success
   *
   * @ Pass/ Fail criteria: none
*****************************************************************************/
uint8_t CAN_LoadOneFrameToBuff(MSCAN_Type *pCANx,MSCAN_RegisterFramePtr pFrameBuff)
{
uint8_t u8TransmitterEmptyFlag;
//get the empty transmitter buffer
u8TransmitterEmptyFlag = CAN_GetTransmitterBufferEmptyFlag(MSCAN);
 
// u8TransmitterEmptyFlag &= 0x01;
if(u8TransmitterEmptyFlag == TRANSMITTER_TX_NO_EMPTY)
{
return FALSE;
}
    // disable interrupt
    DISABLE_INTERRUPTS;
// select transmitter buffer
CAN_TxBuffSelect(pCANx, u8TransmitterEmptyFlag);
//don't copy  time stamps, so here Sub 2 byter
memcpy((void *)&pCANx->TEIDR0,(void *)pFrameBuff,sizeof(MSCAN_RegisterFrameType)-2);
 
CAN_LaunchTransmitBuffer(pCANx, CAN_GetTxBuffSelect(pCANx));
    // enable interrupt
    ENABLE_INTERRUPTS;
return TRUE;
}
 
Hello, I am using the can module of KEAZ128, and the baud rate is 500k. Currently, can can accept data normally, but when sending data separately, I did not receive data when I measured with zlg host computer or oscilloscope. Please help to find out what the reason is.Attached is the can driver I used.
 
0 件の賞賛
返信
3 返答(返信)

2,060件の閲覧回数
Robin_Shen
NXP TechSupport
NXP TechSupport

Hi

Sorry, I don't know where you downloaded the mscan.c and mscan.h.
Have you tested the MSCAN_Driver+FRDM_KEA128 Example.zip in S32 KEAZ-SDK & PEX, MSCAN Missing --Help!?


Best Regards,
Robin
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!

- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------

0 件の賞賛
返信

2,055件の閲覧回数
shunyizhang
Contributor IV

I have used this driver you mentioned before, personally think this driver is too complex, the program architecture is not simple, the separate send/receive interface is not too concise. For beginners, it is not very friendly, in order to facilitate BSP development and program architecture platform, so I want to write a separate mscan, attached is my reference to others, the current acceptance is normal, sending data is abnormal.

0 件の賞賛
返信

2,039件の閲覧回数
Robin_Shen
NXP TechSupport
NXP TechSupport

Please test the MSCAN_NormalTest project in SD-FSL-KEA-CD(V2.0)KDS3.0-20150919.rar. It is also recommended to compare the values of MSCAN peripheral registers to quickly check the differences between the driver you wrote and the driver provided by NXP.

0 件の賞賛
返信