support stm8s-discovery
authorNIIBE Yutaka <gniibe@fsij.org>
Wed, 23 May 2012 07:02:02 +0000 (16:02 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Wed, 23 May 2012 07:02:02 +0000 (16:02 +0900)
regnual/sys-stm8s-discovery.h [new file with mode: 0644]
regnual/sys.c

diff --git a/regnual/sys-stm8s-discovery.h b/regnual/sys-stm8s-discovery.h
new file mode 100644 (file)
index 0000000..d9d6933
--- /dev/null
@@ -0,0 +1,13 @@
+#define STM32_PLLXTPRE                 STM32_PLLXTPRE_DIV1
+#define STM32_PLLMUL_VALUE             9
+#define STM32_HSECLK                   8000000
+
+#undef  GPIO_USB_CLEAR_TO_ENABLE
+#define GPIO_LED_SET_TO_EMIT           8
+
+#define VAL_GPIO_ODR            0xFFFFFFFF
+#define VAL_GPIO_CRH            0x88888883      /* PD15...PD8 */
+#define VAL_GPIO_CRL            0x88888888      /*  PD7...PD0 */
+
+#define GPIO_LED_BASE  GPIOA_BASE
+#undef  GPIO_USB_BASE
index 4fc4daa..b7aac3d 100644 (file)
@@ -177,7 +177,9 @@ struct GPIO {
 #define GPIOE_BASE     (APB2PERIPH_BASE + 0x1800)
 #define GPIOE          ((struct GPIO *) GPIOE_BASE)
 
+#ifdef GPIO_USB_BASE
 #define GPIO_USB       ((struct GPIO *) GPIO_USB_BASE)
+#endif
 #define GPIO_LED       ((struct GPIO *) GPIO_LED_BASE)
 
 static __attribute__ ((used))
@@ -188,37 +190,53 @@ void gpio_init (void)
   RCC->APB2RSTR = RCC_APB2RSTR_IOPDRST;
   RCC->APB2RSTR = 0;
 
-  GPIO_USB->ODR = VAL_GPIO_ODR;
-  GPIO_USB->CRH = VAL_GPIO_CRH;
-  GPIO_USB->CRL = VAL_GPIO_CRL;
+  GPIO_LED->ODR = VAL_GPIO_ODR;
+  GPIO_LED->CRH = VAL_GPIO_CRH;
+  GPIO_LED->CRL = VAL_GPIO_CRL;
 
-#if GPIO_USB_BASE != GPIO_LED_BASE
-  GPIO_LED->ODR = VAL_GPIO_LED_ODR;
-  GPIO_LED->CRH = VAL_GPIO_LED_CRH;
-  GPIO_LED->CRL = VAL_GPIO_LED_CRL;
+#if defined(GPIO_USB_BASE) && GPIO_USB_BASE != GPIO_LED_BASE
+  GPIO_USB->ODR = VAL_GPIO_USB_ODR;
+  GPIO_USB->CRH = VAL_GPIO_USB_CRH;
+  GPIO_USB->CRL = VAL_GPIO_USB_CRL;
 #endif
 }
 
 static void
 usb_cable_config (int on)
 {
-#if defined(GPIO_USB_CLEAR_TO_ENABLE)
+#ifdef GPIO_USB_BASE
+# ifdef GPIO_USB_CLEAR_TO_ENABLE
   if (on)
     GPIO_USB->BRR = (1 << GPIO_USB_CLEAR_TO_ENABLE);
   else
     GPIO_USB->BSRR = (1 << GPIO_USB_CLEAR_TO_ENABLE);
+# endif
+# ifdef GPIO_USB_SET_TO_ENABLE
+  if (on)
+    GPIO_USB->BSRR = (1 << GPIO_USB_SET_TO_ENABLE);
+  else
+    GPIO_USB->BRR = (1 << GPIO_USB_SET_TO_ENABLE);
+# endif
+#else
+  (void)on;
 #endif
 }
 
 void
 set_led (int on)
 {
-#if defined(GPIO_LED_CLEAR_TO_EMIT)
+#ifdef GPIO_LED_CLEAR_TO_EMIT
   if (on)
     GPIO_LED->BRR = (1 << GPIO_LED_CLEAR_TO_EMIT);
   else
     GPIO_LED->BSRR = (1 << GPIO_LED_CLEAR_TO_EMIT);
 #endif
+#ifdef GPIO_LED_SET_TO_EMIT
+  if (on)
+    GPIO_LED->BSRR = (1 << GPIO_LED_SET_TO_EMIT);
+  else
+    GPIO_LED->BRR = (1 << GPIO_LED_SET_TO_EMIT);
+#endif
 }
 
 
@@ -436,7 +454,6 @@ int
 flash_protect (void)
 {
   int status;
-  uint16_t rdp;
 
   status = flash_wait_for_last_operation (FLASH_ERASE_TIMEOUT);