driver_init.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*
  2. * Code generated from Atmel Start.
  3. *
  4. * This file will be overwritten when reconfiguring your Atmel Start project.
  5. * Please copy examples or other code you want to keep to a separate file
  6. * to avoid losing it when reconfiguring.
  7. */
  8. #include "driver_init.h"
  9. #include <peripheral_clk_config.h>
  10. #include <utils.h>
  11. #include <hal_init.h>
  12. #include <hpl_adc_base.h>
  13. /*! The buffer size for USART */
  14. #define TARGET_IO_BUFFER_SIZE 16
  15. struct usart_async_descriptor TARGET_IO;
  16. static uint8_t TARGET_IO_buffer[TARGET_IO_BUFFER_SIZE];
  17. struct adc_sync_descriptor ADC_0;
  18. struct i2c_m_sync_desc I2C_0;
  19. void ADC_0_PORT_init(void)
  20. {
  21. // Disable digital pin circuitry
  22. gpio_set_pin_direction(PA02, GPIO_DIRECTION_OFF);
  23. gpio_set_pin_function(PA02, PINMUX_PA02B_ADC_AIN0);
  24. }
  25. void ADC_0_CLOCK_init(void)
  26. {
  27. hri_mclk_set_APBCMASK_ADC_bit(MCLK);
  28. hri_gclk_write_PCHCTRL_reg(GCLK, ADC_GCLK_ID, CONF_GCLK_ADC_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
  29. }
  30. void ADC_0_init(void)
  31. {
  32. ADC_0_CLOCK_init();
  33. ADC_0_PORT_init();
  34. adc_sync_init(&ADC_0, ADC, (void *)NULL);
  35. }
  36. void I2C_0_PORT_init(void)
  37. {
  38. gpio_set_pin_pull_mode(PA16,
  39. // <y> Pull configuration
  40. // <id> pad_pull_config
  41. // <GPIO_PULL_OFF"> Off
  42. // <GPIO_PULL_UP"> Pull-up
  43. // <GPIO_PULL_DOWN"> Pull-down
  44. GPIO_PULL_OFF);
  45. gpio_set_pin_function(PA16, PINMUX_PA16D_SERCOM0_PAD0);
  46. gpio_set_pin_pull_mode(PA17,
  47. // <y> Pull configuration
  48. // <id> pad_pull_config
  49. // <GPIO_PULL_OFF"> Off
  50. // <GPIO_PULL_UP"> Pull-up
  51. // <GPIO_PULL_DOWN"> Pull-down
  52. GPIO_PULL_OFF);
  53. gpio_set_pin_function(PA17, PINMUX_PA17D_SERCOM0_PAD1);
  54. }
  55. void I2C_0_CLOCK_init(void)
  56. {
  57. hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM0_GCLK_ID_CORE, CONF_GCLK_SERCOM0_CORE_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
  58. hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM0_GCLK_ID_SLOW, CONF_GCLK_SERCOM0_SLOW_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
  59. hri_mclk_set_APBCMASK_SERCOM0_bit(MCLK);
  60. }
  61. void I2C_0_init(void)
  62. {
  63. I2C_0_CLOCK_init();
  64. i2c_m_sync_init(&I2C_0, SERCOM0);
  65. I2C_0_PORT_init();
  66. }
  67. /**
  68. * \brief USART Clock initialization function
  69. *
  70. * Enables register interface and peripheral clock
  71. */
  72. void TARGET_IO_CLOCK_init()
  73. {
  74. hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM2_GCLK_ID_CORE, CONF_GCLK_SERCOM2_CORE_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
  75. hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM2_GCLK_ID_SLOW, CONF_GCLK_SERCOM2_SLOW_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
  76. hri_mclk_set_APBCMASK_SERCOM2_bit(MCLK);
  77. }
  78. /**
  79. * \brief USART pinmux initialization function
  80. *
  81. * Set each required pin to USART functionality
  82. */
  83. void TARGET_IO_PORT_init()
  84. {
  85. gpio_set_pin_function(EDBG_COM_TX, PINMUX_PA24D_SERCOM2_PAD2);
  86. gpio_set_pin_function(EDBG_COM_RX, PINMUX_PA25D_SERCOM2_PAD3);
  87. }
  88. /**
  89. * \brief USART initialization function
  90. *
  91. * Enables USART peripheral, clocks and initializes USART driver
  92. */
  93. void TARGET_IO_init(void)
  94. {
  95. TARGET_IO_CLOCK_init();
  96. usart_async_init(&TARGET_IO, SERCOM2, TARGET_IO_buffer, TARGET_IO_BUFFER_SIZE, (void *)NULL);
  97. TARGET_IO_PORT_init();
  98. }
  99. void system_init(void)
  100. {
  101. init_mcu();
  102. // GPIO on PA07
  103. gpio_set_pin_level(LED0,
  104. // <y> Initial level
  105. // <id> pad_initial_level
  106. // <false"> Low
  107. // <true"> High
  108. false);
  109. // Set pin direction to output
  110. gpio_set_pin_direction(LED0, GPIO_DIRECTION_OUT);
  111. gpio_set_pin_function(LED0, GPIO_PIN_FUNCTION_OFF);
  112. ADC_0_init();
  113. I2C_0_init();
  114. TARGET_IO_init();
  115. }