Browse Source
Basic memory map and system control. Originally tracked via: https://github.com/libopencm3/libopencm3/pull/946pull/959/merge
Dmitry Rezvanov
6 years ago
committed by
Karl Palsson
9 changed files with 2004 additions and 1 deletions
@ -0,0 +1,35 @@ |
|||
/** @mainpage libopencm3 MSP432E4
|
|||
|
|||
@version 1.0.0 |
|||
|
|||
@date 29 July 2018 |
|||
|
|||
API documentation for Texas Instruments MSP432E4xx Cortex M4F series. |
|||
|
|||
LGPL License Terms @ref lgpl_license |
|||
*/ |
|||
|
|||
/** @defgroup peripheral_apis Peripheral APIs
|
|||
* APIs for device peripherals |
|||
*/ |
|||
|
|||
/** @defgroup MSP432E4xx MSP432E4xx
|
|||
Libraries for Texas Instruments MSP432E4xx series. |
|||
|
|||
@version 1.0.0 |
|||
|
|||
@date 29 July 2018 |
|||
|
|||
LGPL License Terms @ref lgpl_license |
|||
*/ |
|||
|
|||
/** @defgroup MSP432E4xx_defines MSP432E4xx Defines
|
|||
* |
|||
@brief Defined Constants and Types for the MSP432E4xx series. |
|||
|
|||
@version 1.0.0 |
|||
|
|||
@date 29 July 2018 |
|||
|
|||
LGPL License Terms @ref lgpl_license |
|||
*/ |
@ -0,0 +1,102 @@ |
|||
{ |
|||
"irqs": [ |
|||
"gpioa", |
|||
"gpiob", |
|||
"gpioc", |
|||
"gpiod", |
|||
"gpioe", |
|||
"uart0", |
|||
"uart1", |
|||
"ssi0", |
|||
"i2c0", |
|||
"pwm0_fault", |
|||
"pwm0_0", |
|||
"pwm0_1", |
|||
"pwm0_2", |
|||
"qei0", |
|||
"adc0ss0", |
|||
"adc0ss1", |
|||
"adc0ss2", |
|||
"adc0ss3", |
|||
"watchdog0", |
|||
"timer0a", |
|||
"timer0b", |
|||
"timer1a", |
|||
"timer1b", |
|||
"timer2a", |
|||
"timer2b", |
|||
"comp0", |
|||
"comp1", |
|||
"comp2", |
|||
"sysctl", |
|||
"flash_ctrl", |
|||
"gpiof", |
|||
"gpiog", |
|||
"gpioh", |
|||
"uart2", |
|||
"ssi1", |
|||
"timer3a", |
|||
"timer3b", |
|||
"i2c1", |
|||
"can0", |
|||
"can1", |
|||
"emac0", |
|||
"hib", |
|||
"usb0", |
|||
"pwm0_3", |
|||
"udma", |
|||
"udmaerr", |
|||
"adc1ss0", |
|||
"adc1ss1", |
|||
"adc1ss2", |
|||
"adc1ss3", |
|||
"epi0", |
|||
"gpioj", |
|||
"gpiok", |
|||
"gpiol", |
|||
"ssi2", |
|||
"ssi3", |
|||
"uart3", |
|||
"uart4", |
|||
"uart5", |
|||
"uart6", |
|||
"uart7", |
|||
"i2c2", |
|||
"i2c3", |
|||
"timer4a", |
|||
"timer4b", |
|||
"timer5a", |
|||
"timer5b", |
|||
"sysexc", |
|||
"i2c4", |
|||
"i2c5", |
|||
"gpiom", |
|||
"gpion", |
|||
"gpiop0", |
|||
"gpiop1", |
|||
"gpiop3", |
|||
"gpiop4", |
|||
"gpiop5", |
|||
"gpiop6", |
|||
"gpiop7", |
|||
"gpioq0", |
|||
"gpioq1", |
|||
"gpioq2", |
|||
"gpioq3", |
|||
"gpioq4", |
|||
"gpioq5", |
|||
"gpioq6", |
|||
"gpioq7", |
|||
"timer6a", |
|||
"timer6b", |
|||
"timer7a", |
|||
"timer7b", |
|||
"i2c6", |
|||
"i2c7", |
|||
"i2c8", |
|||
"i2c9" |
|||
], |
|||
"partname_humanreadable": "MSP432 E4 series", |
|||
"partname_doxygen": "MSP432E4", |
|||
"includeguard": "LIBOPENCM3_MSP432_E4_NVIC_H" |
|||
} |
@ -0,0 +1,174 @@ |
|||
/** @defgroup msp432e4_memorymap MSP432E4xx Memory Map
|
|||
* |
|||
* @ingroup MSP432E4xx_defines |
|||
* |
|||
* @brief Memory map for the MSP432E4xx devices |
|||
* |
|||
* @version 1.0.0 |
|||
* |
|||
* @date 22 July 2018 |
|||
* |
|||
* LGPL License Terms @ref lgpl_license |
|||
*/ |
|||
|
|||
/*
|
|||
* This file is part of the libopencm3 project. |
|||
* |
|||
* Copyright (C) 2011 Gareth McMullin <gareth@blacksphere.co.nz> |
|||
* Copyright (C) 2018 Dmitry Rezvanov <dmitry.rezvanov@yandex.ru> |
|||
* |
|||
* 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 MSP432E4_MEMORYMAP_H |
|||
#define MSP432E4_MEMORYMAP_H |
|||
|
|||
#include <libopencm3/cm3/common.h> |
|||
|
|||
/* --- MSP432E4xx specific peripheral definitions --------------------------- */ |
|||
|
|||
/** System Control Base Address */ |
|||
#define SYSCTL_BASE (0x400FE000U) |
|||
|
|||
/** Hibernation Module Base Address */ |
|||
#define HIB_BASE (0x400FC000U) |
|||
|
|||
/** Flash Controller Base Address */ |
|||
#define FLASH_CTRL_BASE (0x400FD000U) |
|||
|
|||
/** EEPROM Controller Base Address */ |
|||
#define EEPROM_BASE (0x400AF000U) |
|||
|
|||
/** Micro Direct Memory Access Base Address */ |
|||
#define DMA_BASE (0x400FF000U) |
|||
|
|||
/** Advance Encryption Standard Accelerator Base Address */ |
|||
#define AES_BASE (0x44036000U) |
|||
|
|||
/** Analog-to-Digital Converter Base Address */ |
|||
#define ADC0_BASE (0x40038000U) |
|||
#define ADC1_BASE (0x40039000U) |
|||
|
|||
/** Controller Area Network Base Address */ |
|||
#define CAN0_BASE (0x40040000U) |
|||
#define CAN1_BASE (0x40041000U) |
|||
|
|||
/** Analog Comparator Base Address */ |
|||
#define ACMP_BASE (0x4003C000U) |
|||
|
|||
/** Cyclical Redundancy Check Base Address */ |
|||
#define CRC_BASE (0x44030000U) |
|||
|
|||
/** Data Encryption Standard Accelerator Base Address */ |
|||
#define DES_BASE (0x44038000U) |
|||
|
|||
/** Ethernet Controller Base Address */ |
|||
#define EMAC_BASE (0x400EC000U) |
|||
|
|||
/** External Peripheral Interface Base Address */ |
|||
#define EPI0_BASE (0x400D0000U) |
|||
|
|||
/** General-Purpose Input/Outputs Base Address */ |
|||
#define GPIOA_APB_BASE (0x40004000U) |
|||
#define GPIOB_APB_BASE (0x40005000U) |
|||
#define GPIOC_APB_BASE (0x40006000U) |
|||
#define GPIOD_APB_BASE (0x40007000U) |
|||
#define GPIOE_APB_BASE (0x40024000U) |
|||
#define GPIOF_APB_BASE (0x40025000U) |
|||
#define GPIOG_APB_BASE (0x40026000U) |
|||
#define GPIOH_APB_BASE (0x40027000U) |
|||
#define GPIOJ_APB_BASE (0x4003D000U) |
|||
|
|||
/** General-Purpose Input/Outputs (AHB) Base Address */ |
|||
#define GPIOA_BASE (0x40058000U) |
|||
#define GPIOB_BASE (0x40059000U) |
|||
#define GPIOC_BASE (0x4005A000U) |
|||
#define GPIOD_BASE (0x4005B000U) |
|||
#define GPIOE_BASE (0x4005C000U) |
|||
#define GPIOF_BASE (0x4005D000U) |
|||
#define GPIOG_BASE (0x4005E000U) |
|||
#define GPIOH_BASE (0x4005F000U) |
|||
#define GPIOJ_BASE (0x40060000U) |
|||
#define GPIOK_BASE (0x40061000U) |
|||
#define GPIOL_BASE (0x40062000U) |
|||
#define GPIOM_BASE (0x40063000U) |
|||
#define GPION_BASE (0x40064000U) |
|||
#define GPIOP_BASE (0x40065000U) |
|||
#define GPIOQ_BASE (0x40066000U) |
|||
|
|||
/** General-Purpose Timers Base Address */ |
|||
#define TIM0_BASE (0x40030000U) |
|||
#define TIM1_BASE (0x40031000U) |
|||
#define TIM2_BASE (0x40032000U) |
|||
#define TIM3_BASE (0x40033000U) |
|||
#define TIM4_BASE (0x40034000U) |
|||
#define TIM5_BASE (0x40035000U) |
|||
#define TIM6_BASE (0x400E0000U) |
|||
#define TIM7_BASE (0x400E1000U) |
|||
|
|||
/** Inter-Integrated Circuit Base Address */ |
|||
#define I2C0_BASE (0x40020000U) |
|||
#define I2C1_BASE (0x40021000U) |
|||
#define I2C2_BASE (0x40022000U) |
|||
#define I2C3_BASE (0x40023000U) |
|||
#define I2C4_BASE (0x400C0000U) |
|||
#define I2C5_BASE (0x400C1000U) |
|||
#define I2C6_BASE (0x400C2000U) |
|||
#define I2C7_BASE (0x400C3000U) |
|||
#define I2C8_BASE (0x400B8000U) |
|||
#define I2C9_BASE (0x400B9000U) |
|||
|
|||
/** LCD Controller Base Address */ |
|||
#define LCD_BASE (0x44050000U) |
|||
|
|||
/** Pulse Width Modulator Base Address */ |
|||
#define PWM0_BASE (0x40028000U) |
|||
|
|||
/** 1-Wire Master Module Base Address */ |
|||
#define ONEWIRE_BASE (0x400B6000U) |
|||
|
|||
/** Quad Synchronous Serial Interface Base Address */ |
|||
#define SSI0_BASE (0x40008000U) |
|||
#define SSI1_BASE (0x40009000U) |
|||
#define SSI2_BASE (0x4000A000U) |
|||
#define SSI3_BASE (0x4000B000U) |
|||
|
|||
/** Quadrature Encoder Interface Base Address */ |
|||
#define QEI0_BASE (0x4002C000U) |
|||
|
|||
/** SHA/MD5 Accelerator Base Address */ |
|||
#define SHA_BASE (0x44034000U) |
|||
|
|||
/** Universal Asynchronous Receiver/Transmitter Base Address */ |
|||
#define UART0_BASE (0x4000C000U) |
|||
#define UART1_BASE (0x4000D000U) |
|||
#define UART2_BASE (0x4000E000U) |
|||
#define UART3_BASE (0x4000F000U) |
|||
#define UART4_BASE (0x40010000U) |
|||
#define UART5_BASE (0x40011000U) |
|||
#define UART6_BASE (0x40012000U) |
|||
#define UART7_BASE (0x40013000U) |
|||
|
|||
/** Universal Serial Bus Controller Base Address */ |
|||
#define USB_BASE (0x40050000U) |
|||
|
|||
/** Watchdog Timers Base Address */ |
|||
#define WDT0_BASE (0x40000000U) |
|||
#define WDT1_BASE (0x40001000U) |
|||
|
|||
#endif /* MSP432E4_MEMORYMAP_H */ |
|||
|
|||
/**@}*/ |
File diff suppressed because it is too large
@ -0,0 +1,47 @@ |
|||
##
|
|||
## This file is part of the libopencm3 project.
|
|||
##
|
|||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
|||
## Copyright (C) 2013 Alexandru Gagniuc <mr.nuke.me@gmail.com>
|
|||
## Copyright (C) 2018 Dmitry Rezvanov <dmitry.rezvanov@yandex.ru>
|
|||
##
|
|||
## 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/>.
|
|||
##
|
|||
|
|||
LIBNAME = libopencm3_msp432e4 |
|||
SRCLIBDIR ?= ../.. |
|||
|
|||
FP_FLAGS ?= -mfloat-abi=hard -mfpu=fpv4-sp-d16 |
|||
PREFIX ?= arm-none-eabi |
|||
|
|||
CC = $(PREFIX)-gcc |
|||
AR = $(PREFIX)-ar |
|||
TGT_CFLAGS = -Os \
|
|||
-Wall -Wextra -Wimplicit-function-declaration \
|
|||
-Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes \
|
|||
-Wundef -Wshadow \
|
|||
-I../../../include -fno-common \
|
|||
-mcpu=cortex-m4 -mthumb $(FP_FLAGS) \
|
|||
-Wstrict-prototypes \
|
|||
-ffunction-sections -fdata-sections -MD -DMSP432E4 |
|||
TGT_CFLAGS += $(DEBUG_FLAGS) |
|||
TGT_CFLAGS += $(STANDARD_FLAGS) |
|||
# ARFLAGS = rcsv
|
|||
ARFLAGS = rcs |
|||
|
|||
OBJS = systemcontrol.o |
|||
|
|||
VPATH += ../:../../cm3:../common |
|||
|
|||
include ../../Makefile.include |
@ -0,0 +1,130 @@ |
|||
/** @defgroup systemcontrol_file System Control
|
|||
* |
|||
* @ingroup MSP432E4xx |
|||
* |
|||
* @brief libopencm3 MSP432E4xx System Control |
|||
* |
|||
* @version 1.0.0 |
|||
* |
|||
* @date 22 July 2018 |
|||
* |
|||
* LGPL License Terms @ref lgpl_license |
|||
*/ |
|||
|
|||
/*
|
|||
* This file is part of the libopencm3 project. |
|||
* |
|||
* Copyright (C) 2012 Alexandru Gagniuc <mr.nuke.me@gmail.com> |
|||
* Copyright (C) 2018 Dmitry Rezvanov <dmitry.rezvanov@yandex.ru> |
|||
* |
|||
* 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/msp432/e4/systemcontrol.h> |
|||
#include <stdbool.h> |
|||
|
|||
#define _SYSCTL_REG(base, i) MMIO32((base) + ((i) >> 5)) |
|||
#define _SYSCTL_BIT(i) (1 << ((i) & 0x1f)) |
|||
|
|||
/*----------------------------------------------------------------------------*/ |
|||
/** @brief System Control Enable Peripheral Clock
|
|||
* |
|||
* @param[in] clock_mode ::msp432_clock_mode Clock mode |
|||
* @param[in] periph ::msp432_periph Peripheral block |
|||
*/ |
|||
void sysctl_periph_clock_enable(enum msp432_clock_mode clock_mode, |
|||
enum msp432_periph periph) |
|||
{ |
|||
_SYSCTL_REG(SYSCTL_BASE + clock_mode, periph) |= _SYSCTL_BIT(periph); |
|||
} |
|||
|
|||
/*----------------------------------------------------------------------------*/ |
|||
/** @brief System Control Disable Peripheral Clock
|
|||
* |
|||
* @param[in] clock_mode ::msp432_clock_mode Clock mode |
|||
* @param[in] periph ::msp432_periph Peripheral block |
|||
*/ |
|||
void sysctl_periph_clock_disable(enum msp432_clock_mode clock_mode, |
|||
enum msp432_periph periph) |
|||
{ |
|||
_SYSCTL_REG(SYSCTL_BASE + clock_mode, periph) &= ~_SYSCTL_BIT(periph); |
|||
} |
|||
|
|||
/*----------------------------------------------------------------------------*/ |
|||
/** @brief System Control Peripheral Software Reset
|
|||
* |
|||
* @param[in] periph ::msp432_periph Peripheral block |
|||
*/ |
|||
void sysctl_periph_reset(enum msp432_periph periph) |
|||
{ |
|||
_SYSCTL_REG((uint32_t)&SYSCTL_SRWD, periph) |= _SYSCTL_BIT(periph); |
|||
} |
|||
|
|||
/*----------------------------------------------------------------------------*/ |
|||
/** @brief System Control Peripheral Clear Software Reset
|
|||
* |
|||
* @param[in] periph ::msp432_periph Peripheral block |
|||
*/ |
|||
void sysctl_periph_clear_reset(enum msp432_periph periph) |
|||
{ |
|||
_SYSCTL_REG((uint32_t)&SYSCTL_SRWD, periph) &= ~_SYSCTL_BIT(periph); |
|||
} |
|||
|
|||
/*----------------------------------------------------------------------------*/ |
|||
/** @brief System Control Peripheral Is Present
|
|||
* |
|||
* @param[in] periph ::msp432_periph Peripheral block |
|||
*/ |
|||
bool sysctl_periph_is_present(enum msp432_periph periph) |
|||
{ |
|||
uint32_t reg32 = _SYSCTL_REG((uint32_t)&SYSCTL_PPWD, periph); |
|||
uint32_t mask = _SYSCTL_BIT(periph); |
|||
|
|||
return ((reg32 & mask) != 0); |
|||
} |
|||
|
|||
/*----------------------------------------------------------------------------*/ |
|||
/** @brief System Control Peripheral Is Ready
|
|||
* |
|||
* @param[in] periph ::msp432_periph Peripheral block |
|||
*/ |
|||
bool sysctl_periph_is_ready(enum msp432_periph periph) |
|||
{ |
|||
uint32_t reg32 = _SYSCTL_REG((uint32_t)&SYSCTL_PRWD, periph); |
|||
uint32_t mask = _SYSCTL_BIT(periph); |
|||
|
|||
return ((reg32 & mask) != 0); |
|||
} |
|||
|
|||
/*----------------------------------------------------------------------------*/ |
|||
/** @brief System Control Peripheral Set Power State
|
|||
* |
|||
* @param[in] power_mode ::msp432_power_mode Power mode |
|||
* @param[in] periph ::msp432_periph Peripheral block |
|||
* |
|||
* @note If the module is in run, sleep or deep-sleep mode - the module |
|||
* is powered and receives a clock regardless of the value of power mode. |
|||
*/ |
|||
void sysctl_periph_set_power_state(enum msp432_power_mode power_mode, |
|||
enum msp432_periph periph) |
|||
{ |
|||
if(power_mode == POWER_ENABLE) { |
|||
_SYSCTL_REG((uint32_t)&SYSCTL_PCWD, periph) |= _SYSCTL_BIT(periph); |
|||
} else { |
|||
_SYSCTL_REG((uint32_t)&SYSCTL_PCWD, periph) &= ~_SYSCTL_BIT(periph); |
|||
} |
|||
} |
|||
|
|||
#undef _SYSCTL_REG |
|||
#undef _SYSCTL_BIT |
Loading…
Reference in new issue