]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/asf/common/services/clock/sam4l/pll.c
Add SAM4L demo.
[freertos] / FreeRTOS / Demo / CORTEX_M4_ATSAM4L_Atmel_Studio / src / asf / common / services / clock / sam4l / pll.c
1 /**\r
2  * \file\r
3  *\r
4  * \brief Chip-specific PLL implementation\r
5  *\r
6  * Copyright (c) 2012 Atmel Corporation. All rights reserved.\r
7  *\r
8  * \asf_license_start\r
9  *\r
10  * \page License\r
11  *\r
12  * Redistribution and use in source and binary forms, with or without\r
13  * modification, are permitted provided that the following conditions are met:\r
14  *\r
15  * 1. Redistributions of source code must retain the above copyright notice,\r
16  *    this list of conditions and the following disclaimer.\r
17  *\r
18  * 2. Redistributions in binary form must reproduce the above copyright notice,\r
19  *    this list of conditions and the following disclaimer in the documentation\r
20  *    and/or other materials provided with the distribution.\r
21  *\r
22  * 3. The name of Atmel may not be used to endorse or promote products derived\r
23  *    from this software without specific prior written permission.\r
24  *\r
25  * 4. This software may only be redistributed and used in connection with an\r
26  *    Atmel microcontroller product.\r
27  *\r
28  * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
29  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
30  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
31  * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
32  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
36  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
37  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
38  * POSSIBILITY OF SUCH DAMAGE.\r
39  *\r
40  * \asf_license_stop\r
41  *\r
42  */\r
43 #include <compiler.h>\r
44 #include <pll.h>\r
45 \r
46 #define SCIF_UNLOCK_PLL_REG(pll_id) \\r
47         do { \\r
48                 SCIF->SCIF_UNLOCK = SCIF_UNLOCK_KEY(0xAAu)                     \\r
49                         | SCIF_UNLOCK_ADDR((uint32_t)&SCIF->SCIF_PLL[0].SCIF_PLL \\r
50                         + (4 * pll_id) - (uint32_t)SCIF);                      \\r
51         } while (0)\r
52 \r
53 void pll_config_write(const struct pll_config *cfg, uint32_t pll_id)\r
54 {\r
55         irqflags_t flags;\r
56 \r
57         Assert(pll_id < NR_PLLS);\r
58 \r
59         flags = cpu_irq_save();\r
60 \r
61         SCIF_UNLOCK_PLL_REG(pll_id);\r
62         SCIF->SCIF_PLL[pll_id].SCIF_PLL  = cfg->ctrl;\r
63         cpu_irq_restore(flags);\r
64 }\r
65 \r
66 void pll_enable(const struct pll_config *cfg, uint32_t pll_id)\r
67 {\r
68         irqflags_t flags;\r
69 \r
70         Assert(pll_id < NR_PLLS);\r
71 \r
72         flags = cpu_irq_save();\r
73         SCIF_UNLOCK_PLL_REG(pll_id);\r
74         SCIF->SCIF_PLL[pll_id].SCIF_PLL  = cfg->ctrl | SCIF_PLL_PLLEN;\r
75         cpu_irq_restore(flags);\r
76 }\r
77 \r
78 void pll_disable(uint32_t pll_id)\r
79 {\r
80         irqflags_t flags;\r
81 \r
82         Assert(pll_id < NR_PLLS);\r
83 \r
84         flags = cpu_irq_save();\r
85         SCIF_UNLOCK_PLL_REG(pll_id);\r
86         SCIF->SCIF_PLL[pll_id].SCIF_PLL  = 0;\r
87         cpu_irq_restore(flags);\r
88 }\r