ADC API change
authorNIIBE Yutaka <gniibe@fsij.org>
Fri, 27 May 2016 08:25:05 +0000 (17:25 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Fri, 27 May 2016 08:25:05 +0000 (17:25 +0900)
ChangeLog
chopstx
src/adc.h
src/adc_stm32f103.c
src/neug.c
src/sys.c

index 1c58963..371d8d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-05-27  NIIBE Yutaka  <gniibe@fsij.org>
+
+       * src/adc_stm32f103.c (adc_intr): Define in this module.
+       (adc_init): Claim IRQ here.
+       (adc_wait_completion): Don't expose INTR.
+
+       * src/neug.c (INTR_REQ_DMA1_Channel1): Remove.
+       (rng): Follow the change of ADC API.
+
 2016-05-26  NIIBE Yutaka  <gniibe@fsij.org>
 
        * chopstx: Update.
diff --git a/chopstx b/chopstx
index 91823d0..960921f 160000 (submodule)
--- a/chopstx
+++ b/chopstx
@@ -1 +1 @@
-Subproject commit 91823d0fc141232cb7672de7432e05126078b574
+Subproject commit 960921f537adf6424c266664dcf1575c08ef0623
index 54e1f4e..13a9141 100644 (file)
--- a/src/adc.h
+++ b/src/adc.h
@@ -5,4 +5,4 @@ void adc_stop (void);
 extern uint32_t adc_buf[64];
 
 void adc_start_conversion (int offset, int count);
-int adc_wait_completion (chopstx_intr_t *intr);
+int adc_wait_completion (void);
index 839b958..144640e 100644 (file)
@@ -3,7 +3,7 @@
  *                   In this ADC driver, there are NeuG specific parts.
  *                   You need to modify to use this as generic ADC driver.
  *
- * Copyright (C) 2011, 2012, 2013, 2015
+ * Copyright (C) 2011, 2012, 2013, 2015, 2016
  *               Free Software Initiative of Japan
  * Author: NIIBE Yutaka <gniibe@fsij.org>
  *
                               | ADC_SQR3_SQ4_N(ADC_CHANNEL_VREFINT)
 #define NEUG_ADC_SETTING1_NUM_CHANNELS 4
 
+/*
+ * ADC finish interrupt
+ */
+#define INTR_REQ_DMA1_Channel1 11
+
+static chopstx_intr_t adc_intr;
 
 /*
  * Do calibration for both of ADCs.
  */
-void adc_init (void)
+void
+adc_init (void)
 {
   RCC->APB2ENR |= (RCC_APB2ENR_ADC1EN | RCC_APB2ENR_ADC2EN);
   RCC->APB2RSTR = (RCC_APB2RSTR_ADC1RST | RCC_APB2RSTR_ADC2RST);
@@ -123,6 +130,8 @@ void adc_init (void)
     ;
   ADC2->CR2 = 0;
   RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN | RCC_APB2ENR_ADC2EN);
+
+  chopstx_claim_irq (&adc_intr, INTR_REQ_DMA1_Channel1);
 }
 
 #include "sys.h"
@@ -183,7 +192,8 @@ get_adc_config (uint32_t config[4])
 }
 
 
-void adc_start (void)
+void
+adc_start (void)
 {
   uint32_t config[4];
 
@@ -234,7 +244,8 @@ void adc_start (void)
 
 uint32_t adc_buf[64];
 
-void adc_start_conversion (int offset, int count)
+void
+adc_start_conversion (int offset, int count)
 {
   DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR;        /* SetPeripheral */
   DMA1_Channel1->CMAR = (uint32_t)&adc_buf[offset]; /* SetMemory0    */
@@ -267,7 +278,8 @@ static void adc_stop_conversion (void)
 #endif
 }
 
-void adc_stop (void)
+void
+adc_stop (void)
 {
   ADC1->CR1 = 0;
   ADC1->CR2 = 0;
@@ -286,13 +298,14 @@ static uint32_t adc_err;
  * Return 0 on success.
  * Return 1 on error.
  */
-int adc_wait_completion (chopstx_intr_t *intr)
+int
+adc_wait_completion (void)
 {
   uint32_t flags;
 
   while (1)
     {
-      chopstx_intr_wait (intr);
+      chopstx_poll (NULL, 1, &adc_intr);
       flags = DMA1->ISR & STM32_DMA_ISR_MASK; /* Channel 1 interrupt cause.  */
       /*
        * Clear interrupt cause of channel 1.
index d3f3ee4..d733e9f 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * neug.c - true random number generation
  *
- * Copyright (C) 2011, 2012, 2013 Free Software Initiative of Japan
+ * Copyright (C) 2011, 2012, 2013, 2016
+ *               Free Software Initiative of Japan
  * Author: NIIBE Yutaka <gniibe@fsij.org>
  *
  * This file is a part of NeuG, a True Random Number Generator
 static chopstx_mutex_t mode_mtx;
 static chopstx_cond_t  mode_cond;
 
-/*
- * ADC finish interrupt
- */
-#define INTR_REQ_DMA1_Channel1 11
-
-
 static sha256_context sha256_ctx_data;
 static uint32_t sha256_output[SHA256_DIGEST_SIZE/sizeof (uint32_t)];
 
@@ -574,7 +569,6 @@ static void *
 rng (void *arg)
 {
   struct rng_rb *rb = (struct rng_rb *)arg;
-  chopstx_intr_t adc_intr;
   int mode = neug_mode;
 
   rng_should_terminate = 0;
@@ -582,7 +576,6 @@ rng (void *arg)
   chopstx_cond_init (&mode_cond);
 
   /* Enable ADCs */
-  chopstx_claim_irq (&adc_intr, INTR_REQ_DMA1_Channel1);
   adc_start ();
 
   ep_init (mode);
@@ -591,7 +584,7 @@ rng (void *arg)
       int err;
       int n;
 
-      err = adc_wait_completion (&adc_intr);
+      err = adc_wait_completion ();
 
       chopstx_mutex_lock (&mode_mtx);
       if (err || mode != neug_mode)
index 9ec3b06..d73b709 100644 (file)
--- a/src/sys.c
+++ b/src/sys.c
@@ -17,7 +17,7 @@
 #include <stdlib.h>
 #include "board.h"
 
-#include "clk_gpio_init-stm32.c"
+#include "mcu/clk_gpio_init-stm32.c"
 
 
 static void