Controller: STM32F103 Compiler: ARM-MDK 4.14
I have a flow-meter connected to a portpin. I like to count on rising and falling slope. So I initialized this ext. irq to meet these requirements. The software works since a couple of weeks without any problem.
This week I recognized that the optimiziation level is accidentally set to 0. Ok, no problem, I set it to maximum level 3.
After this action the code shrunk significantly - nice!
But my flow-meter gave me values twice as high as usual.
I put some LED-switchings into the isr and could detect that every slope of the flow meter triggers the isr exactly twice.
This is my isr for EXTI Line 14
void IHW_DfmImpulseIsr(void) { COUNT_iCount(COUNT_kDFMBRUEHWASSER); //count on each slope EXTI_ClearITPendingBit(EXTI_Line14); } // IHW_DfmImpulseIsr()
I found an other thread, that the reason might be that the isr-pending-bit is not cleared in time. But where is the casual connetion to optimization level.
And the crucial question, HOW to clear pending-bit correctly? Unfortunately I could not find any commendation neither from KEIL/ARM nor from ST.
> did you use a GOOD scope
1. LeCroy waveSurfer 424 (200 MHz, 2 GS/s, bandwidth limiter = OFF)
2. I stimulate the port with a digital pulse generator (slope < 5us)
I am almost shure that the problem in not based on bad signal shape. The isr is EXACTLY triggered twice on both edges. No accidentally events.
.