TI中文支持网
TI专业的中文技术问题搜集分享网站

dsp2809应用求教

以前使用dsp2407,最近才接触2809,感觉很不适应。2809的各种寄存器在程序中没有指定明确的内存地址

以前的2407文件REGS240X_H部分内容如下:

#define IMR                *((volatile int *)0x0004)    /*   Interrupt Mask Register             */
#define IFR                *((volatile int *)0x0006)    /*   Interrupt Flag Register             */
#define SCSR1              *((volatile int *)0x7018)

其中各个寄存器在文件中明确了地址位置。。2809是否也可以采用这种单独定义寄存器内存地址的方式呢 

10#:

F28x芯片使用的是方法稍微有些不同。

它是将所有同一类的寄存器放在一起,只给定起始寄存器的地址,之后的寄存器使用偏移地址的方式指定地址,这样可以更高效地实现寻址。

建议查看一下对应的用户手册会清楚一点。

另外,头文件中都定义好了所有用要到的寄存器,用户只需要根据识别名使用即可,为什么你一定要知道它们的地址呢?

以前使用dsp2407,最近才接触2809,感觉很不适应。2809的各种寄存器在程序中没有指定明确的内存地址

以前的2407文件REGS240X_H部分内容如下:

#define IMR                *((volatile int *)0x0004)    /*   Interrupt Mask Register             */
#define IFR                *((volatile int *)0x0006)    /*   Interrupt Flag Register             */
#define SCSR1              *((volatile int *)0x7018)

其中各个寄存器在文件中明确了地址位置。。2809是否也可以采用这种单独定义寄存器内存地址的方式呢 

grant yang:

回复 10#:

 

习惯了2407的寻址方式了。直接对应该用到的寄存器直接赋值,代码量小点。。

补充个问题:

dsp280x的例程Example_280xEPwmDeadBand(sprc191中的)

里面DSP280x_PieVect.h中定义了结构体PIE_VECT_TABLE,是指针类型

DSP280x_PieVect.c中又定义了个PieVectTableInit,是PIE_VECT_TABLE类型的常数量,是服务程序入口地址吗?这点不明白/

此文件中的后面有

void InitPieVectTable(void)

{

         int16         i;

         Uint32 *Source = (void *) &PieVectTableInit;

         Uint32 *Dest = (void *) &PieVectTable;

                  

         EALLOW;

         for(i=0; i < 128; i++)

                   *Dest++ = *Source++;    

         EDIS;

 

         // Enable the PIE Vector Table

         PieCtrlRegs.PIECTRL.bit.ENPIE = 1;        

                           

}看起来好像是把常量的指针付给变量的PieVectTable?这些个常量的内容并没有指定阿?而且下面的代码B已经将变量PieVectTable映射到向量表的内存地址了,为啥还需要PieVectTableInit的常量初始化呢?

 

代码B::::#ifdef __cplusplus

#pragma DATA_SECTION("PieVectTableFile")

#else

#pragma DATA_SECTION(PieVectTable,"PieVectTableFile");

#endif

struct PIE_VECT_TABLE PieVectTable;

 

SECTIONS

{

   PieVectTableFile : > PIE_VECT,   PAGE = 1

 

 

  PIE_VECT    : origin = 0x000D00, length = 0x000100     /* PIE Vector Table */

以上这段代码是将变量PieVectTable映射到向量表的内存地址吧。

 

而且在Example_280xEpwmDeadBand.c中还有   PieVectTable.EPWM1_INT = &epwm1_isr;和interrupt void epwm1_isr(void)

这个是个中断处理程序,把入口地址付给PieVectTable.EPWM1_INT。

而在例程的DSP280x_DefaultIsr.c文件中给出了各个中断处理程序,其中就有如下代码C

interrupt void EPWM1_INT_ISR(void)     // EPWM-1

{

  // Insert ISR Code here

 

  // To receive more interrupts from this PIE group, acknowledge this interrupt

  // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;

 

  // Next two lines for debug only to halt the processor here

  // Remove after inserting ISR Code

  asm ("      ESTOP0");

  for(;;);

}

EPWM1_INT_ISR和epwm1_isr是一个作用吗?

也就是我把epwm1_isr的代码写入EPWM1_INT_ISR中也能起到处理程序的作用吗?

以前使用dsp2407,最近才接触2809,感觉很不适应。2809的各种寄存器在程序中没有指定明确的内存地址

以前的2407文件REGS240X_H部分内容如下:

#define IMR                *((volatile int *)0x0004)    /*   Interrupt Mask Register             */
#define IFR                *((volatile int *)0x0006)    /*   Interrupt Flag Register             */
#define SCSR1              *((volatile int *)0x7018)

其中各个寄存器在文件中明确了地址位置。。2809是否也可以采用这种单独定义寄存器内存地址的方式呢 

grant yang:

回复 10#:

谢谢!

 

赞(0)
未经允许不得转载:TI中文支持网 » dsp2809应用求教
分享到: 更多 (0)