Hello,
I have a project where I am using:
To check accuracy in time of each step, I am saving beginning of each step by ARM_DWT_CYCCNT.
If I run only one of mentioned above methods, then everything is perfect, I mean [1] SPI DMA receive its data in time usually without any data lost over several seconds, [2] DMA ADC channels receive data synchronously, [3] serial read and and [4] internal interrupts do their job at very accurate and precise time.
If I am running everything together, only [3] serial read still works as it should be, all other parts are loosing some data. Not always, for example, only 90% of data from [1] are captured,
channels in [2] becomes desynchronized, I mean one channels usually be about 730CPU ticks faster per 8192 data reads compared to the second channel.
I suppose that somehow the interrupt handler works not as I am expecting, but I cannot understand how to monitor it and how to check priorities of interrupts of my DMA and non DMA transfers.
Please, suggest me is there any function that can dump an information regarding to all interrupts and their priorities to check, so I can hopefully fix my problem?
Thank you!
I have a project where I am using:
- SPI DMA read by external interrupt, (each interrupt occurs ca. each 8us, and I am starting to read 19 bytes, this transfer is finishing over EventResponder),
- DMA read from both ADC channels at maximum speed with 12 bits (each buffer is 8Kwords, each channel works at ca. 1.34MS/s),
- serial read at 57600, by using "void serialEvent8()" call back function,
- internal interrupt ca. each ms, by IntervalTimer call back function.
To check accuracy in time of each step, I am saving beginning of each step by ARM_DWT_CYCCNT.
If I run only one of mentioned above methods, then everything is perfect, I mean [1] SPI DMA receive its data in time usually without any data lost over several seconds, [2] DMA ADC channels receive data synchronously, [3] serial read and and [4] internal interrupts do their job at very accurate and precise time.
If I am running everything together, only [3] serial read still works as it should be, all other parts are loosing some data. Not always, for example, only 90% of data from [1] are captured,
channels in [2] becomes desynchronized, I mean one channels usually be about 730CPU ticks faster per 8192 data reads compared to the second channel.
I suppose that somehow the interrupt handler works not as I am expecting, but I cannot understand how to monitor it and how to check priorities of interrupts of my DMA and non DMA transfers.
Please, suggest me is there any function that can dump an information regarding to all interrupts and their priorities to check, so I can hopefully fix my problem?
Thank you!