forked from kuldeepdhaka/libopencm3
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add I/O mux controller which is required to mux pins according to their used function. For all pads, the alternative function 0 is GPIO. For different pin mux function refer to the reference manual.
- Loading branch information
Showing
4 changed files
with
321 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,256 @@ | ||
/** @defgroup VF6xx_iomuxc_defines IO MUX Controller Defines | ||
* | ||
* @brief <b>Defined Constants and Types for the VF6xx IO MUX Controller</b> | ||
* | ||
* @ingroup VF6xx_defines | ||
* | ||
* @version 1.0.0 | ||
* | ||
* @author @htmlonly © @endhtmlonly 2014 | ||
* Stefan Agner <[email protected]> | ||
* | ||
* @date 03 July 2014 | ||
* | ||
* LGPL License Terms @ref lgpl_license | ||
* */ | ||
/* | ||
* This file is part of the libopencm3 project. | ||
* | ||
* Copyright (C) 2014 Stefan Agner <[email protected]> | ||
* | ||
* This library is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This library is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU Lesser General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public License | ||
* along with this library. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#ifndef LIBOPENCM3_VF6XX_IOMUXC_H | ||
#define LIBOPENCM3_VF6XX_IOMUXC_H | ||
|
||
#include <libopencm3/cm3/common.h> | ||
#include <libopencm3/vf6xx/memorymap.h> | ||
|
||
/* --- Convenience macros -------------------------------------------------- */ | ||
|
||
/****************************************************************************/ | ||
/** @defgroup iomuxc_reg IO MUX Controller register | ||
@ingroup VF6xx_iomuxc_defines | ||
@{*/ | ||
#define IOMUXC(pad) MMIO32(IOMUXC_BASE + (0x4 * pad)) | ||
|
||
#define IOMUXC_PAD(mode, speed, dse, pus, flags) \ | ||
(IOMUXC_##mode) << IOMUXC_MUX_MODE_SHIFT | \ | ||
(IOMUXC_##speed) << IOMUXC_SPEED_SHIFT | \ | ||
(IOMUXC_##dse) << IOMUXC_DSE_SHIFT | \ | ||
(IOMUXC_##pus) << IOMUXC_PUS_SHIFT | \ | ||
(flags) | ||
|
||
|
||
/* --- GPIO registers ------------------------------------------------------ */ | ||
|
||
#define IOMUXC_MUX_MODE_SHIFT 20 | ||
#define IOMUXC_MUX_MODE_MASK (0x7 << 20) | ||
#define IOMUXC_MUX_MODE_ALT0 0x0 | ||
#define IOMUXC_MUX_MODE_ALT1 0x1 | ||
#define IOMUXC_MUX_MODE_ALT2 0x2 | ||
#define IOMUXC_MUX_MODE_ALT3 0x3 | ||
#define IOMUXC_MUX_MODE_ALT4 0x4 | ||
#define IOMUXC_MUX_MODE_ALT5 0x5 | ||
#define IOMUXC_MUX_MODE_ALT6 0x6 | ||
#define IOMUXC_MUX_MODE_ALT7 0x7 | ||
#define IOMUXC_SPEED_SHIFT 12 | ||
#define IOMUXC_SPEED_MASK (0x3 << 12) | ||
#define IOMUXC_SPEED_LOW 0x0 | ||
#define IOMUXC_SPEED_MEDIUM 0x1 | ||
#define IOMUXC_SPEED_HIGH 0x3 | ||
#define IOMUXC_SRE (0x1 << 11) | ||
#define IOMUXC_ODE (0x1 << 10) | ||
#define IOMUXC_HYS (0x1 << 9) | ||
#define IOMUXC_DSE_SHIFT 6 | ||
#define IOMUXC_DSE_MASK (0x7 << 6) | ||
#define IOMUXC_DSE_OFF 0x0 | ||
#define IOMUXC_DSE_150OHM 0x1 | ||
#define IOMUXC_DSE_75OHM 0x2 | ||
#define IOMUXC_DSE_50OHM 0x3 | ||
#define IOMUXC_DSE_37OHM 0x4 | ||
#define IOMUXC_DSE_30OHM 0x5 | ||
#define IOMUXC_DSE_25OHM 0x6 | ||
#define IOMUXC_DSE_20OHM 0x7 | ||
#define IOMUXC_PUS_SHIFT 4 | ||
#define IOMUXC_PUS_MASK (0x3 << 4) | ||
#define IOMUXC_PUS_PD_100KOHM 0x0 | ||
#define IOMUXC_PUS_PU_47KOHM 0x1 | ||
#define IOMUXC_PUS_PU_100KOHM 0x2 | ||
#define IOMUXC_PUS_PU_22KOHM 0x3 | ||
#define IOMUXC_PKE (0x1 << 3) | ||
#define IOMUXC_PUE (0x1 << 2) | ||
#define IOMUXC_OBE (0x1 << 1) | ||
#define IOMUXC_IBE (0x1 << 0) | ||
|
||
|
||
/* --- Type definitions ---------------------------------------------------- */ | ||
/*---------------------------------------------------------------------------*/ | ||
/** @brief IO-MUX Pads | ||
Pads available by the IO-MUX controller | ||
*/ | ||
|
||
enum vf6xx_pad { | ||
PTA6, | ||
PTA8, | ||
PTA9, | ||
PTA10, | ||
PTA11, | ||
PTA12, | ||
PTA16, | ||
PTA17, | ||
PTA18, | ||
PTA19, | ||
PTA20, | ||
PTA21, | ||
PTA22, | ||
PTA23, | ||
PTA24, | ||
PTA25, | ||
PTA26, | ||
PTA27, | ||
PTA28, | ||
PTA29, | ||
PTA30, | ||
PTA31, | ||
PTB0, | ||
PTB1, | ||
PTB2, | ||
PTB3, | ||
PTB4, | ||
PTB5, | ||
PTB6, | ||
PTB7, | ||
PTB8, | ||
PTB9, | ||
PTB10, | ||
PTB11, | ||
PTB12, | ||
PTB13, | ||
PTB14, | ||
PTB15, | ||
PTB16, | ||
PTB17, | ||
PTB18, | ||
PTB19, | ||
PTB20, | ||
PTB21, | ||
PTB22, | ||
PTC0, | ||
PTC1, | ||
PTC2, | ||
PTC3, | ||
PTC4, | ||
PTC5, | ||
PTC6, | ||
PTC7, | ||
PTC8, | ||
PTC9, | ||
PTC10, | ||
PTC11, | ||
PTC12, | ||
PTC13, | ||
PTC14, | ||
PTC15, | ||
PTC16, | ||
PTC17, | ||
PTD31, | ||
PTD30, | ||
PTD29, | ||
PTD28, | ||
PTD27, | ||
PTD26, | ||
PTD25, | ||
PTD24, | ||
PTD23, | ||
PTD22, | ||
PTD21, | ||
PTD20, | ||
PTD19, | ||
PTD18, | ||
PTD17, | ||
PTD16, | ||
PTD0, | ||
PTD1, | ||
PTD2, | ||
PTD3, | ||
PTD4, | ||
PTD5, | ||
PTD6, | ||
PTD7, | ||
PTD8, | ||
PTD9, | ||
PTD10, | ||
PTD11, | ||
PTD12, | ||
PTD13, | ||
PTB23, | ||
PTB24, | ||
PTB25, | ||
PTB26, | ||
PTB27, | ||
PTB28, | ||
PTC26, | ||
PTC27, | ||
PTC28, | ||
PTC29, | ||
PTC30, | ||
PTC31, | ||
PTE0, | ||
PTE1, | ||
PTE2, | ||
PTE3, | ||
PTE4, | ||
PTE5, | ||
PTE6, | ||
PTE7, | ||
PTE8, | ||
PTE9, | ||
PTE10, | ||
PTE11, | ||
PTE12, | ||
PTE13, | ||
PTE14, | ||
PTE15, | ||
PTE16, | ||
PTE17, | ||
PTE18, | ||
PTE19, | ||
PTE20, | ||
PTE21, | ||
PTE22, | ||
PTE23, | ||
PTE24, | ||
PTE25, | ||
PTE26, | ||
PTE27, | ||
PTE28, | ||
PTA7, | ||
}; | ||
|
||
|
||
/* --- Function prototypes ------------------------------------------------- */ | ||
|
||
#include <libopencm3/cm3/common.h> | ||
|
||
BEGIN_DECLS | ||
|
||
void iomuxc_mux(enum vf6xx_pad pad, uint32_t muxc); | ||
|
||
END_DECLS | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/** @defgroup VF6xx_iomuxc IOMUX-Control | ||
* | ||
* @ingroup VF6xx | ||
* | ||
* @section vf6xx_gpio_api_ex GPIO API. | ||
* | ||
* @brief <b>VF6xx IO Pad MUX Controller</b> | ||
* | ||
* @author @htmlonly © @endhtmlonly 2014 Stefan Agner <[email protected]> | ||
* | ||
* @date 07 July 2014 | ||
* | ||
* This library supports the GPIO module in the VF6xx SoC of Freescale. | ||
* Access is provided by GPIO number according to the Pinmux list of the | ||
* Reference Manual, similar as GPIOs are available on Linux. | ||
* | ||
* LGPL License Terms @ref lgpl_license | ||
*/ | ||
/* | ||
* This file is part of the libopencm3 project. | ||
* | ||
* Copyright (C) 2014 Stefan Agner <[email protected]> | ||
* | ||
* This library is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This library is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU Lesser General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public License | ||
* along with this library. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
/**@{*/ | ||
|
||
#include <libopencm3/vf6xx/iomuxc.h> | ||
#include <libopencm3/vf6xx/ccm.h> | ||
|
||
/*---------------------------------------------------------------------------*/ | ||
/** @brief Set GPIO | ||
Set GPIO by GPIO number according to MUX list | ||
@param[in] gpio unsigned 32 bit. GPIO number | ||
*/ | ||
|
||
void iomuxc_mux(enum vf6xx_pad pad, uint32_t muxc) | ||
{ | ||
IOMUXC(pad) = muxc; | ||
} | ||
|
||
/**@}*/ | ||
|