Hello.
I'm trying to implement MIBSPI Self Test error injection according to Safety Manual Documents
Item is follow by:
1) BITERR
2) DLENERR
3) RXOVRN
But I have been able to successfully injection only BITERR Controls(There are some problem).
My code is following by ;
----------------------------------------------------------------------------------------------------------------------
{
................
mibspiREG1->LVL = (uint32)((uint32)0U << 9U) /* TXINT */
| (uint32)((uint32)0U << 8U) /* RXINT */
| (uint32)((uint32)0U << 6U) /* OVRNINT */
| (uint32)((uint32)0U << 4U) /* BITERR */
| (uint32)((uint32)0U << 3U) /* DESYNC */
| (uint32)((uint32)0U << 2U) /* PARERR */
| (uint32)((uint32)0U << 1U) /* TIMEOUT */
| (uint32)((uint32)0U << 0U); /* DLENERR */
mibspiREG1->FLG |= 0xFFFFU;
/** - enable interrupts */
mibspiREG1->INT0 = (mibspiREG1->INT0 & 0xFFFF0000U)
| (uint32)((uint32)0U << 9U) /* TXINT */
| (uint32)((uint32)0U << 8U) /* RXINT */
| (uint32)((uint32)1U << 6U) /* OVRNINT */
| (uint32)((uint32)1U << 4U) /* BITERR */
| (uint32)((uint32)0U << 3U) /* DESYNC */
| (uint32)((uint32)0U << 2U) /* PARERR */
| (uint32)((uint32)0U << 1U) /* TIMEOUT */
| (uint32)((uint32)1U << 0U); /* DLENERR */
..........
mibspiEnableLoopback(mibspiREG1,Digital_Lbk);
mibspiREG1->IOLPKTSTCR = mibspiREG1->IOLPKTSTCR | (uint32)((uint32)1 << 16U);
.......
mibspiDisableLoopback(mibspiREG1);
}
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
void mibspi1HighLevelInterrupt(void)
{
uint32 mibspiFlags = (mibspiREG1->FLG & 0x0000FFFFU) & (~mibspiREG1->LVL & 0x035FU);
uint32 vec = mibspiREG1->INTVECT0;
/* USER CODE BEGIN (23) */
/* USER CODE END */
if (vec > 0x21U)
{
mibspiREG1->FLG = (mibspiREG1->FLG & 0xFFFF0000U) | mibspiFlags;
mibspiNotification(mibspiREG1, mibspiFlags & 0xFFU);
}
else
{
mibspiGroupNotification(mibspiREG1, ((vec & 0x3FU) >> 1U) - 1U);
}
/* USER CODE BEGIN (24) */
/* USER CODE END */
}
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
void mibspiNotification(mibspiBASE_t *mibspi, uint32 flags)
{
/* enter user code between the USER CODE BEGIN and USER CODE END. */
/* USER CODE BEGIN (25) */
if((flag & (uint32_t)(1 << 0)) == (uint32_t)(1 << 0))
{
mibspiREG1->IOLPKTSTCR = mibspiREG1->IOLPKTSTCR & (uint32)~((uint32)1 << 16U);
(void)SerialPutString("\r\n A data length error has Occured!!!\r\n");
}
if(((flag >> 4) & 0x00000001) == 0x00000001)
{
mibspiREG1->IOLPKTSTCR = mibspiREG1->IOLPKTSTCR & (uint32)~((uint32)1 << 20U);
(void)SerialPutString("\r\n A bit Error has Occured!!!\r\n");
}
if((flag & (uint32_t)(1 << 6)) == (uint32_t)(1 << 6))
{
(void)SerialPutString("\r\n Overrun condition Error has Occured!!!\r\n");
}
/* USER CODE END */
}
----------------------------------------------------------------------------------------------------------------------
Result is :
1. BITERR : Interrupt occurs twice but incoming interrupt.
2. DLENERR : Can't get anything (No Iterrupt)
3. RXOVRN : I don't know how to loopback test.
That's it.
Looking forward to response these.
Thank you.
Gene.
Thank you