summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2012-03-06 10:48:33 +0100
committerHarald Welte <laforge@gnumonks.org>2012-03-06 10:48:33 +0100
commit3745d083f67396cd6e25bb7eb11302f0a4082f39 (patch)
tree01b0ab109ca67b4430c6c4b72c779bdd257cda2a
parent31d11c2bf80e95bf9b6026cc299aa550f56054a0 (diff)
SSC: Inclode Overrun in statistics
-rw-r--r--firmware/src/osdr_ssc.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/firmware/src/osdr_ssc.c b/firmware/src/osdr_ssc.c
index aa938a7..197eb41 100644
--- a/firmware/src/osdr_ssc.c
+++ b/firmware/src/osdr_ssc.c
@@ -91,6 +91,7 @@ struct ssc_state {
int active;
uint32_t total_xfers;
uint32_t total_irqs;
+ uint32_t total_ovrun;
};
struct ssc_state ssc_state;
@@ -236,7 +237,15 @@ void HDMA_IrqHandler(void)
void ssc_stats(void)
{
- printf("SSC num_irq=%u, num_xfers=%u\n\r", ssc_state.total_irqs, ssc_state.total_xfers);
+ printf("SSC num_irq=%u, num_xfers=%u, num_ovrun=%u\n\r",
+ ssc_state.total_irqs, ssc_state.total_xfers,
+ ssc_state.total_ovrun);
+}
+
+void SSC0_IrqHandler(void)
+{
+ if (AT91C_BASE_SSC0->SSC_SR & AT91C_SSC_OVRUN)
+ ssc_state.total_ovrun++;
}
int ssc_active(void)
@@ -293,6 +302,13 @@ int ssc_init(void)
AT91C_SSC_CKI,
AT91C_SSC_MSBF | (32-1) );
+ SSC_DisableInterrupts(AT91C_BASE_SSC0, 0xffffffff);
+ SSC_EnableInterrupts(AT91C_BASE_SSC0, AT91C_SSC_OVRUN);
+
+ /* Enable Overrun interrupts */
+ IRQ_ConfigureIT(AT91C_ID_SSC0, 0, SSC0_IrqHandler);
+ IRQ_EnableIT(AT91C_ID_SSC0);
+
/* Enable DMA controller and register interrupt handler */
PMC_EnablePeripheral(AT91C_ID_HDMA);
DMA_Enable();