ppisa commented on PR #16491:
URL: https://github.com/apache/nuttx/pull/16491#issuecomment-2953952781

   @Vajnar thanks for the update.
   
   I would like to know from somebody from Espressif (@tmedicci) what is the 
exact clearing condition of the events bits in `PCNT_Ux_STATUS_REG`. If it is 
read by  `about pcnt_ll_get_event_status()` function then the situation is more 
complicated. I interpret the reference manual that it is not cleared by read, 
but that it is overwritten, bit sets and cleared during each event occurrence.  
Then the actual code should be correct. On the other hand, if the compare and 
limit events are close then the HW can be unusable to tract all these events, 
because the the second event clears the result of the first one. If the clear 
is done at the time of clear of IRQ bit then it is better but there still a 
window when the events can be lost but for limits far enough from zero it would 
work for extending the range. If the status is clear by read as side effect 
then actual code needs update.
   
   To make actual code working on SMP system then the `flags = 
spin_lock_irqsave(&unit->lock);` and the `spin_unlock_irqrestore(&unit->lock, 
flags);` in the `esp_pcnt_isr_default()` has to be moved out of the loop to 
cover all lines in the event processing after
   ```
         pcnt_ll_clear_intr_status(ctx.dev, PCNT_LL_UNIT_WATCH_EVENT(unit_id));
         event_status = pcnt_ll_get_event_status(ctx.dev, unit_id);
   ```
   Then the code should be without contention time window with the possible 
incorrect result.
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to