Submissions from 2015-02-19 to 2015-02-20 (2 total)

Today I continued working on notifications. Created functions for adding and removing them with nice animations. All in all, I'm quite pleased. :)
I'll a gif with the new notifications.

By the way, if you would like to show Crystal Kingdom your support, you can like its facebook page. :)

Yesterday's update can be found here.
In a case of any questions or suggestions, don't hesitate to contact me here or on twitter. ;)

For more updates, you should follow my twitter account - @PeterLauris and the account of Crystal Kingdom - @CrystalKingdom_.

I seem to be unable to find the documentation regarding interrupts (especially with regard to the generated assembly.) I decided to write a quick C test to figure out what it's expecting. It's interesting, but not surprising, the old toolchain and new toolchain produce interrupts differently.

#include <msp430.h>
#define t_int(i) void __interrupt(i) test_##i() {}
t_int(TRAPINT_VECTOR)
t_int(PORT1_VECTOR)
t_int(PORT2_VECTOR)
t_int(ADC10_VECTOR)
t_int(USCIAB0TX_VECTOR)
t_int(USCIAB0RX_VECTOR)
t_int(TIMER0_A1_VECTOR)
t_int(TIMER0_A0_VECTOR)
t_int(WDT_VECTOR)
t_int(COMPARATORA_VECTOR)
t_int(TIMER1_A1_VECTOR)
t_int(TIMER1_A0_VECTOR)
t_int(NMI_VECTOR)
t_int(RESET_VECTOR)

compiled with:

msp430-elf-gcc -I$MSPGCC/include -mmcu=msp430g2553 -S test_inter.c

It results in (just a snippet):

        .balign 2
        .global test_TIMER0_A0_VECTOR
        .section        __interrupt_vector_10,"ax",@progbits
        .word   test_TIMER0_A0_VECTOR
        .text
test_TIMER0_A0_VECTOR:
; start of function
; attributes: interrupt 
; framesize_regs:     0
; framesize_locals:   0
; framesize_outgoing: 0
; framesize:          0
; elim ap -> fp       2
; elim fp -> sp       0
; saved regs:(none)
        ; start of prologue
        ; end of prologue
        ; start of epilogue
        RETI
        .size   test_TIMER0_A0_VECTOR, .-test_TIMER0_A0_VECTOR

A similar macro

#define t_int(i) void __attribute__((interrupt(i))) test_##i() {}

for the old toolchain produced:

        .p2align 1,0
.global test_TIMER0_A0_VECTOR
        .type   test_TIMER0_A0_VECTOR,@function
/***********************
 * Interrupt Vector 9 Service Routine `test_TIMER0_A0_VECTOR' 
 ***********************/
test_TIMER0_A0_VECTOR:
.global __isr_9
__isr_9:
        push    r4
        mov     r1, r4
        add     #2, r4
        pop     r4
        reti
.Lfe7:
        .size   test_TIMER0_A0_VECTOR,.Lfe7-test_TIMER0_A0_VECTOR
;; End of function

It's interesting that the new toolchain puts the interrupt in a different section, while the old toolchain has a predefined global that, I'm assuming, the linker knows to look for. Not sure which one I like, but both feel relatively under documented.