update for chopstx
authorNIIBE Yutaka <gniibe@fsij.org>
Wed, 29 May 2013 03:53:45 +0000 (12:53 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Wed, 29 May 2013 03:53:45 +0000 (12:53 +0900)
chopstx
src/adc_stm32f103.c
src/main.c
src/neug.ld.in
src/random.c
src/stm32f103.h

diff --git a/chopstx b/chopstx
index cf4a340..866461d 160000 (submodule)
--- a/chopstx
+++ b/chopstx
@@ -1 +1 @@
-Subproject commit cf4a340023cda2819d11d2911bbf983bb6be9240
+Subproject commit 866461d13ed16354867e0cec1dd4c288ae559c99
index c994494..3e677b4 100644 (file)
 void adc_init (void)
 {
   RCC->APB2ENR |= (RCC_APB2ENR_ADC1EN | RCC_APB2ENR_ADC2EN);
+  RCC->APB2RSTR = (RCC_APB2RSTR_ADC1RST | RCC_APB2RSTR_ADC2RST);
+  RCC->APB2RSTR = 0;
+
   ADC1->CR1 = 0;
   ADC1->CR2 = ADC_CR2_ADON;
   ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_RSTCAL;
@@ -131,10 +134,6 @@ void adc_init (void)
     ;
   ADC2->CR2 = 0;
   RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN | RCC_APB2ENR_ADC2EN);
-
-  /* ... and DMA Initialize.  */
-  DMA1_Channel1->CCR = 0;
-  DMA1->IFCR = 0xffffffff;
 }
 
 extern uint8_t __process4_stack_base__, __process4_stack_size__;
