Browse Source

samd51 metro m4 add init_mcu() and usb init

- device regconized on bus but doesnt response with setup packet.
- temp disable msc
hathach 7 years ago
parent
commit
5e65886fdd

+ 19 - 2
examples/device/device_composite/ses/device_composite.emProject

@@ -118,8 +118,8 @@
       arm_target_device_name="ATSAMD51J19"
       arm_target_interface_type="SWD"
       build_treat_warnings_as_errors="Yes"
-      c_preprocessor_definitions="__SAME51_FAMILY;__SAMD51J19A__;ARM_MATH_CM4;FLASH_PLACEMENT=1;USE_SIMPLE_ASSERT;BOARD_METRO_M4_EXPRESS;CFG_TUSB_MCU=OPT_MCU_SAMD51"
-      c_user_include_directories="../src;$(rootDir)/hw/cmsis/Include;$(rootDir)/hw;$(rootDir)/src;$(asf4Dir);$(asf4Dir)/include;$(asf4Dir)/hri;$(asf4Dir)/hal/include;$(asf4Dir)/hal/utils/include;$(asf4Dir)/hpl/port"
+      c_preprocessor_definitions="__SAME51_FAMILY;__SAMD51J19A__;ARM_MATH_CM4;FLASH_PLACEMENT=1;USE_SIMPLE_ASSERT;BOARD_METRO_M4_EXPRESS;CIRCUITPY_GCLK_INIT_1ST=0xffff;CFG_TUSB_MCU=OPT_MCU_SAMD51"
+      c_user_include_directories="../src;$(rootDir)/hw/cmsis/Include;$(rootDir)/hw;$(rootDir)/src;$(asf4Dir);$(asf4Dir)/include;$(asf4Dir)/config;$(asf4Dir)/hri;$(asf4Dir)/hal/include;$(asf4Dir)/hal/utils/include;$(asf4Dir)/hpl/port;$(asf4Dir)/hpl/gclk"
       debug_register_definition_file="ses_samd51/ATSAME51J19A_Registers.xml"
       debug_target_connection="J-Link"
       gcc_entry_point="Reset_Handler"
@@ -156,6 +156,23 @@
                 <folder Name="gcc">
                   <file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/gcc/system_samd51.c" />
                 </folder>
+                <folder Name="hpl">
+                  <folder Name="core">
+                    <file file_name="../../../../../../../adafruit/circuitpython/thach_cp/ports/atmel-samd/asf4/samd51/hpl/core/hpl_init.c" />
+                  </folder>
+                  <folder Name="osc32kctrl">
+                    <file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/osc32kctrl/hpl_osc32kctrl.c" />
+                  </folder>
+                  <folder Name="oscctrl">
+                    <file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/oscctrl/hpl_oscctrl.c" />
+                  </folder>
+                  <folder Name="mclk">
+                    <file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/mclk/hpl_mclk.c" />
+                  </folder>
+                  <folder Name="gclk">
+                    <file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/gclk/hpl_gclk.c" />
+                  </folder>
+                </folder>
               </folder>
             </folder>
           </folder>

+ 1 - 1
examples/device/device_composite/src/tusb_config.h

@@ -87,7 +87,7 @@
 
 //------------- CLASS -------------//
 #define CFG_TUD_CDC                 1
-#define CFG_TUD_MSC                 1
+#define CFG_TUD_MSC                 0
 
 #define CFG_TUD_HID                 0
 #define CFG_TUD_HID_KEYBOARD        0

+ 26 - 1
hw/bsp/metro_m4_express/board_metro_m4_express.c

@@ -37,7 +37,12 @@
 /**************************************************************************/
 
 #include "bsp/board.h"
+
+#include "sam.h"
 #include "hal/include/hal_gpio.h"
+#include "hal/include/hal_init.h"
+#include "peripheral_clk_config.h"
+
 
 //--------------------------------------------------------------------+
 // MACRO TYPEDEF CONSTANT ENUM DECLARATION
@@ -46,6 +51,8 @@
 
 void board_init(void)
 {
+  init_mcu();
+
   gpio_set_pin_direction(BOARD_LED0, GPIO_DIRECTION_OUT);
   gpio_set_pin_level(BOARD_LED0, 1-LED_STATE_ON);
 
@@ -53,6 +60,24 @@ void board_init(void)
   // Tick init
   SysTick_Config(SystemCoreClock/1000);
 #endif
+
+  /* USB Clock init
+   * The USB module requires a GCLK_USB of 48 MHz ~ 0.25% clock
+   * for low speed and full speed operation. */
+  hri_gclk_write_PCHCTRL_reg(GCLK, USB_GCLK_ID, CONF_GCLK_USB_SRC | GCLK_PCHCTRL_CHEN);
+  hri_mclk_set_AHBMASK_USB_bit(MCLK);
+  hri_mclk_set_APBBMASK_USB_bit(MCLK);
+
+  // USB Pin Init
+  gpio_set_pin_direction(PIN_PA24, GPIO_DIRECTION_OUT);
+  gpio_set_pin_level(PIN_PA24, false);
+  gpio_set_pin_pull_mode(PIN_PA24, GPIO_PULL_OFF);
+  gpio_set_pin_direction(PIN_PA25, GPIO_DIRECTION_OUT);
+  gpio_set_pin_level(PIN_PA25, false);
+  gpio_set_pin_pull_mode(PIN_PA25, GPIO_PULL_OFF);
+
+  gpio_set_pin_function(PIN_PA24, PINMUX_PA24H_USB_DM);
+  gpio_set_pin_function(PIN_PA25, PINMUX_PA25H_USB_DP);
 }
 
 void board_led_control(uint32_t led_id, bool state)
@@ -76,4 +101,4 @@ uint32_t tusb_hal_millis(void)
 {
   return board_tick2ms(system_ticks);
 }
-#endif
+#endif