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