Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/api/pinmap.c@2:7aab896b1a3b, 2019-03-13 (annotated)
- Committer:
- kevman
- Date:
- Wed Mar 13 11:03:24 2019 +0000
- Revision:
- 2:7aab896b1a3b
- Parent:
- 0:38ceb79fef03
2019-03-13
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kevman | 0:38ceb79fef03 | 1 | /* mbed Microcontroller Library |
| kevman | 0:38ceb79fef03 | 2 | * Copyright (c) 2006-2013 ARM Limited |
| kevman | 0:38ceb79fef03 | 3 | * |
| kevman | 0:38ceb79fef03 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| kevman | 0:38ceb79fef03 | 5 | * you may not use this file except in compliance with the License. |
| kevman | 0:38ceb79fef03 | 6 | * You may obtain a copy of the License at |
| kevman | 0:38ceb79fef03 | 7 | * |
| kevman | 0:38ceb79fef03 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| kevman | 0:38ceb79fef03 | 9 | * |
| kevman | 0:38ceb79fef03 | 10 | * Unless required by applicable law or agreed to in writing, software |
| kevman | 0:38ceb79fef03 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| kevman | 0:38ceb79fef03 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| kevman | 0:38ceb79fef03 | 13 | * See the License for the specific language governing permissions and |
| kevman | 0:38ceb79fef03 | 14 | * limitations under the License. |
| kevman | 0:38ceb79fef03 | 15 | */ |
| kevman | 0:38ceb79fef03 | 16 | #include "mbed_assert.h" |
| kevman | 0:38ceb79fef03 | 17 | #include "pinmap.h" |
| kevman | 0:38ceb79fef03 | 18 | #include "mbed_error.h" |
| kevman | 0:38ceb79fef03 | 19 | #include "fsl_port.h" |
| kevman | 0:38ceb79fef03 | 20 | |
| kevman | 0:38ceb79fef03 | 21 | /* Array of PORT peripheral base address. */ |
| kevman | 0:38ceb79fef03 | 22 | static PORT_Type *const port_addrs[] = PORT_BASE_PTRS; |
| kevman | 0:38ceb79fef03 | 23 | |
| kevman | 0:38ceb79fef03 | 24 | void pin_function(PinName pin, int function) |
| kevman | 0:38ceb79fef03 | 25 | { |
| kevman | 0:38ceb79fef03 | 26 | MBED_ASSERT(pin != (PinName)NC); |
| kevman | 0:38ceb79fef03 | 27 | clock_ip_name_t port_clocks[] = PORT_CLOCKS; |
| kevman | 0:38ceb79fef03 | 28 | |
| kevman | 0:38ceb79fef03 | 29 | CLOCK_EnableClock(port_clocks[pin >> GPIO_PORT_SHIFT]); |
| kevman | 0:38ceb79fef03 | 30 | |
| kevman | 0:38ceb79fef03 | 31 | PORT_SetPinMux(port_addrs[pin >> GPIO_PORT_SHIFT], pin & 0xFF, (port_mux_t)function); |
| kevman | 0:38ceb79fef03 | 32 | } |
| kevman | 0:38ceb79fef03 | 33 | |
| kevman | 0:38ceb79fef03 | 34 | void pin_mode(PinName pin, PinMode mode) |
| kevman | 0:38ceb79fef03 | 35 | { |
| kevman | 0:38ceb79fef03 | 36 | MBED_ASSERT(pin != (PinName)NC); |
| kevman | 0:38ceb79fef03 | 37 | uint32_t instance = pin >> GPIO_PORT_SHIFT; |
| kevman | 0:38ceb79fef03 | 38 | uint32_t pinName = pin & 0xFF; |
| kevman | 0:38ceb79fef03 | 39 | PORT_Type *base = port_addrs[instance]; |
| kevman | 0:38ceb79fef03 | 40 | uint32_t reg = base->PCR[pinName]; |
| kevman | 0:38ceb79fef03 | 41 | |
| kevman | 0:38ceb79fef03 | 42 | switch (mode) { |
| kevman | 0:38ceb79fef03 | 43 | case PullNone: |
| kevman | 0:38ceb79fef03 | 44 | /* Write 0 to the PE, PS and ISF bits */ |
| kevman | 0:38ceb79fef03 | 45 | reg &= ~(PORT_PCR_PE_MASK | PORT_PCR_PS_MASK | PORT_PCR_ISF_MASK); |
| kevman | 0:38ceb79fef03 | 46 | break; |
| kevman | 0:38ceb79fef03 | 47 | case PullDown: |
| kevman | 0:38ceb79fef03 | 48 | /* Write 0 to PS and ISF bits and 1 to the PE bit to enable the pull configuration */ |
| kevman | 0:38ceb79fef03 | 49 | reg &= ~(PORT_PCR_PS_MASK | PORT_PCR_ISF_MASK); |
| kevman | 0:38ceb79fef03 | 50 | reg |= PORT_PCR_PE_MASK; |
| kevman | 0:38ceb79fef03 | 51 | break; |
| kevman | 0:38ceb79fef03 | 52 | case PullUp: |
| kevman | 0:38ceb79fef03 | 53 | /* Write 0 ISF bit, 1 to the PE & PS bits to enable the pull up configuration */ |
| kevman | 0:38ceb79fef03 | 54 | reg &= ~(PORT_PCR_ISF_MASK); |
| kevman | 0:38ceb79fef03 | 55 | reg |= (PORT_PCR_PE_MASK | PORT_PCR_PS_MASK); |
| kevman | 0:38ceb79fef03 | 56 | break; |
| kevman | 0:38ceb79fef03 | 57 | default: |
| kevman | 0:38ceb79fef03 | 58 | break; |
| kevman | 0:38ceb79fef03 | 59 | } |
| kevman | 0:38ceb79fef03 | 60 | |
| kevman | 0:38ceb79fef03 | 61 | base->PCR[pinName] = reg; |
| kevman | 0:38ceb79fef03 | 62 | } |