Visible to Intel only — Ixiasoft
Visible to Intel only — Ixiasoft
10.4.6.1. Single-Bit Error Interrupts
The Single-Bit Error Interrupt Enable (ERRINTEN) register must be configured for single-bit error interrupt generation.
For true dual port memory, a separate interrupt is generated for errors on each memory port.
The ECC controller can generate a single-bit error interrupt for:
- All single-bit errors
- LUT overflow
- Single-bit error counter match
The address of the most recent single-bit error is logged in the Single-Bit Error Address (SERRADDRx) register.
Single-bit errors that occur during a read-modify-write cycle for a sub-word access are flagged in the MODSTAT register in addition to triggering an interrupt.
All Single-Bit Error Interrupt
To generate an interrupt for every single-bit error that occurs, regardless of whether it is with a new or repeated memory address access, you must:
- Clear the INTMODE bit in the Interrupt Mode (INTMODE) register
- Enable the interrupt by setting the SERRINTEN bit of the Error Interrupt Enable (ERRINTEN) register
This mode generates the most frequent interrupts and therefore, consumes greater processor cycle resources to service all the interrupts.
LUT Overflow Interrupt
The LUT table can be used to generate two types of interrupts.
On every single-bit error detection and correction, the address of the error is logged in the LUT. Each address logged is unique and is at the data word boundary of its RAM bank. Coherency of the address table is maintained by a valid bit.
INTMODE value | INTONOVF value | Result |
---|---|---|
0 | X = Don't care | All errors generate an interrupt. No overflow data is logged. |
1 | 0 | An interrupt is generated for each new LUT entry. Overflow detection is disabled. Example: For a four-entry LUT, an interrupt asserts for each unique address entered in the LUT. |
1 | 1 | An interrupt is generated only when the LUT overflows. Example: If the LUT depth is four, the occurrence of the fifth unique address causes an interrupt to assert. |
Counter Match Interrupt
The counter match interrupt allows you to set a threshold for the number of single-bit errors captured before an interrupt flag is set.
The INTONCMP bit in the INTMODE register enables the internal counter to count and compare against the SERRCNT value in the Single-Bit Error Count (SERRCNTREG) register. The internal counter increments on every single-bit error, regardless of whether it is a new or repeated address. The INTONCMP bit has no influence on the INTMODE and INTONOVF bits of the INTMODE register. If the internal counter is less than the Single-Bit Error Count (SERRCNTREG) register value, no interrupt is generated. When the internal counter is greater than or equal to the SERRCNTREG value, a single-bit interrupt request is asserted, the CMPFLGx bit is set in the Mode Status (MODSTAT) register, and the SERRPENx bit is set in the Interrupt Status (INTSTAT) register. When the match occurs, additional errors do not increment the counter until the CMPFLGx bit is cleared in the MODSTAT register.
This resultant match can be handled in three ways:
- Reset the error counter without restarting it. The ECC controller does not count single-bit errors until you restart the counter. Set the CNT_RSTx bit in the CTRL register to 1, which clears the counter. The CMPFLGx bit remains set. The counter does not increment until the CMPFLGx bit is cleared.
- Reset and restart the counter and clear the compare flag. Set CNT_RSTx bit in the CTRL register to 1, which clears the counter. Write a 1 to the CMPFLGx bit, which clears it. The internal counter begins counting from zero.
- Set the count to a higher value and clear the compare flag. Write the SERRCNTREG value to a higher value than the initial compare match value. Write a 1 to the CMPFLGx bit. This clears the CMPFLGx bit, but the internal counter is not reset and the count continues from where it left off until it reaches the new SERRCNTREG value.
If you allow the counter to resume during your interrupt service routine (ISR), it is possible that the error counter can run out again before the ISR exits. If this happens, and you clear the interrupt and exit the ISR, then the new counter match condition is never detected. To avoid this problem, check the CMPFLGx bit in the MODSTAT register prior to exiting the ISR. If CMPFLGx indicates another counter match condition, ensure that you handle it.
To clear the single-bit error interrupt, set the SERRPENx bit in the INTSTAT register.