Сбросить вектор прерывания SYSRSTIV на 001Eh (периферийное устройство / выборка области конфигурации - PERF) даже перед входом в основную сеть. Почему это происходит?
Device: MSP430F5418 (RAM: 16 K)
Compiler: IAR MSP430
Data Models tried: Both Medium and Large
Using FreeRTOS Version 7
Memory Statistics
48 444 bytes of CODE memory (+ 342 absolute )
14 678 bytes of DATA memory (+ 102 absolute )
14 150 bytes of CONST memory
Используемый файл cstartup.s43
#define DISABLE_WATCHDOG
#include "macros.m43"
#include "cfi.m43"
#ifdef DISABLE_WATCHDOG
#include "msp430.h"
#endif
#define XRSEGCSTART RSEG CSTART:CODE:NOROOT(1)
XCFI_NAMES libNames
XCFI_COMMON libCommon, libNames
// ---------------------------------------------------------
// The cstartup code -- call __low_level_init, perform initialization,
// call constructors and call main. If main returns the exit system
// is started.
//
MODULE ?cstart
//
// Ensure that this is build with the same "positions independent
// code" settings as the compiler uses.
//
XPICRTMODEL
//
// Forward declarations of segments.
//
RSEG HEAP:DATA:NOROOT(1)
RSEG CSTACK:DATA:NOROOT
RSEG DATA16_Z:DATA:NOROOT
RSEG DATA16_I:DATA:NOROOT
RSEG DATA16_ID:CONST:NOROOT
RSEG CODE_I:DATA:NOROOT
RSEG CODE_ID:CONST:NOROOT
#if __CORE__==__430X_CORE__
RSEG DATA20_Z:DATA:NOROOT
RSEG DATA20_I:DATA:NOROOT
RSEG DATA20_ID:CONST:NOROOT
#endif
// ---------------------------------------------------------
// System initialization.
//
XRSEGCSTART
PUBLIC __program_start_x
EXTERN ?reset_vector
REQUIRE ?reset_vector
__program_start_x:
PUBLIC ?cstart_begin
?cstart_begin:
// --------------------
// Turn off the watchdog.
//
// Note: This is excluded by default. Please define
// DISABLE_WATCHDOG to include it.
//
#ifdef DISABLE_WATCHDOG
MOV #WDTPW + WDTHOLD, &WDTCTL
#endif
// --------------------
// Initialize SP to point to the top of the stack.
//
MOV #SFE(CSTACK), SP
//
// Ensure that main is called.
//
REQUIRE ?cstart_call_main
// -----------------------------------------------
// Call __low_level_init to perform initialization before initializing
// segments and calling main. If the function returns 0 no segment
// initialization should take place.
//
// Link with your own version of __low_level_init to override the
// default action: to do nothing but return 1.
//
XRSEGCSTART
PUBLIC ?cstart_call_low_level_init
EXTERN __low_level_init
?cstart_call_low_level_init:
XCALL #__low_level_init
CMP #0, W0
JEQ ?cstart_call_main
// -----------------------------------------------
// Segment initialization:
//
// xxx_Z -- uninitialized data that are filled with zeros.
// xxx_I -- initialized data that gets the values from the corresponding
// xxx_ID segment.
//
#ifndef IGNORE_SEG_INIT
// --------------------
// Initialize code for __ramfunc functions.
//
XRSEGCSTART
PUBLIC ?cstart_init_copy_ramfunc
?cstart_init_copy_ramfunc:
#ifndef IGNORE_RAMFUNC_INIT
#ifndef REGISTER_MODEL_REG20
MOV #SFB CODE_I, CW0
MOV #SFB CODE_ID, CW1
MOV #sizeof CODE_I, CW2
XCALL #__data16_memcpy
#else // MSP430X with 20 bit pointers.
EXTERN __data20_memcpy
MOVA #SFB CODE_I, CW0
MOVA #SFB CODE_ID, CW1
MOV.W #LWRD(sizeof CODE_I), L1L
MOV.W #HWRD(sizeof CODE_I), L1H
XCALL #__data20_memcpy
#endif // REGISTER_MODEL_REG20
#endif // IGNORE_RAMFUNC_INIT
// --------------------
// Initialize data16
//
#ifndef IGNORE_DATA16_DATA
//
// Clear DATA16_Z.
//
XRSEGCSTART
PUBLIC ?cstart_init_zero
EXTERN __data16_memzero
?cstart_init_zero:
MOV #SFB DATA16_Z, CW0
MOV #sizeof DATA16_Z, CW1
XCALL #__data16_memzero
//
// Copy DATA16_ID to DATA16_I
//
XRSEGCSTART
PUBLIC ?cstart_init_copy
EXTERN __data16_memcpy
?cstart_init_copy:
MOV #SFB DATA16_I, CW0
MOV #SFB DATA16_ID, CW1
MOV #sizeof DATA16_I, CW2
XCALL #__data16_memcpy
#endif // IGNORE_DATA16_DATA
// --------------------
// Data20
//
#if __CORE__==__430X_CORE__
#ifndef IGNORE_DATA20_DATA
//
// Clear DATA20_Z.
//
XRSEGCSTART
PUBLIC ?cstart_init_zero20
EXTERN __data20_memzero
?cstart_init_zero20:
MOVA #SFB DATA20_Z,W0
MOV.W #LWRD(sizeof DATA20_Z), L1L
MOV.W #HWRD(sizeof DATA20_Z), L1H
XCALL #__data20_memzero
//
// Copy DATA20_ID to DATA20_I
//
XRSEGCSTART
PUBLIC ?cstart_init_copy20
EXTERN __data20_memcpy
?cstart_init_copy20:
MOVA #SFB DATA20_I, CW0
MOVA #SFB DATA20_ID, CW1
MOV.W #LWRD(sizeof DATA20_I), L1L
MOV.W #HWRD(sizeof DATA20_I), L1H
XCALL #__data20_memcpy
#endif // IGNORE_DATA16_DATA
#endif // MSP430X
#endif // IGNORE_SEG_INIT
// -----------------------------------------------
// Call constructors of static objects.
//
RSEG DIFUNCT:CONST:NOROOT(1)
XRSEGCSTART
PUBLIC ?cstart_call_ctors
EXTERN __call_ctors
?cstart_call_ctors:
#ifdef REGISTER_MODEL_REG20
MOVA #SFB DIFUNCT, CW0
MOVA #SFE DIFUNCT, CW1
#else /* REGISTER_MODEL_REG20 */
MOV.W #SFB DIFUNCT, CW0
MOV.W #SFE DIFUNCT, CW1
#endif /* REGISTER_MODEL_REG20 */
XCALL #__call_ctors
// -----------------------------------------------
// Call main() with no arguments and then exit using the return value
// of main as the parameter.
//
XRSEGCSTART
PUBLIC ?cstart_call_main
EXTERN main
EXTERN exit
?cstart_call_main:
XCALL #main
XCALL #exit
PUBLIC ?cstart_end
?cstart_end:
// Note: "ENDMOD label" means code that this module is the
// start of the application.
ENDMOD __program_start_x
// ---------------------------------------------------------
// __low_level_init
//
// The only action of this default version of __low_level_init is to
// return 1. By doing so it signals that normal initialization of data
// segments should be done.
//
// A customized version of __low_level_init may be created in order to
// perform initialization before initializing segments and calling main
// and/or to skip initialization of data segments under certain
// circumstances.
//
// For further details see sample file lowinit.c
//
MODULE lowinit
PUBLIC __low_level_init
RSEG CODE:CODE:NOROOT(1)
__low_level_init:
MOV #1, W0 // By returning 1 this function
XRET // indicates that the normal
// initialization should take place
ENDMOD
// ---------------------------------------------------------
// Define reset vector.
//
MODULE ?reset_vector
RSEG RESET:CONST:NOROOT(1)
PUBLIC ?reset_vector
EXTERN __program_start_x
?reset_vector:
DC16 __program_start_x
ENDMOD
END