工具与软件:
您好!
我正在尝试使用 SafeTI 诊断库对 LIN 模块执行模拟环回测试。 当我SL_SelfTest_LIN()为此目的调用此函数时、在验证 LIN 模块是否脱离复位状态的步骤会失败。 返回值retVal设置为FALSE。 这是执行复位状态检查的代码片段:
status = SL_SelfTest_LIN(LIN_ANALOG_LOOPBACK_TEST, SL_LIN1);
/*verify LIN is not in reset state */
/*SAFETYMCUSW 439 S MR:11.3 <APPROVED> Comment_4*/
if(sl_linREG != NULL)
{
/*SAFETYMCUSW 134 S MR: 12.2 <APPROVED> Comment_5*/
if((LIN_GCR0_RESET_BIT|LIN_GCR1_SWRST_BIT) != (sl_linREG->GCR0 & (LIN_GCR0_RESET_BIT|LIN_GCR1_SWRST_BIT)))
{
#if (FUNC_ENTRY_COND_CHECK_LOG_ENABLED !=0)
SL_Log_Error(FUNC_ID_ST_LIN, ERR_TYPE_ENTRY_CON, 1u);
#endif
retVal = FALSE;
return retVal;
}
正如我所理解的、此条件检查是否sl_linREG->GCR0有值0x81。 然而、GCR0寄存器不能具有这个值、这使我想知道这是 SafeTI 诊断库中的错误。
这里是 LIN 模块的初始化函数
void sciInit(UartInit_t* Uart_init_struct)
{
/* USER CODE BEGIN (2) */
/* USER CODE END */
/** @b initialize @b SCILIN */
/** - bring SCI out of reset */
scilinREG->GCR0 = 0U;
scilinREG->GCR0 = 1U;
/** - Disable all interrupts */
scilinREG->CLEARINT = 0xFFFFFFFFU;
scilinREG->CLEARINTLVL = 0xFFFFFFFFU;
/** - global control 1 */
scilinREG->GCR1 = (uint32)((uint32)1U << 25U) /* enable transmit */
| (uint32)((uint32)1U << 24U) /* enable receive */
| (uint32)((uint32)1U << 5U) /* internal clock (device has no clock pin) */
| (uint32)((uint32)(Uart_init_struct->stop_bits-1U) << 4U) /* number of stop bits */
| (uint32)((uint32)Uart_init_struct->parity_even << 3U) /* even parity, otherwise odd */
| (uint32)((uint32)Uart_init_struct->parity_enable << 2U) /* enable parity */
| (uint32)((uint32)1U << 1U); /* asynchronous timing mode */
/** - set baudrate */
sciSetBaudrate(scilinREG,(uint32) Uart_init_struct->baud_rate );
/** - transmission length */
scilinREG->FORMAT = 8U - 1U; /* length */
/** - set SCI pins functional mode */
scilinREG->PIO0 = (uint32)((uint32)1U << 2U) /* tx pin */
| (uint32)((uint32)1U << 1U); /* rx pin */
/** - set SCI pins default output value */
scilinREG->PIO3 = (uint32)((uint32)0U << 2U) /* tx pin */
| (uint32)((uint32)0U << 1U); /* rx pin */
/** - set SCI pins output direction */
scilinREG->PIO1 = (uint32)((uint32)0U << 2U) /* tx pin */
| (uint32)((uint32)0U << 1U); /* rx pin */
/** - set SCI pins open drain enable */
scilinREG->PIO6 = (uint32)((uint32)0U << 2U) /* tx pin */
| (uint32)((uint32)0U << 1U); /* rx pin */
/** - set SCI pins pullup/pulldown enable */
scilinREG->PIO7 = (uint32)((uint32)0U << 2U) /* tx pin */
| (uint32)((uint32)0U << 1U); /* rx pin */
/** - set SCI pins pullup/pulldown select */
scilinREG->PIO8 = (uint32)((uint32)1U << 2U) /* tx pin */
| (uint32)((uint32)1U << 1U); /* rx pin */
/** - set interrupt level */
scilinREG->SETINTLVL = (uint32)((uint32)0U << 26U) /* Framing error */
| (uint32)((uint32)0U << 25U) /* Overrun error */
| (uint32)((uint32)0U << 24U) /* Parity error */
| (uint32)((uint32)0U << 9U) /* Receive */
| (uint32)((uint32)0U << 8U) /* Transmit */
| (uint32)((uint32)0U << 1U) /* Wakeup */
| (uint32)((uint32)0U); /* Break detect */
/** - set interrupt enable */
scilinREG->SETINT = (uint32)((uint32)0U << 26U) /* Framing error */
| (uint32)((uint32)0U << 25U) /* Overrun error */
| (uint32)((uint32)0U << 24U) /* Parity error */
| (uint32)((uint32)1U << 9U) /* Receive */
| (uint32)((uint32)0U << 1U) /* Wakeup */
| (uint32)((uint32)0U); /* Break detect */
/** - initialize global transfer variables */
g_sciTransfer_t[1U].mode = (uint32)1U << 8U;
g_sciTransfer_t[1U].tx_length = 0U;
g_sciTransfer_t[1U].rx_length = 0U;
/** - Finaly start SCILIN */
scilinREG->GCR1 |= 0x80U;
/* USER CODE BEGIN (3) */
/* USER CODE END */
}
GCR0 寄存器设置为1、这意味着该模块已结束复位 GCR1 设置为0x80。

这是库中的软件错误吗、还是我这边存在配置问题?
谢谢、此致、
Ilija