@@ -148,16 +147,16 @@ static void adc_lld_serve_rx_interrupt (uint32_t flags);
 static void *
 adc_intr_thread (void *arg)
 {
-  chopstix_intr_t interrupt;
+  chopstx_intr_t interrupt;
 
   (void)arg;
-  chopstx_intr_register (&interrupt, INTR_REQ_DMA1_Channel1);
+  chopstx_claim_irq (&interrupt, INTR_REQ_DMA1_Channel1);
 
   while (1)
     {
       uint32_t flags;
 
-      chopstx_wait_intr (&interrupt);
+      chopstx_intr_wait (&interrupt);
       flags = DMA1->ISR & STM32_DMA_ISR_MASK; /* Channel 1 interrupt cause.  */
       DMA1->IFCR = STM32_DMA_ISR_MASK; /* Clear interrupt of channel 1.  */
       adc_lld_serve_rx_interrupt (flags);
@@ -172,12 +171,10 @@ void adc_start (void)
   chopstx_t thd;
   chopstx_attr_t attr;
 
-  /* Allocate a DMA channel.  */
+  /* Use DMA channel 1.  */
   RCC->AHBENR |= RCC_AHBENR_DMA1EN;
   DMA1_Channel1->CCR = STM32_DMA_CCR_RESET_VALUE;
-
-  /**/
-  DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR; /* SetPeripheral */
+  DMA1->IFCR = 0xffffffff;
 
   RCC->APB2ENR |= (RCC_APB2ENR_ADC1EN | RCC_APB2ENR_ADC2EN);
 
@@ -241,16 +238,18 @@ void adc_start_conversion (int mode, uint32_t *p, int size)
 
  if (mode == ADC_SAMPLE_MODE)
     {
+      DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR; /* SetPeripheral */
       DMA1_Channel1->CMAR  = (uint32_t)p; /* SetMemory0 */
       DMA1_Channel1->CNDTR  = (uint32_t)size / 4; /* size */
-      DMA1_Channel1->CCR  = (uint32_t)NEUG_DMA_MODE_SAMPLE; /*mode*/
+      DMA1_Channel1->CCR  = NEUG_DMA_MODE_SAMPLE; /*mode*/
       DMA1_Channel1->CCR |= DMA_CCR1_EN;                   /* Enable */
     }
   else
     {
+      DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR; /* SetPeripheral */
       DMA1_Channel1->CMAR  = (uint32_t)&CRC->DR; /* SetMemory0 */
-      DMA1_Channel1->CNDTR  = (uint32_t)NEUG_CRC32_COUNTS; /* size */
-      DMA1_Channel1->CCR  = (uint32_t)NEUG_DMA_MODE_CRC32; /*mode*/
+      DMA1_Channel1->CNDTR  = NEUG_CRC32_COUNTS; /* size */
+      DMA1_Channel1->CCR  = NEUG_DMA_MODE_CRC32; /*mode*/
       DMA1_Channel1->CCR |= DMA_CCR1_EN;                   /* Enable */
     }
 
@@ -306,9 +305,10 @@ static void adc_lld_serve_rx_interrupt (uint32_t flags)
 
              if (adc_size > 0)
                {
+                 DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR; /* SetPeripheral */
                  DMA1_Channel1->CMAR  = (uint32_t)&CRC->DR; /* SetMemory0 */
-                 DMA1_Channel1->CNDTR  = (uint32_t)NEUG_CRC32_COUNTS; /* size */
-                 DMA1_Channel1->CCR  = (uint32_t)NEUG_DMA_MODE_CRC32; /*mode*/
+                 DMA1_Channel1->CNDTR NEUG_CRC32_COUNTS; /* size */
+                 DMA1_Channel1->CCR  = NEUG_DMA_MODE_CRC32; /*mode*/
                  DMA1_Channel1->CCR |= DMA_CCR1_EN;                /* Enable */
                  adc_start_conversion_internal ();
                }
index 42009bc..89dd5dd 100644 (file)
@@ -590,19 +590,19 @@ int usb_cb_interface (uint8_t cmd, uint16_t interface, uint16_t alt)
 static void *
 usb_intr (void *arg)
 {
-  chopstix_intr_t interrupt;
+  chopstx_intr_t interrupt;
 
   (void)arg;
   asm volatile ("cpsid   i" : : : "memory");
   /* Disable because usb_lld_init assumes interrupt handler.  */
   usb_lld_init (vcom_configuration_desc[7]);
-  chopstx_intr_register (&interrupt, INTR_REQ_USB);
+  chopstx_claim_irq (&interrupt, INTR_REQ_USB);
   /* Enable */
   asm volatile ("cpsie   i" : : : "memory");
 
   while (1)
     {
-      chopstx_wait_intr (&interrupt);
+      chopstx_intr_wait (&interrupt);
 
       /* Process interrupt. */
       usb_interrupt_handler ();
@@ -727,17 +727,17 @@ static void *led_blinker (void *arg)
 
       set_led (1);
       if (m == LED_ONESHOT_SHORT)
-       chopstx_usleep (100*1000);
+       chopstx_usec_wait (100*1000);
       else if (m == LED_TWOSHOTS)
        {
-         chopstx_usleep (50*1000);
+         chopstx_usec_wait (50*1000);
          set_led (0);
-         chopstx_usleep (50*1000);
+         chopstx_usec_wait (50*1000);
          set_led (1);
-         chopstx_usleep (50*1000);
+         chopstx_usec_wait (50*1000);
        }
       else
-       chopstx_usleep (250*1000);
+       chopstx_usec_wait (250*1000);
       set_led (0);
     }
 
@@ -824,7 +824,7 @@ main (int argc, char **argv)
 
          if ((count & 0x0007) == 0)
            event_flag_signal (&led_event, LED_ONESHOT_SHORT);
-         chopstx_usleep (25*1000);
+         chopstx_usec_wait (25*1000);
          count++;
        }
 
@@ -836,7 +836,7 @@ main (int argc, char **argv)
 
          neug_flush ();
          event_flag_signal (&led_event, LED_TWOSHOTS);
-         chopstx_usleep (5000*1000);
+         chopstx_usec_wait (5000*1000);
        }
 
       if (fsij_device_state != FSIJ_DEVICE_RUNNING)
@@ -906,7 +906,7 @@ main (int argc, char **argv)
   fsij_device_state = FSIJ_DEVICE_EXITED;
 
   while (fsij_device_state == FSIJ_DEVICE_EXITED)
-    chopstx_usleep (500*1000);
+    chopstx_usec_wait (500*1000);
 
   flash_unlock ();             /* Flash unlock should be done here */
   set_led (1);
index 6223752..044ed98 100644 (file)
@@ -27,7 +27,7 @@ SECTIONS
 {
     . = 0;
 
-    .sys : ALIGN(16) SUBALIGN(16)
+    .sys : ALIGN(4) SUBALIGN(4)
     {
         _sys = .;
         KEEP(*(.vectors))
index f2d6075..b816b3d 100644 (file)
@@ -640,7 +640,7 @@ neug_mode_select (uint8_t mode)
   while (adc_waiting == 0)
     {
       chopstx_mutex_unlock (&adc_mtx);
-      chopstx_usleep (1000);
+      chopstx_usec_wait (1000);
       chopstx_mutex_lock (&adc_mtx);
     }
   chopstx_mutex_unlock (&adc_mtx);
index 02f6adc..a4ecaa1 100644 (file)
@@ -2,6 +2,9 @@
 #define APB2PERIPH_BASE        (PERIPH_BASE + 0x10000)
 #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
 
+#define RCC_APB2RSTR_ADC1RST 0x00000200
+#define RCC_APB2RSTR_ADC2RST 0x00000400
+
 struct RCC {
   volatile uint32_t CR;
   volatile uint32_t CFGR;