This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F2809: 关于flash和ram启动中断差异

Part Number: TMS320F2809

问题一:对于工作在100MHz的2809而言,程序运行在flash中和运行在ram中的速度差异是怎样的?

问题二:对于以下两种情况:

              情况1:后台程序运行在flash中,中断程序运行在ram中;

              情况2:后台程序和中断程序都运行在ram中;

              请问,以上两种情况中,从后台程序进入中断的耗时差异有多大?

问题三:请问对于硬件中断而言,中断服务程序的耗时控制在多长时间或者多少个系统时钟周期比较合适?

问题四:请问reserved interrupts用于software interrupts有没有例程或者帖子?

  • 你好:

    1、芯片在RAM中和FLASH中运行时间的差异,主要是因为CPU对flash的访问有一个Wait-State的差别,根据datasheet上的说明,100MHz下,flash需要至少3个时钟周期的Wait-State时间。而访问RAM是0 Wait-State的,由此就产生了程序在ram中运行快,而在flash中运行慢的情况。

    2、根据1的回复,我认为差别就在后台程序的执行时间,按最小3个时钟周期算,会有大约3倍的进入中断耗时差异。

    3、这个好像没什么合适不合适的说法。如果你的系统中只有这一个中断,那时间上无所谓多久。但我如果有多个中断要执行,那你就要考虑中断执行时间了。

    4、例程的话应该是没有,我所知道的是可以用INTR或TRAP指令来初始化这些软件中断,但是我也没有设置reserved interrupts用于软件中断的经验。

  • 对于问题二,我希望通过优化flash的手段,提高响应速度,因此在void InitFlash(void)中,将以下代码设置为1,但是程序不能正常运行

    //Set the Paged Waitstate for the Flash
    FlashRegs.FBANKWAIT.bit.PAGEWAIT = 1;
    
    //Set the Random Waitstate for the Flash
    FlashRegs.FBANKWAIT.bit.RANDWAIT = 1;

    相反地,在以下代码设置为2时,程序能够正常运行

    //Set the Paged Waitstate for the Flash
    FlashRegs.FBANKWAIT.bit.PAGEWAIT = 2;
    
    //Set the Random Waitstate for the Flash
    FlashRegs.FBANKWAIT.bit.RANDWAIT = 2;

    按照spru712h这个文档的解释(见下图),在 pipeline mode(已在void InitFlash(void)开启)下,PAGEWAIT 大于0的同时,RANDWAIT 大于0且大于等于PAGEWAIT即可

    //Enable Flash Pipeline mode to improve performance
    //of code executed from Flash.
    FlashRegs.FOPT.bit.ENPIPE = 1;

    请问您知道原因么?

  • 我的理解是,flash 等待状态的时长是可以设置的,但是设置得越小,要求的芯片主频越慢。也就是说,还是要给与flash访问一个等待时间,只不过如果芯片主频本来就小的话,程序执行速度慢,等待状态就可以适当缩小。文档中也有一句话:

    The flash supports 0-wait accesses when the PAGEWAIT bits are set to zero. This assumes that the CPU speed is low enough to accommodate the access time