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.

TM4C129系列采用API接口,造成错误中断的问题



这段时间在用TM4C129ENCDPT芯片,发现一个问题,如果没能使能模块就去用API接口读取它相关的寄存器内容的话,会造成程序进入错误中断。比如没有使能CAN模块,就用到CANMESSAGESET的接口,程序就会运行出错,我在用M3的时候没有发现类似的问题,请问一下是什么原因?同时设置系统时钟为120M时候,采用SysCtlGetClock()读回来是错误的,为960K,必须用xxFreSet的返回值,同时如果采用以太网模块,必须用SysCtlGetClock,不然运行异常。

  • 有个版本的SysCtlGetClock库函数有误,你可以使用ROM_SysCtlGetClock试试,至于没能使能模块就去用API接口读取它相关的寄存器内容的话,会造成程序进入错误中断,应该在错误中断中加入了判断,这应该是好事吧,你去把那个屏蔽掉也可以

  • 一个模块没有使能的时候去操作它的寄存器一定会导致进入硬件错误中断的。

    您说的M3中没遇到,我想可能是因为程序的其它地方已经默认启动了这个外设。或者是这个外设在复位后默认为使能的。

    TM4C129x属于SnowFlake系列,它的时钟主频获取不可以采用SysCtlGetClock函数,这个是给Blizzard(TM4C123x)系列处理器使用的。

    //
    // Set the clocking to run directly from the crystal at 120MHz.
    //
    g_ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480), 120000000);

    这个函数的返回值g_ui32SysClock 就是读取到的系统时钟。


  • 孙工解释的很赞