原创 向量文件

2010-5-14 14:38 2662 6 6 分类: 处理器与DSP

      最近在学习DSP,第一次看C语言写的程序,发现在向量文件中,所有的中断都由一个矢量.vectors定义地址,而我以前看的程序,各个中断都有自己的矢量,这个给我的理解造成了冲突。还有,就是有一个_c_int00没有定义,但用了,对于这个也不理解。


       1. 对于第一个问题,通过查看中断向量表,发现向量文件中的中断的顺序跟中断向量表中一致。接着,我进行了单步跟踪,在跟踪时,发现向量文件中的每个中断处都出现了地址,而看到源文件中用到的中断timer0,在向量文件中,它显示的地址是00CC(BD _timer0),发现跟asm("  stm   #00a0h, PMST  "); //IPTR = 001,以及中断向量表TINT0组成的向量地址一致,由此可以看出,.vectors定义的地址和asm("  stm   #00a0h, PMST  "); (即_timer0地址)有着相互的关系,一个决定另一个。


       2.对于_c_int00,我查了一下资料,说法是这样的:


C程序开始运行时,必须首先初始化C运行环境,这是通过_c_int00函数来完成的,这个函数在运行支持库(rts.lib)中。连接器会将这个函数的入口地址放在复位中断向量中,使其可以在初始化时被调用。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


_c_int00函数为建立C运行环境,需完成以下工作:


l        为系统堆栈产生.stack块,并初始化堆栈指针;


l        .cinit块将初始化数据拷贝到.bss块中相应的变量;


l        调用main函数,开始运行C程序;


l        用户可以对c_int00函数进行修改,但修改后的函数必须完成以上任务。


如果是汇编程序,那么不需要链接RTS库,_c_int00也毫无意义。


 


   同时,对于连接命令文件中,各段的起始地址赋值,以及长度分配,不是很了解,在以下程序中不知是不是在相应的程序区或数据区中,随便找个符合条件的地址作为起始地址,以及赋予足够的长度,还是另有什么考虑,这个好有待学习。



源文件


#include "cpu_reg.h"


int ms,f;



void main()
{


     asm("  STM #0000h,CLKMD "); 
     while(*CLKMD & 0x01 );
     asm("  STM #40C7h,CLKMD ");  //设置CPU运行频率=100M
/*  40C7h:5*clkin  =100M
    30c7h:4*clkin  =80M
    20c7h:3*clkin  =60M
    10C7h:2*clkin  =40M
*/
     asm("  stm   #4240h, SWWSR ");
     //2 wait except for on-chip program 1
     asm("  stm   #00a0h, PMST  "); //MP/MC = 0, IPTR = 001,ovly=0 
     asm("  stm   #0802h, BSCR  ");
     asm("  STM #0h,IMR ");
    
     asm("  STM #0010h,TCR  "); //关定时器
     asm("  STM #0186ah,PRD  ");//1ms
     asm("  STM #0C2fh,TCR  "); //TCR=最后四位
     asm("  STM #0008h,IFR  ");
     asm("  ORM #0008h,*(IMR) ");/*开时间中断*/
 
     asm("  RSBX  INTM ");      /*开中断*/


    
     f="2";
     ms="0";
     while(1)
     {
       while(ms<500/f);     //LED_flash
       ms="0";
       asm("  RSBX  XF ");      
       while(ms<500/f);
       ms="0";
       asm("  SSBX  XF ");      
     }


}
  
interrupt void  timer0()
{
     ms++;
}


向量文件


DRR11A .set 0x41
DXR11A .set 0x43


      .ref  _timer0
  .ref  _c_int00
  
  
  .sect ".vectors"
  
rs: BD _c_int00
 nop
 nop
nmi: rete   ;NMI, SINT16
    nop
 NOP
 NOP
sint17: BD _c_int00  ;SINT17
 NOP
 NOP
sint18: BD _c_int00  ;SINT18
 NOP
 NOP
sint19: BD _c_int00  ;SINT19
 NOP
 NOP
sint20: BD _c_int00  ;SINT20
 NOP
 NOP
sint21: BD _c_int00  ;SINT21
 NOP
 NOP
sint22: BD _c_int00  ;SINT22
 NOP
 NOP
sint23: BD sint23  ;SINT23
 NOP
 NOP
sint24: BD sint24  ;SINT24
 NOP
 NOP
sint25: BD sint25  ;SINT25
 NOP
 NOP
sint26: BD sint26  ;SINT26
 NOP
 NOP
sint27: BD sint27  ;SINT27
 NOP
 NOP
sint28: BD sint28  ;SINT28
 NOP
 NOP
sint29: BD sint29  ;SINT29
 NOP
 NOP
sint30: BD sint30  ;SINT30
 NOP
 NOP
int0: BD int0   ;INT0, SINT0
 NOP
 NOP
int1: BD int1   ;INT1, SINT1
 NOP
 NOP
int2: BD int2   ;INT2, SINT2
 NOP
 NOP
tint0: BD _timer0  ;TINT0, SINT3
 NOP
 NOP
brint0: BD _c_int00  ;BRINT0, SINT4
 NOP
 NOP
bxint0: BD bxint0     ;BXINT0, SINT5
 NOP
 NOP
dmac0: BD dmac0     ;DMAC0, brint2, SINT6
 NOP
 NOP
dmac1: BD _c_int00     ;DMAC1, bxint2, SINT7 ??
 NOP
 NOP
int3: BD int3      ;INT3, SINT8
 NOP
 NOP
hpint: BD _c_int00     ;HPINT, SINT9
 NOP
 NOP
brint1: BD brint1     ;BRINT1 or DMAC2, SINT10
 NOP
 NOP
;bxint1: BD mcbsp1     ;BXINT1 or DMAC3, SINT11
bxint1: BD _c_int00     ;BXINT1 or DMAC3, SINT11
 NOP
 NOP
dmac4: BD dmac4     ;DMAC4, SINT12
 NOP
 NOP
dmac5: BD dmac5     ;DMAC5, SINT13
 NOP
 NOP
rsvd1: BD rsvd1     ;reserved
 NOP
 NOP
rsvd2: BD rsvd2     ;reserved
 NOP
 NOP


连接命令文件


MEMORY  {
 PAGE 0:
  RESEVE:   org   00h    len = 0x80
  PAGE 0:
  PROG1:    org = 0x0100    len = 0x1200
 PAGE 0:
     VECT:     org = 0x0080,  len = 0x80


 PAGE 1:
  RESEVE1:   org   00h   len = 0x1300    
 PAGE 1:
  DARAM2:   org = 0x1300   len = 0x400
 PAGE 1:
        DARAM1:   org = 0x1700   len = 0x2900
}                 
                                                 
SECTIONS{
        .text :  >       PROG1   PAGE 0
        .cinit : >       PROG1   PAGE 0
        .switch: >       PROG1   PAGE 0
        .vectors:>       VECT    PAGE 0
       
        .const:  >       DARAM1   PAGE 1
        .bss  :  >       DARAM1   PAGE 1
       
        .stack : >       DARAM2   PAGE 1
        .system: >       DARAM2   PAGE 1
        .data :  >       DARAM2   PAGE 1     
        }

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /1 下一条