diff options
author | Harald Welte <laforge@gnumonks.org> | 2012-03-06 10:48:33 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2012-03-06 10:48:33 +0100 |
commit | 3745d083f67396cd6e25bb7eb11302f0a4082f39 (patch) | |
tree | 01b0ab109ca67b4430c6c4b72c779bdd257cda2a | |
parent | 31d11c2bf80e95bf9b6026cc299aa550f56054a0 (diff) |
SSC: Inclode Overrun in statistics
-rw-r--r-- | firmware/src/osdr_ssc.c | 18 |
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(); |