blob: 52503a67808e739248f8520adead53fe73dafdd0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#ifndef __MCU_STM_MCU_H_
#define __MCU_STM_MCU_H_
#ifdef __cplusplus
extern "C" {
#endif
/*
* Note that not all processors have support for all ports.
*
* GPIO pin mapping
*
* The stm32 processors have 16 gpio pins per port. The encoding of IO pins
* to logical pins has the pattern
*
* pin = 0xA.PN
*
* where
* A .... AF of the pin, see data sheet
* . .... 0, reserved
* P .... Port number GPIOA=0, GPIOB=1, GPIOC=2, ....
* N .... Pin number within port
*
* A GPIO pin (general purpose IO) is a pin with the AF=0. For readability
* we provide macros for GPIO pin mappings and IO pins with enabled alternate
* function, called AFIO. There is no conceptual difference between them.
*/
/*
* Defines for naming GPIOs.
*/
#define MCU_GPIO_PORTA(pin) ((0 * 16) + (pin))
#define MCU_GPIO_PORTB(pin) ((1 * 16) + (pin))
#define MCU_GPIO_PORTC(pin) ((2 * 16) + (pin))
#define MCU_GPIO_PORTD(pin) ((3 * 16) + (pin))
#define MCU_GPIO_PORTE(pin) ((4 * 16) + (pin))
#define MCU_GPIO_PORTF(pin) ((5 * 16) + (pin))
#define MCU_GPIO_PORTG(pin) ((6 * 16) + (pin))
#define MCU_GPIO_PORTH(pin) ((7 * 16) + (pin))
#define MCU_GPIO_PORTI(pin) ((8 * 16) + (pin))
#define MCU_GPIO_PORTJ(pin) ((9 * 16) + (pin))
#define MCU_GPIO_PORTK(pin) ((10 * 16) + (pin))
/*
* Helper macros to extract components from a pin descriptor.
*/
#define MCU_GPIO_PIN_NUM(pin) (0x000F & pin)
#define MCU_GPIO_PIN_PORT(pin) (0x000F & (pin >> 4))
#define MCU_GPIO_PIN_PAD(pin) (0x00FF & pin)
/*
* Use this value for pins that should not be used.
*/
#define MCU_GPIO_PIN_NONE (0xFFFF)
/*
* Mapping of a GPIO pin to an alternate function.
*/
#define MCU_AFIO_GPIO(pin,af) (((0x0F & af) << 12) | (0x00FF & pin))
/*
* Mapping of alternate function pin descriptors.
*/
#define MCU_AFIO_PORTA(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTA(pin), af)
#define MCU_AFIO_PORTB(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTB(pin), af)
#define MCU_AFIO_PORTC(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTC(pin), af)
#define MCU_AFIO_PORTD(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTD(pin), af)
#define MCU_AFIO_PORTE(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTE(pin), af)
#define MCU_AFIO_PORTF(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTF(pin), af)
#define MCU_AFIO_PORTG(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTG(pin), af)
#define MCU_AFIO_PORTH(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTH(pin), af)
#define MCU_AFIO_PORTI(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTI(pin), af)
#define MCU_AFIO_PORTJ(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTJ(pin), af)
#define MCU_AFIO_PORTK(pin, af) MCU_AFIO_GPIO(MCU_GPIO_PORTK(pin), af)
/*
* Helper macros to extract components from a pin descriptor.
*/
#define MCU_AFIO_PIN_NUM(pin) MCU_GPIO_PIN_NUM(pin)
#define MCU_AFIO_PIN_PORT(pin) MCU_GPIO_PIN_PORT(pin)
#define MCU_AFIO_PIN_PAD(pin) MCU_GPIO_PIN_PAD(pin)
#define MCU_AFIO_PIN_AF(pin) (0x000F & (pin >> 12))
/*
* Use this value for pins that should not be used.
*/
#define MCU_AFIO_PIN_NONE (0xFFFF)
#ifdef __cplusplus
}
#endif
#endif /* __MCU_STM_MCU_H_ */