lzbp li / mbed-stm32l0l1-src-1

Fork of mbed-stm32l0/l1-src by lzbp li

Committer:
emilmont
Date:
Fri Jun 14 17:49:17 2013 +0100
Revision:
10:3bc89ef62ce7
Unify mbed library sources

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 10:3bc89ef62ce7 1 /* mbed Microcontroller Library - cmsis_nvic for LPC11U24
emilmont 10:3bc89ef62ce7 2 * Copyright (c) 2011 ARM Limited. All rights reserved.
emilmont 10:3bc89ef62ce7 3 *
emilmont 10:3bc89ef62ce7 4 * CMSIS-style functionality to support dynamic vectors
emilmont 10:3bc89ef62ce7 5 */
emilmont 10:3bc89ef62ce7 6 #include "cmsis_nvic.h"
emilmont 10:3bc89ef62ce7 7
emilmont 10:3bc89ef62ce7 8 #define NVIC_NUM_VECTORS (16 + 32) // CORE + MCU Peripherals
emilmont 10:3bc89ef62ce7 9 #define NVIC_RAM_VECTOR_ADDRESS (0x1FFFF000) // Vectors positioned at start of RAM
emilmont 10:3bc89ef62ce7 10
emilmont 10:3bc89ef62ce7 11 void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {
emilmont 10:3bc89ef62ce7 12 static volatile uint32_t* vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
emilmont 10:3bc89ef62ce7 13 int i;
emilmont 10:3bc89ef62ce7 14
emilmont 10:3bc89ef62ce7 15 // Copy and switch to dynamic vectors if first time called
emilmont 10:3bc89ef62ce7 16 if (SCB->VTOR != NVIC_RAM_VECTOR_ADDRESS) {
emilmont 10:3bc89ef62ce7 17 uint32_t *old_vectors = (uint32_t*)SCB->VTOR;
emilmont 10:3bc89ef62ce7 18 for (i=0; i<NVIC_NUM_VECTORS; i++) {
emilmont 10:3bc89ef62ce7 19 vectors[i] = old_vectors[i];
emilmont 10:3bc89ef62ce7 20 }
emilmont 10:3bc89ef62ce7 21 SCB->VTOR = (uint32_t)vectors;
emilmont 10:3bc89ef62ce7 22 }
emilmont 10:3bc89ef62ce7 23
emilmont 10:3bc89ef62ce7 24 vectors[IRQn + 16] = vector;
emilmont 10:3bc89ef62ce7 25 }
emilmont 10:3bc89ef62ce7 26
emilmont 10:3bc89ef62ce7 27 uint32_t NVIC_GetVector(IRQn_Type IRQn) {
emilmont 10:3bc89ef62ce7 28 uint32_t *vectors = (uint32_t*)SCB->VTOR;
emilmont 10:3bc89ef62ce7 29 return vectors[IRQn + 16];
emilmont 10:3bc89ef62ce7 30 }