- fix F411 F334 systeminit when HSI used - portinout always read IDR regardless of port direction

Fork of mbed-src by mbed official

Committer:
Geremia
Date:
Sat Sep 27 11:16:28 2014 +0000
Revision:
332:e299ae530e63
Parent:
255:20b371a9491b
- fix F411 F334 systeminit when HSI used; - STMs PortInOut port.read() always read input data register (real external pin state) even if direction is output (same as other platforms)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 68:41613245dfd7 1 /* mbed Microcontroller Library
mbed_official 68:41613245dfd7 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 68:41613245dfd7 3 *
mbed_official 68:41613245dfd7 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 68:41613245dfd7 5 * you may not use this file except in compliance with the License.
mbed_official 68:41613245dfd7 6 * You may obtain a copy of the License at
mbed_official 68:41613245dfd7 7 *
mbed_official 68:41613245dfd7 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 68:41613245dfd7 9 *
mbed_official 68:41613245dfd7 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 68:41613245dfd7 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 68:41613245dfd7 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 68:41613245dfd7 13 * See the License for the specific language governing permissions and
mbed_official 68:41613245dfd7 14 * limitations under the License.
mbed_official 68:41613245dfd7 15 */
mbed_official 227:7bd0639b8911 16 #include "mbed_assert.h"
mbed_official 68:41613245dfd7 17 #include "pinmap.h"
mbed_official 68:41613245dfd7 18
mbed_official 68:41613245dfd7 19 void pin_function(PinName pin, int function) {
mbed_official 227:7bd0639b8911 20 MBED_ASSERT(pin != (PinName)NC);
mbed_official 68:41613245dfd7 21
mbed_official 68:41613245dfd7 22 uint32_t port_n = (uint32_t)pin >> PORT_SHIFT;
mbed_official 68:41613245dfd7 23 uint32_t pin_n = (uint32_t)(pin & 0x7C) >> 2;
mbed_official 68:41613245dfd7 24
mbed_official 68:41613245dfd7 25 SIM->SCGC5 |= 1 << (SIM_SCGC5_PORTA_SHIFT + port_n);
mbed_official 68:41613245dfd7 26 __IO uint32_t* pin_pcr = &(((PORT_Type *)(PORTA_BASE + 0x1000 * port_n)))->PCR[pin_n];
mbed_official 68:41613245dfd7 27
mbed_official 68:41613245dfd7 28 // pin mux bits: [10:8] -> 11100000000 = (0x700)
mbed_official 68:41613245dfd7 29 *pin_pcr = (*pin_pcr & ~0x700) | (function << 8);
mbed_official 68:41613245dfd7 30 }
mbed_official 68:41613245dfd7 31
mbed_official 68:41613245dfd7 32 void pin_mode(PinName pin, PinMode mode) {
mbed_official 227:7bd0639b8911 33 MBED_ASSERT(pin != (PinName)NC);
mbed_official 68:41613245dfd7 34 __IO uint32_t* pin_pcr = (__IO uint32_t*)(PORTA_BASE + pin);
mbed_official 68:41613245dfd7 35
mbed_official 68:41613245dfd7 36 // pin pullup bits: [1:0] -> 11 = (0x3)
mbed_official 68:41613245dfd7 37 *pin_pcr = (*pin_pcr & ~0x3) | mode;
mbed_official 68:41613245dfd7 38 }