]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/asf/common/services/clock/sam4l/osc.c
Add SAM4L demo.
[freertos] / FreeRTOS / Demo / CORTEX_M4_ATSAM4L_Atmel_Studio / src / asf / common / services / clock / sam4l / osc.c
diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/asf/common/services/clock/sam4l/osc.c b/FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/asf/common/services/clock/sam4l/osc.c
new file mode 100644 (file)
index 0000000..0c4ecf4
--- /dev/null
@@ -0,0 +1,222 @@
+/**\r
+ * \file\r
+ *\r
+ * \brief Chip-specific oscillator management functions\r
+ *\r
+ * Copyright (c) 2012 Atmel Corporation. All rights reserved.\r
+ *\r
+ * \asf_license_start\r
+ *\r
+ * \page License\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright notice,\r
+ *    this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright notice,\r
+ *    this list of conditions and the following disclaimer in the documentation\r
+ *    and/or other materials provided with the distribution.\r
+ *\r
+ * 3. The name of Atmel may not be used to endorse or promote products derived\r
+ *    from this software without specific prior written permission.\r
+ *\r
+ * 4. This software may only be redistributed and used in connection with an\r
+ *    Atmel microcontroller product.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * \asf_license_stop\r
+ *\r
+ */\r
+#include <osc.h>\r
+\r
+#ifdef BOARD_OSC0_HZ\r
+void osc_priv_enable_osc0(void)\r
+{\r
+       irqflags_t flags;\r
+\r
+       flags = cpu_irq_save();\r
+       SCIF->SCIF_UNLOCK = SCIF_UNLOCK_KEY(0xAAu)\r
+               | SCIF_UNLOCK_ADDR((uint32_t)&SCIF->SCIF_OSCCTRL0 - (uint32_t)SCIF);\r
+       SCIF->SCIF_OSCCTRL0 =\r
+                       OSC0_STARTUP_VALUE\r
+# if BOARD_OSC0_IS_XTAL == true\r
+                       | OSC0_GAIN_VALUE\r
+#endif\r
+                       | OSC0_MODE_VALUE\r
+                       | SCIF_OSCCTRL0_OSCEN;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_disable_osc0(void)\r
+{\r
+       irqflags_t flags;\r
+\r
+       flags = cpu_irq_save();\r
+       SCIF->SCIF_UNLOCK = SCIF_UNLOCK_KEY(0xAAu)\r
+               | SCIF_UNLOCK_ADDR((uint32_t)&SCIF->SCIF_OSCCTRL0 - (uint32_t)SCIF);\r
+       SCIF->SCIF_OSCCTRL0 = 0;\r
+       cpu_irq_restore(flags);\r
+}\r
+#endif /* BOARD_OSC0_HZ */\r
+\r
+#ifdef BOARD_OSC32_HZ\r
+void osc_priv_enable_osc32(void)\r
+{\r
+       irqflags_t flags;\r
+\r
+       flags = cpu_irq_save();\r
+       BSCIF->BSCIF_UNLOCK = BSCIF_UNLOCK_KEY(0xAAu)\r
+               | BSCIF_UNLOCK_ADDR((uint32_t)&BSCIF->BSCIF_OSCCTRL32 - (uint32_t)BSCIF);\r
+       BSCIF->BSCIF_OSCCTRL32 =\r
+                       OSC32_STARTUP_VALUE\r
+                       | BOARD_OSC32_SELCURR\r
+                       | OSC32_MODE_VALUE\r
+                       | BSCIF_OSCCTRL32_EN1K\r
+                       | BSCIF_OSCCTRL32_EN32K\r
+                       | BSCIF_OSCCTRL32_OSC32EN;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_disable_osc32(void)\r
+{\r
+       irqflags_t flags;\r
+\r
+       flags = cpu_irq_save();\r
+       BSCIF->BSCIF_UNLOCK = BSCIF_UNLOCK_KEY(0xAAu)\r
+               | BSCIF_UNLOCK_ADDR((uint32_t)&BSCIF->BSCIF_OSCCTRL32 - (uint32_t)BSCIF);\r
+       BSCIF->BSCIF_OSCCTRL32 &= ~BSCIF_OSCCTRL32_OSC32EN;\r
+       // Wait until OSC32 RDY flag is cleared.\r
+       while (BSCIF->BSCIF_PCLKSR & BSCIF_PCLKSR_OSC32RDY);\r
+       cpu_irq_restore(flags);\r
+}\r
+#endif /* BOARD_OSC32_HZ */\r
+\r
+void osc_priv_enable_rc32k(void)\r
+{\r
+       irqflags_t flags;\r
+       uint32_t temp;\r
+\r
+       flags = cpu_irq_save();\r
+       temp = BSCIF->BSCIF_RC32KCR;\r
+       BSCIF->BSCIF_UNLOCK = BSCIF_UNLOCK_KEY(0xAAu)\r
+               | BSCIF_UNLOCK_ADDR((uint32_t)&BSCIF->BSCIF_RC32KCR - (uint32_t)BSCIF);\r
+       BSCIF->BSCIF_RC32KCR = temp | BSCIF_RC32KCR_EN32K | BSCIF_RC32KCR_EN;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_disable_rc32k(void)\r
+{\r
+       irqflags_t flags;\r
+       uint32_t temp;\r
+\r
+       flags = cpu_irq_save();\r
+       temp = BSCIF->BSCIF_RC32KCR;\r
+       temp &= ~BSCIF_RC32KCR_EN;\r
+       BSCIF->BSCIF_UNLOCK = BSCIF_UNLOCK_KEY(0xAAu)\r
+               | BSCIF_UNLOCK_ADDR((uint32_t)&BSCIF->BSCIF_RC32KCR - (uint32_t)BSCIF);\r
+       BSCIF->BSCIF_RC32KCR = temp;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_enable_rc1m(void)\r
+{\r
+       irqflags_t flags;\r
+       uint32_t temp;\r
+\r
+       flags = cpu_irq_save();\r
+       temp = BSCIF->BSCIF_RC1MCR;\r
+       BSCIF->BSCIF_UNLOCK = BSCIF_UNLOCK_KEY(0xAAu)\r
+               | BSCIF_UNLOCK_ADDR((uint32_t)&BSCIF->BSCIF_RC1MCR - (uint32_t)BSCIF);\r
+       BSCIF->BSCIF_RC1MCR = temp | BSCIF_RC1MCR_CLKOE;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_disable_rc1m(void)\r
+{\r
+       irqflags_t flags;\r
+       uint32_t temp;\r
+\r
+       flags = cpu_irq_save();\r
+       temp = BSCIF->BSCIF_RC1MCR;\r
+       temp &= ~BSCIF_RC1MCR_CLKOE;\r
+       BSCIF->BSCIF_UNLOCK = BSCIF_UNLOCK_KEY(0xAAu)\r
+               | BSCIF_UNLOCK_ADDR((uint32_t)&BSCIF->BSCIF_RC1MCR - (uint32_t)BSCIF);\r
+       BSCIF->BSCIF_RC1MCR = temp;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_enable_rc80m(void)\r
+{\r
+       irqflags_t flags;\r
+       uint32_t temp;\r
+\r
+       flags = cpu_irq_save();\r
+       temp = SCIF->SCIF_RC80MCR;\r
+       SCIF->SCIF_UNLOCK = SCIF_UNLOCK_KEY(0xAAu)\r
+               | SCIF_UNLOCK_ADDR((uint32_t)&SCIF->SCIF_RC80MCR - (uint32_t)SCIF);\r
+       SCIF->SCIF_RC80MCR = temp | SCIF_RC80MCR_EN;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_disable_rc80m(void)\r
+{\r
+       irqflags_t flags;\r
+       uint32_t temp;\r
+\r
+       flags = cpu_irq_save();\r
+       temp = SCIF->SCIF_RC80MCR;\r
+       temp &= ~SCIF_RC80MCR_EN ;\r
+       SCIF->SCIF_UNLOCK = SCIF_UNLOCK_KEY(0xAAu)\r
+               | SCIF_UNLOCK_ADDR((uint32_t)&SCIF->SCIF_RC80MCR - (uint32_t)SCIF);\r
+       SCIF->SCIF_RC80MCR = temp;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_enable_rcfast(void)\r
+{\r
+       irqflags_t flags;\r
+       uint32_t temp;\r
+\r
+       flags = cpu_irq_save();\r
+       // Let FCD and calibration value by default\r
+       temp = SCIF->SCIF_RCFASTCFG;\r
+       // Clear previous FRANGE value\r
+       temp &= ~SCIF_RCFASTCFG_FRANGE_Msk;\r
+\r
+       SCIF->SCIF_UNLOCK = SCIF_UNLOCK_KEY(0xAAu)\r
+               | SCIF_UNLOCK_ADDR((uint32_t)&SCIF->SCIF_RCFASTCFG - (uint32_t)SCIF);\r
+       SCIF->SCIF_RCFASTCFG = temp | SCIF_RCFASTCFG_EN\r
+               | SCIF_RCFASTCFG_FRANGE(CONFIG_RCFAST_FRANGE);\r
+       cpu_irq_restore(flags);\r
+}\r
+\r
+void osc_priv_disable_rcfast(void)\r
+{\r
+       irqflags_t flags;\r
+       uint32_t temp;\r
+       flags = cpu_irq_save();\r
+       // Let FCD and calibration value by default\r
+       temp = SCIF->SCIF_RCFASTCFG;\r
+       // Clear previous FRANGE value\r
+       temp &= ~SCIF_RCFASTCFG_FRANGE_Msk;\r
+       // Disalbe RCFAST\r
+       temp &= ~SCIF_RCFASTCFG_EN;\r
+       SCIF->SCIF_UNLOCK = SCIF_UNLOCK_KEY(0xAAu)\r
+               | SCIF_UNLOCK_ADDR((uint32_t)&SCIF->SCIF_RCFASTCFG - (uint32_t)SCIF);\r
+       SCIF->SCIF_RCFASTCFG = temp;\r
+       cpu_irq_restore(flags);\r
+}\r
+\r