]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/port.c
Starting point for the SAMD20 demo.
[freertos] / FreeRTOS / Demo / CORTEX_M0+_Atmel_SAMD20_XPlained / RTOSDemo / src / ASF / sam0 / drivers / port / port.c
1 /**\r
2  * \file\r
3  *\r
4  * \brief SAM D20 GPIO Port Driver\r
5  *\r
6  * Copyright (C) 2012-2013 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 <port.h>\r
44 \r
45 /**\r
46  *  \brief Writes a Port pin configuration to the hardware module.\r
47  *\r
48  *  Writes out a given configuration of a Port pin configuration to the hardware\r
49  *  module.\r
50  *\r
51  *  \note If the pin direction is set as an output, the pull-up/pull-down input\r
52  *        configuration setting is ignored.\r
53  *\r
54  *  \param[in] gpio_pin  Index of the GPIO pin to configure.\r
55  *  \param[in] config    Configuration settings for the pin.\r
56  */\r
57 void port_pin_set_config(\r
58                 const uint8_t gpio_pin,\r
59                 const struct port_config *const config)\r
60 {\r
61         /* Sanity check arguments */\r
62         Assert(config);\r
63 \r
64         struct system_pinmux_config pinmux_config;\r
65         system_pinmux_get_config_defaults(&pinmux_config);\r
66 \r
67         pinmux_config.mux_position = SYSTEM_PINMUX_GPIO;\r
68         pinmux_config.direction    = (enum system_pinmux_pin_dir)config->direction;\r
69         pinmux_config.input_pull   = (enum system_pinmux_pin_pull)config->input_pull;\r
70 \r
71         system_pinmux_pin_set_config(gpio_pin, &pinmux_config);\r
72 }\r
73 \r
74 /**\r
75  *  \brief Writes a Port group configuration group to the hardware module.\r
76  *\r
77  *  Writes out a given configuration of a Port group configuration to the\r
78  *  hardware module.\r
79  *\r
80  *  \note If the pin direction is set as an output, the pull-up/pull-down input\r
81  *        configuration setting is ignored.\r
82  *\r
83  *  \param[out] port    Base of the PORT module to write to.\r
84  *  \param[in]  mask    Mask of the port pin(s) to configure.\r
85  *  \param[in]  config  Configuration settings for the pin group.\r
86  */\r
87 void port_group_set_config(\r
88                 PortGroup *const port,\r
89                 const uint32_t mask,\r
90                 const struct port_config *const config)\r
91 {\r
92         /* Sanity check arguments */\r
93         Assert(port);\r
94         Assert(config);\r
95 \r
96         struct system_pinmux_config pinmux_config;\r
97         system_pinmux_get_config_defaults(&pinmux_config);\r
98 \r
99         pinmux_config.mux_position = SYSTEM_PINMUX_GPIO;\r
100         pinmux_config.direction    = (enum system_pinmux_pin_dir)config->direction;\r
101         pinmux_config.input_pull   = (enum system_pinmux_pin_pull)config->input_pull;\r
102 \r
103         system_pinmux_group_set_config(port, mask, &pinmux_config);\r
104 }\r