c_int00.c

来自「DSP系统启动源代码。实现系统的初始化」· C语言 代码 · 共 74 行

C
74
字号

/*****************************************************************************/
/* C_INT00() - C ENVIRONMENT ENTRY POINT                                     */
/*****************************************************************************/
extern void __interrupt c_int00()
{
   /*------------------------------------------------------------------------*/
   /* SET UP THE STACK POINTER IN B15.                                       */
   /* THE STACK POINTER POINTS 1 WORD PAST THE TOP OF THE STACK, SO SUBTRACT */
   /* 1 WORD FROM THE SIZE.                                                  */
   /*------------------------------------------------------------------------*/
   __asm("      mvkl __stack,SP");
   __asm("      mvkh __stack,SP");
   __asm("      mvkl __STACK_SIZE - 4,B0");
   __asm("      mvkh __STACK_SIZE - 4,B0");
   __asm("      add  B0,SP,SP");

   /*------------------------------------------------------------------------*/
   /* THE SP MUST BE ALIGNED ON AN 8-BYTE BOUNDARY.                          */
   /*------------------------------------------------------------------------*/
   __asm("      and  ~7,SP,SP");               

   /*------------------------------------------------------------------------*/
   /* SET UP THE GLOBAL PAGE POINTER IN B14.                                 */
   /*------------------------------------------------------------------------*/
   __asm("      .global $bss");
   __asm("      mvkl $bss,DP");
   __asm("      mvkh $bss,DP");

   /*------------------------------------------------------------------------*/
   /* SET UP FLOATING POINT REGISTERS FOR C70 ONLY                           */
   /*------------------------------------------------------------------------*/
#ifdef _TMS320C6700
   __asm("      mvk   0,B3");     /* round to nearest */
   __asm("      mvc   B3,FADCR");
   __asm("      mvc   B3,FMCR");
#endif

   /*------------------------------------------------------------------------*/
   /* GET THE POINTER TO THE AUTOINITIALIZATION TABLES INTO THE FIRST	     */
   /* ARGUMENT REGISTER (A4)						     */
   /*------------------------------------------------------------------------*/
   __asm("      .global cinit");
   __asm("      mvkl cinit,A4");
   __asm("      mvkh cinit,A4");

   /*------------------------------------------------------------------------*/
   /* PASS THE CURRENT DP TO THE AUTOINITIALIZATION ROUTINE.                 */
   /*------------------------------------------------------------------------*/
   __asm("      mv   DP,B4");

   /*------------------------------------------------------------------------*/
   /* CALL THE AUTOINITIALIZATION ROUTINE.                                   */
   /*------------------------------------------------------------------------*/
   __asm("      .global __auto_init");
   __asm("      mvkl $aiRL,B3");
   __asm("      mvkh $aiRL,B3");
   __asm("      mvkl __auto_init, B0");
   __asm("      mvkh __auto_init, B0");
   __asm("      b    B0"); /* far call */
   __asm("      NOP  5");
   __asm("$aiRL:");

   /*------------------------------------------------------------------------*/
   /* CALL THE USER'S PROGRAM.                                               */
   /*------------------------------------------------------------------------*/
   main();

   /*------------------------------------------------------------------------*/
   /* CALL EXIT.                                                             */
   /*------------------------------------------------------------------------*/
   exit(1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?