Merhaba,
Tek bir puls kaynağını 4 adet girişime bağlıyorum ve dış kesme ile sayım işlemi yapıyorum. Belli bir sayıya çıktıktan sonra aynı handleri kullanan 2 portum geri kalmaya başlıyor. HSC1 ve HSC2 bir süre sonra geri kalmaya başlıyor. Öncelikleri hepsinin 0 olarak ayarlı. Saniyede 50 puls veriyorum. Neden olabilir acaba ?
void EXTI3_IRQHandler(void)
{
/* USER CODE BEGIN EXTI3_IRQn 0 */
HSC0_TOTAL++;
/* USER CODE END EXTI3_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
/* USER CODE BEGIN EXTI3_IRQn 1 */
if(HSC0_TOTAL>=2147483647)
{
HSC0_TOTAL=0;
}
/* USER CODE END EXTI3_IRQn 1 */
}
[b]void EXTI9_5_IRQHandler(void)
{
/* USER CODE BEGIN EXTI9_5_IRQn 0 */
/* USER CODE END EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
if(HSC1_TOTAL>=2147483647)
{
HSC1_TOTAL=0;
}
if(HSC2_TOTAL>=2147483647)
{
HSC2_TOTAL=0;
}
/* USER CODE END EXTI9_5_IRQn 1 */
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(HSC1_Pin==GPIO_Pin)
{
HSC1_TOTAL++;
}
else if(HSC2_Pin==GPIO_Pin)
{
HSC2_TOTAL++;
}
}[/b]
(https://i.ibb.co/3MM8q2k/Ekran-Al-nt-s.jpg) (https://ibb.co/3MM8q2k)
Alıntı yapılan: sımışka - 21 Haziran 2020, 12:21:35Merhaba,
Tek bir puls kaynağını 4 adet girişime bağlıyorum ve dış kesme ile sayım işlemi yapıyorum. Belli bir sayıya çıktıktan sonra aynı handleri kullanan 2 portum geri kalmaya başlıyor. HSC1 ve HSC2 bir süre sonra geri kalmaya başlıyor. Öncelikleri hepsinin 0 olarak ayarlı. Saniyede 50 puls veriyorum. Neden olabilir acaba ?
void EXTI3_IRQHandler(void)
{
/* USER CODE BEGIN EXTI3_IRQn 0 */
HSC0_TOTAL++;
/* USER CODE END EXTI3_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
/* USER CODE BEGIN EXTI3_IRQn 1 */
if(HSC0_TOTAL>=2147483647)
{
HSC0_TOTAL=0;
}
/* USER CODE END EXTI3_IRQn 1 */
}
[b]void EXTI9_5_IRQHandler(void)
{
/* USER CODE BEGIN EXTI9_5_IRQn 0 */
/* USER CODE END EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
if(HSC1_TOTAL>=2147483647)
{
HSC1_TOTAL=0;
}
if(HSC2_TOTAL>=2147483647)
{
HSC2_TOTAL=0;
}
/* USER CODE END EXTI9_5_IRQn 1 */
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(HSC1_Pin==GPIO_Pin)
{
HSC1_TOTAL++;
}
else if(HSC2_Pin==GPIO_Pin)
{
HSC2_TOTAL++;
}
}[/b]
(https://i.ibb.co/3MM8q2k/Ekran-Al-nt-s.jpg) (https://ibb.co/3MM8q2k)
Saniyede 50 puls herhangi bir işlemci için çok düşük bir değer. Pals süresinin çok kısa olması veya programda/ konfigürasyonda bir filtreleme olması nedeniyle puls kaçırıyor olabilirsiniz.