diff options
| author | Marti Bolivar <mbolivar@leaflabs.com> | 2011-05-09 16:43:27 -0400 | 
|---|---|---|
| committer | Marti Bolivar <mbolivar@leaflabs.com> | 2011-05-09 16:49:08 -0400 | 
| commit | 19ea6ba4ea3f1ecb9830cf4d3e1366513f4f96e3 (patch) | |
| tree | a43f7e0fb3650ca54f245b750a078a0e8c356504 /libmaple/exc.S | |
| parent | 868fb1c273e562a1140abfa948022c9d4f55bccf (diff) | |
| parent | 1e2e177f6dae62e040c674b617744c73be187062 (diff) | |
| download | librambutan-19ea6ba4ea3f1ecb9830cf4d3e1366513f4f96e3.tar.gz librambutan-19ea6ba4ea3f1ecb9830cf4d3e1366513f4f96e3.zip | |
Merge branch 'refactor'
This merges the libmaple refactor work into master.  The contents of
libmaple proper (/libmaple/) are almost completely incompatible with
previous APIs in master.  See /docs/source/libmaple/overview.rst for
more information on the new design.
Wirish incompatibilities are limited to the HardwareTimer class;
however, there are several new deprecations, most likely to be removed
in 0.1.0.
Diffstat (limited to 'libmaple/exc.S')
| -rw-r--r-- | libmaple/exc.S | 70 | 
1 files changed, 55 insertions, 15 deletions
| diff --git a/libmaple/exc.S b/libmaple/exc.S index a9f6561..7631e48 100644 --- a/libmaple/exc.S +++ b/libmaple/exc.S @@ -41,21 +41,61 @@  #    SP-->  r0  .text -.globl HardFaultException +.globl __exc_hardfault +.globl __exc_nmi +.globl __exc_hardfault +.globl __exc_memmanage +.globl __exc_busfault +.globl __exc_usagefault + +.code 16 +.thumb_func +__exc_nmi: +    mov r0, #1 +    b __default_exc + +.thumb_func +__exc_hardfault: +    mov r0, #2 +    b __default_exc + +.thumb_func +__exc_memmanage: +    mov r0, #3 +    b __default_exc + +.thumb_func +__exc_busfault: +    mov r0, #4 +    b __default_exc + +.thumb_func +__exc_usagefault: +    mov r0, #5 +    b __default_exc +  .thumb_func -HardFaultException: -   ldr r0, CPSR_MASK           @ Set default CPSR -   push {r0} -   ldr r0, TARGET_PC           @ Set target pc -   push {r0} -   sub sp, sp, #24             @ its not like i even care -   ldr r0, EXC_RETURN          @ Return to thread mode -   mov lr, r0 -   bx lr                       @ Exception exit - - .align 4 - CPSR_MASK:  .word 0x61000000 - EXC_RETURN: .word 0xFFFFFFF9 - TARGET_PC:  .word throb +__default_exc: +    ldr r2, NVIC_CCR            @ Enable returning to thread mode even if there are +    mov r1 ,#1                  @ pending exceptions. See flag NONEBASETHRDENA. +    str r1, [r2] +    cpsid i                     @ Disable global interrupts +    ldr r2, SYSTICK_CSR         @ Disable systick handler +    mov r1, #0 +    str r1, [r2] +    ldr r1, CPSR_MASK           @ Set default CPSR +    push {r1} +    ldr r1, TARGET_PC           @ Set target pc +    push {r1} +    sub sp, sp, #24             @ Don't care +    ldr r1, EXC_RETURN          @ Return to thread mode +    mov lr, r1 +    bx lr                       @ Exception exit +.align 4 +CPSR_MASK:     .word 0x61000000 +EXC_RETURN:    .word 0xFFFFFFF9 +TARGET_PC:     .word __error +NVIC_CCR:      .word 0xE000ED14    @ NVIC configuration control register +SYSTICK_CSR:   .word 0xE000E010    @ Systick control register | 
