From 43bbdb44dcb076929d5ebb1f33ca2e7d8301ac2f Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Wed, 26 Sep 2018 10:47:42 +0900 Subject: [PATCH] Fix examples. --- ChangeLog | 14 ++++++++++++++ NEWS | 12 ++++++++++++ contrib/adc-mkl27z.c | 5 +++-- contrib/adc-stm32f103.c | 4 ++-- contrib/usart-stm32f103.c | 10 ++++++++-- example-cdc-gnu-linux/usb-cdc.c | 1 + example-cdc/usb-cdc.c | 1 + example-fraucheky/main.c | 1 + example-fs-bb48/touch.c | 1 + example-fs-bb48/usb-cdc.c | 1 + example-primer2/primer2-ts.c | 4 ++++ example-usb-serial/usb-cdc.c | 1 + 12 files changed, 49 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index d4bf7f7..c6763fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2018-09-26 NIIBE Yutaka + + Fix for chopstx_intr_done. No spurious interrupts. + * contrib/adc-mkl27z.c (adc_wait_completion): Fix. + * contrib/adc-stm32f103.c (adc_wait_completion): Likewise. + * contrib/usart-stm32f103.c (usart_main): Likewise. + * example-cdc-gnu-linux/usb-cdc.c (tty_main): Likewise. + * example-cdc/usb-cdc.c (tty_main): Likewise. + * example-fraucheky/main.c (usb_main): Likewise. + * example-fs-bb48/touch.c (touch_get): Likewise. + * example-fs-bb48/usb-cdc.c (tty_main): Likewise. + * example-primer2/primer2-ts.c (adc3_conversion): Likewise. + * example-usb-serial/usb-cdc.c (cdc_main): Likewise. + 2018-09-26 NIIBE Yutaka * chopstx.h (chopstx_intr_done): New function. diff --git a/NEWS b/NEWS index ca1aadf..7206a05 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,18 @@ NEWS - Noteworthy changes +* Major changes in Chopstx 1.10 + + Released 2018-09-XX + +** Function chopstx_intr_wait is not deprecated, now. +Once, it was said that it's deprecated, but it's active again. + +** API change: chopstx_poll, chopstx_intr_wait, chopstx_intr_done +To avoid spurious interrupt, we introduce new function +chopstx_intr_done, which should be called after interrupt handling. + + * Major changes in Chopstx 1.9 Released 2018-05-09 diff --git a/contrib/adc-mkl27z.c b/contrib/adc-mkl27z.c index 35f3e0b..37b81d0 100644 --- a/contrib/adc-mkl27z.c +++ b/contrib/adc-mkl27z.c @@ -295,19 +295,20 @@ adc_stop (void) int adc_wait_completion (void) { - struct chx_poll_head *pd_array[1] = { (struct chx_poll_head *)&adc_intr }; int i; while (1) { /* Wait DMA completion */ - chopstx_poll (NULL, 1, pd_array); + chopstx_intr_wait (&adc_intr); DMA0->DSR_BCR = (1 << 24); DMA1->DSR_BCR = (1 << 24); adc_stop_conversion (); + chopstx_intr_done (&adc_intr); + for (i = 0; i < adc.count; i++) *adc.p++ = (uint8_t)adc.buf[i]; diff --git a/contrib/adc-stm32f103.c b/contrib/adc-stm32f103.c index fe838d9..750061e 100644 --- a/contrib/adc-stm32f103.c +++ b/contrib/adc-stm32f103.c @@ -316,11 +316,10 @@ int adc_wait_completion (void) { uint32_t flags; - struct chx_poll_head *pd_array[1] = { (struct chx_poll_head *)&adc_intr }; while (1) { - chopstx_poll (NULL, 1, pd_array); + chopstx_intr_wait (&adc_intr); flags = DMA1->ISR & STM32_DMA_ISR_MASK; /* Channel 1 interrupt cause. */ /* * Clear interrupt cause of channel 1. @@ -329,6 +328,7 @@ adc_wait_completion (void) * and TEIF. */ DMA1->IFCR = (flags & ~1); + chopstx_intr_done (&adc_intr); if ((flags & STM32_DMA_ISR_TEIF) != 0) /* DMA errors */ { diff --git a/contrib/usart-stm32f103.c b/contrib/usart-stm32f103.c index 2551260..64c6cc1 100644 --- a/contrib/usart-stm32f103.c +++ b/contrib/usart-stm32f103.c @@ -541,10 +541,16 @@ usart_main (void *arg) chopstx_poll (NULL, n, usart_poll); if (usart2_intr.ready) - usart2_tx_ready = handle_intr (USART2, &usart2_rb_h2a, &usart2_stat); + { + usart2_tx_ready = handle_intr (USART2, &usart2_rb_h2a, &usart2_stat); + chopstx_intr_done (&usart2_intr); + } if (usart3_intr.ready) - usart3_tx_ready = handle_intr (USART3, &usart3_rb_h2a, &usart3_stat); + { + usart3_tx_ready = handle_intr (USART3, &usart3_rb_h2a, &usart3_stat); + chopstx_intr_done (&usart3_intr); + } if (usart2_tx_ready && usart2_app_write_event.ready) usart2_tx_ready = handle_tx_ready (USART2, diff --git a/example-cdc-gnu-linux/usb-cdc.c b/example-cdc-gnu-linux/usb-cdc.c index 97e6e3c..90b27c5 100644 --- a/example-cdc-gnu-linux/usb-cdc.c +++ b/example-cdc-gnu-linux/usb-cdc.c @@ -708,6 +708,7 @@ tty_main (void *arg) * */ e = usb_lld_event_handler (&dev); + chopstx_intr_done (&usb_intr); ep_num = USB_EVENT_ENDP (e); if (ep_num != 0) diff --git a/example-cdc/usb-cdc.c b/example-cdc/usb-cdc.c index e590728..52e3863 100644 --- a/example-cdc/usb-cdc.c +++ b/example-cdc/usb-cdc.c @@ -719,6 +719,7 @@ tty_main (void *arg) * */ e = usb_lld_event_handler (&dev); + chopstx_intr_done (&usb_intr); ep_num = USB_EVENT_ENDP (e); if (ep_num != 0) diff --git a/example-fraucheky/main.c b/example-fraucheky/main.c index ac84727..34b4a01 100644 --- a/example-fraucheky/main.c +++ b/example-fraucheky/main.c @@ -185,6 +185,7 @@ usb_main (void *arg) event_handle: e = usb_lld_event_handler (&dev); + chopstx_intr_done (&interrupt); ep_num = USB_EVENT_ENDP (e); if (ep_num != 0) diff --git a/example-fs-bb48/touch.c b/example-fs-bb48/touch.c index d22f5e7..0a8a441 100644 --- a/example-fs-bb48/touch.c +++ b/example-fs-bb48/touch.c @@ -74,6 +74,7 @@ touch_get (void) TPM1->SC = 0; TPM1->CNT = 0xffff; /* Writing causes reset of the counter. */ + chopstx_intr_done (&tpm1_intr); return v; } diff --git a/example-fs-bb48/usb-cdc.c b/example-fs-bb48/usb-cdc.c index 15b7cf6..f96244d 100644 --- a/example-fs-bb48/usb-cdc.c +++ b/example-fs-bb48/usb-cdc.c @@ -708,6 +708,7 @@ tty_main (void *arg) * */ e = usb_lld_event_handler (&dev); + chopstx_intr_done (&usb_intr); ep_num = USB_EVENT_ENDP (e); if (ep_num != 0) diff --git a/example-primer2/primer2-ts.c b/example-primer2/primer2-ts.c index c6952f1..3872517 100644 --- a/example-primer2/primer2-ts.c +++ b/example-primer2/primer2-ts.c @@ -107,6 +107,10 @@ void adc3_conversion (uint32_t *result) /* Stop conversion. */ ADC3->CR2 &= ~ADC_CR2_JSWSTART; +#if USE_ADC3_INTR + chopstx_intr_done (&adc3_intr); +#endif + return; } diff --git a/example-usb-serial/usb-cdc.c b/example-usb-serial/usb-cdc.c index 918684e..898217b 100644 --- a/example-usb-serial/usb-cdc.c +++ b/example-usb-serial/usb-cdc.c @@ -770,6 +770,7 @@ cdc_main (void *arg) * */ e = usb_lld_event_handler (&dev); + chopstx_intr_done (&usb_intr); ep_num = USB_EVENT_ENDP (e); if (ep_num != 0)