AWRL6432BOOST: mcan功能受到影響

Part Number: AWRL6432BOOST

mcan功能受到影響

我參考了範例程式碼(SDK_05_04_00_01-mcan_external_read_write)並修改了我們需要的部分。我也連接了ECU模擬器,並獲得了正常的回覆數據。

但我將其添加到範例程式碼(SDK_05_04_00_01-gesture_recognition)中。毫米波感測器啟動後mcan無法正常運作。收到的數據沒有變化。如果未啟用毫米波感測器,則 mcan 正常運作。兩者之間有什麼關聯嗎?

main.c 中只建立了一個 mcan 任務
在 mmw_cli.c 檔案中備註 CLI_MMWStart(); mcan功能正常。

以下是新增的程式碼部分:

==================================
void Create_mcan_task(void *args)
{
// RPMF: Create a Task for mcan Framework
gMCANTask = xTaskCreateStatic(MCAN_Task, /* Pointer to the function that implements the task. */
"mcan_task", /* Text name for the task. This is to facilitate debugging only. */
MCAN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */
NULL, /* We are not using the task parameter. */
MCAN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */
gMCANTaskStack, /* pointer to stack base */
&gMCANTaskObj); /* pointer to statically allocated task object memory */
configASSERT(gMCANTask != NULL);
}

void MCAN_Task(void *args)
{
int32_t status = SystemP_SUCCESS;
HwiP_Params hwiPrms;
MCAN_RxBufElement rxMsg;
MCAN_RxNewDataStatus newDataStatus;
MCAN_ErrCntStatus errCounter;
uint32_t bufNum, fifoNum;

DebugP_log("[MCAN] External read - write test, application started ...\r\n");

/* Construct Tx/Rx Semaphore objects */
status = SemaphoreP_constructBinary(&gMcanTxDoneSem, 0);
DebugP_assert(SystemP_SUCCESS == status);
status = SemaphoreP_constructBinary(&gMcanRxDoneSem, 0);
DebugP_assert(SystemP_SUCCESS == status);

/* Register interrupt */
HwiP_Params_init(&hwiPrms);
hwiPrms.intNum = APP_MCAN_INTR_NUM;
hwiPrms.callback = &App_mcanIntrISR;
status = HwiP_construct(&gMcanHwiObject, &hwiPrms);
DebugP_assert(status == SystemP_SUCCESS);

/* Assign MCAN instance address */
gMcanBaseAddr = (uint32_t) AddrTranslateP_getLocalAddr(APP_MCAN_BASE_ADDR);

/* Configure MCAN module, Enable External LoopBack Mode */
App_mcanConfig(APP_MCAN_LOOPBACK_MODE_DISABLE);

/* Enable Interrupts */
App_mcanEnableIntr();

while (true)
{
vTaskDelay(500 / portTICK_PERIOD_MS); // Block for 500ms.
SendMCAN_cmd();

//DebugP_log("[MCAN] Wait for Rx completion ... \r\n");
/* Wait for Rx completion */
SemaphoreP_pend(&gMcanRxDoneSem, SystemP_WAIT_FOREVER);

/* Checking for Rx Errors */
MCAN_getErrCounters(gMcanBaseAddr, &errCounter);
DebugP_assert((0U == errCounter.recErrCnt) &&
(0U == errCounter.canErrLogCnt));

/* Get the new data staus, indicates buffer num which received message */
MCAN_getNewDataStatus(gMcanBaseAddr, &newDataStatus);
MCAN_clearNewDataStatus(gMcanBaseAddr, &newDataStatus);

/* Select buffer and fifo number, Buffer is used in this app */
bufNum = 0U;
fifoNum = MCAN_RX_FIFO_NUM_0;

MCAN_readMsgRam(gMcanBaseAddr, MCAN_MEM_TYPE_FIFO, bufNum, fifoNum, &rxMsg);
MCAN_writeRxFIFOAck(gMcanBaseAddr, fifoNum, 0);

//DebugP_log("[MCAN] Check Rx data ... \r\n");
/* Check Rx data */
App_mcanCheckRxMsg(&rxMsg);
}
/* De-Construct Tx/Rx Semaphore objects */
HwiP_destruct(&gMcanHwiObject);
SemaphoreP_destruct(&gMcanTxDoneSem);
SemaphoreP_destruct(&gMcanRxDoneSem);

return;
}
=================================================

上面的圖片是抓下來的 TX & RX 數據

在mmw_cli.c檔案中,如果不執行CLI_MMWStart(),mcan將正常運作。

檢查上述邏輯分析儀訊號。當RX有資料時,TX不拉低電位,為什麼會出現ACK錯誤?

正常波形:

異常波形:

主要是因為CAN TX沒有ACK!謝謝!