Upgrade to new chopstx
authorNIIBE Yutaka <gniibe@fsij.org>
Sat, 2 Nov 2013 06:31:07 +0000 (15:31 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Sat, 2 Nov 2013 06:31:07 +0000 (15:31 +0900)
ChangeLog
chopstx
src/main.c
src/sys.c
src/usb_lld.h
src/usb_stm32f103.c

index bf82d70..4bce8d4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-02  Niibe Yutaka  <gniibe@fsij.org>
+
+       * chopstx: Update.
+       * src/sys.c, src/usb_lld.h, src/usb_stm32f103.c: Update from
+       Chopstx.
+       * src/main.c (usb_cb_get_descriptor): Follow the change.
+
 2013-10-24  Niibe Yutaka  <gniibe@fsij.org>
 
        * src/main.c (usb_cb_setup): Signal CND_USB, so that
diff --git a/chopstx b/chopstx
index 5f14824..05e6bda 160000 (submodule)
--- a/chopstx
+++ b/chopstx
@@ -1 +1 @@
-Subproject commit 5f14824977c1b7f281aa0b31cc8dbf93a649b504
+Subproject commit 05e6bda381922dd0890615abdc55fc809e12c9de
index 7c74628..eab5296 100644 (file)
@@ -452,9 +452,13 @@ usb_cb_setup (uint8_t req, uint8_t req_no,
 }
 
 int
-usb_cb_get_descriptor (uint8_t desc_type, uint16_t index, uint16_t value)
+usb_cb_get_descriptor (uint8_t rcp, uint8_t desc_type, uint8_t desc_index,
+                      uint16_t index);
 {
   (void)index;
+  if (rcp != DEVICE_RECIPIENT)
+    return USB_UNSUPPORT;
+
   if (desc_type == DEVICE_DESCRIPTOR)
     {
       usb_lld_set_data_to_send (vcom_device_desc, sizeof (vcom_device_desc));
@@ -468,7 +472,6 @@ usb_cb_get_descriptor (uint8_t desc_type, uint16_t index, uint16_t value)
     }
   else if (desc_type == STRING_DESCRIPTOR)
     {
-      uint8_t desc_index = value & 0xff;
       const uint8_t *str;
       int size;
 
index 36184b7..75fe7d2 100644 (file)
--- a/src/sys.c
+++ b/src/sys.c
@@ -181,15 +181,33 @@ clock_init (void)
     ;
 }
 
-#define RCC_APB2ENR_IOPAEN     0x00000004
+#define RCC_APB2RSTR_AFIORST    0x00000001
 #define RCC_APB2RSTR_IOPARST   0x00000004
-#define RCC_APB2ENR_IOPBEN     0x00000008
 #define RCC_APB2RSTR_IOPBRST   0x00000008
-#define RCC_APB2ENR_IOPCEN     0x00000010
 #define RCC_APB2RSTR_IOPCRST   0x00000010
-#define RCC_APB2ENR_IOPDEN     0x00000020
 #define RCC_APB2RSTR_IOPDRST   0x00000020
 
+#define RCC_APB2ENR_AFIOEN      0x00000001
+#define RCC_APB2ENR_IOPAEN     0x00000004
+#define RCC_APB2ENR_IOPBEN     0x00000008
+#define RCC_APB2ENR_IOPCEN     0x00000010
+#define RCC_APB2ENR_IOPDEN     0x00000020
+
+
+struct AFIO
+{
+  volatile uint32_t EVCR;
+  volatile uint32_t MAPR;
+  volatile uint32_t EXTICR[4];
+  uint32_t RESERVED0;
+  volatile uint32_t MAPR2;
+};
+
+#define AFIO_BASE 0x40010000
+static struct AFIO *const AFIO = (struct AFIO *const)AFIO_BASE;
+
+#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP 0x00000800
+
 
 struct GPIO {
   volatile uint32_t CRL;
@@ -214,6 +232,9 @@ struct GPIO {
 
 static struct GPIO *const GPIO_USB = ((struct GPIO *const) GPIO_USB_BASE);
 static struct GPIO *const GPIO_LED = ((struct GPIO *const) GPIO_LED_BASE);
+#ifdef GPIO_OTHER_BASE
+static struct GPIO *const GPIO_OTHER = ((struct GPIO *const) GPIO_OTHER_BASE);
+#endif
 
 static void
 gpio_init (void)
@@ -223,6 +244,10 @@ gpio_init (void)
   RCC->APB2RSTR = RCC_APB2RSTR_IOP_RST;
   RCC->APB2RSTR = 0;
 
+#ifdef AFIO_MAPR_SOMETHING
+  AFIO->MAPR |= AFIO_MAPR_SOMETHING;
+#endif
+
   GPIO_USB->ODR = VAL_GPIO_ODR;
   GPIO_USB->CRH = VAL_GPIO_CRH;
   GPIO_USB->CRL = VAL_GPIO_CRL;
@@ -232,6 +257,12 @@ gpio_init (void)
   GPIO_LED->CRH = VAL_GPIO_LED_CRH;
   GPIO_LED->CRL = VAL_GPIO_LED_CRL;
 #endif
+
+#ifdef GPIO_OTHER_BASE
+  GPIO_OTHER->ODR = VAL_GPIO_OTHER_ODR;
+  GPIO_OTHER->CRH = VAL_GPIO_OTHER_CRH;
+  GPIO_OTHER->CRL = VAL_GPIO_OTHER_CRL;
+#endif
 }
 
 static void
@@ -276,8 +307,6 @@ static void wait (int count)
     asm volatile ("" : : "r" (i) : "memory");
 }
 
-#define USB_IRQ 20
-#define USB_IRQ_PRIORITY ((11) << 4)
 
 static void
 usb_lld_sys_shutdown (void)
index 8dc00b9..a9f0158 100644 (file)
@@ -60,7 +60,8 @@ void usb_cb_ctrl_write_finish (uint8_t req, uint8_t req_no,
                               uint16_t value, uint16_t index, uint16_t len);
 int usb_cb_setup (uint8_t req, uint8_t req_no, uint16_t value,
                  uint16_t index, uint16_t len);
-int usb_cb_get_descriptor (uint8_t desc_type, uint16_t index, uint16_t value);
+int usb_cb_get_descriptor (uint8_t rcp, uint8_t desc_type, uint8_t desc_index,
+                          uint16_t index);
 int usb_cb_handle_event (uint8_t event_type, uint16_t value);
 int usb_cb_interface (uint8_t cmd, uint16_t interface, uint16_t value);
 
@@ -90,8 +91,6 @@ enum DEVICE_STATE
 
 extern const uint8_t usb_initial_feature;
 
-#define STM32_USB_IRQ_PRIORITY     11
-
 extern void usb_lld_init (uint8_t feature);
 
 extern void usb_lld_to_pmabuf (const void *src, uint16_t addr, size_t n);
index b75dfdb..dd33e67 100644 (file)
@@ -697,10 +697,7 @@ static int std_get_descriptor (uint8_t req, uint16_t value,
     return USB_UNSUPPORT;
 
   (void)length;
-  if (rcp == DEVICE_RECIPIENT)
-    return usb_cb_get_descriptor ((value >> 8), index, value);
-
-  return USB_UNSUPPORT;
+  return usb_cb_get_descriptor (rcp, (value >> 8), (value & 0xff), index);
 }
 
 static int std_get_configuration (uint8_t req, uint16_t value,