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.

关于AM335x cache的问题,请高手解答



图1

图2

图3

图4

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

如图,这是用CCS5.5跑的starterware里面的DEMO例程裸机程序。原程序运行正常。

图1是我修改后的程序,将下面的Timer4Config();移到上面来,移到CacheEnable(CACHE_ALL);的后面。

图2是Timer4Config原来的地方。

图3是Timer4Config里面的内容。

图4是原程序的MMU配置函数。

那么问题来了,当跑到图1箭头指向的这个位置的时候就跑飞了。准确的说是运行完前面的MMU和CACHE之后,在运行Timer4Config就出现了问题。如果将MMU和CACHE注释掉,程序可以正常运行。

请教这是何故?

  • 应该是驱动层有些东西还没有初始化完成,在timer配置之前还要有相关的clock使能的

  • 在我CACHE和MMU使能以后,TIMER1的时钟无法使能0x44E004C4的IDLEST一直返回0x03(Module is disabled and cannot be accessed)

    重新上电:

    1.将程序下载进去,GOTO MAIN后,在CCS的DEBUG里面直接将0x44E004C4=2后,IDLEST变成0

    2.将TIMER4也=2以后,IDLEST变成0

    3.运行程序,mmu和cache使能后,按下复位按键,重新将程序下载进去,GOTO MAIN后,TIMER1=2,使能后,IDLEST仍然是0x03

    4.TIMER4=2后,IDLEST=0x00

    问题,

    1.为何使能MMU和CACHE后,TIMER1无法使能时钟。

    2.为何按下复位按键后,mmu和cache仍然会影响着TIMER1,必须要重新上电以后TIMER1的时钟才能被使能。而TIMER4却在任何情况下都没有问题。

  • 貌似找到问题了,可能是时钟源选择的问题,就是0x44e00528里面,默认是0x04,如果是0x04就不可以,如果是0x01就可以

    请问,0x04和0x01都是32k,这两个的区别是什么呢?

  • TRM手册的8.1.6.13 Timer Clock Structure节对此有明确的描述:

    The CLK_32KHZ clock is an accurate 32.768-kHz clock derived from the PER PLL and can also be selected for the WDT1. 简单来说更精确

    The DMTIMER0 can only be clocked from the internal RC oscillator (CLK_RC32K). 不如上面的精确,但是在低功耗的时候由于32KHZ关了,必须用这个。