[MSP-EXP430FR6989] 时钟初始总是不成功

[复制链接]

2

主题

17

帖子

96

积分

一粒轻沙

Rank: 1

积分
96
楼主
查看: 4384回复: 4 发表于 2019-8-1 21:24:02   只看该作者
本帖最后由 木叶留春 于 2019-8-1 21:33 编辑

在用官方给的外设驱动库文件配置时钟时总是会出现意外中断,官方给的例程也无法正常工作,这是怎么回事?
每次经过CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);函数后会跳转到Break at address "0xfffa" with no debug information available, or outside of program code.这句话的界面,然后就自动复位了,这是什么原因?
void main(void)
{
    //Stop WDT
    WDT_A_hold(WDT_A_BASE);
    //Set DCO frequency to 16MHz
    CS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_4);

    CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);
    CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);


又进行测试,如果是8Mhz的话就能正常的初始化,这是什么情况?msp430fr6989是可以稳定到16mHZ工作的呀,怎么这样就不行了呢?而且只要把系统时钟上调到16Mhz,时钟系统直接崩溃掉!有没有人遇到这个问题?

73

主题

469

帖子

1007

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1007
沙发
发表于 2019-8-2 11:36:26   只看该作者

铁电存储不熟悉, 先顶个贴

73

主题

469

帖子

1007

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1007
板凳
发表于 2019-8-2 13:03:34   只看该作者
现学现卖,总算搞定了,可以自己验证下。

参考资料如下:
1、例程,做参考。  经过验证的代码如下:

2、数据手册,http://www.ti.com/cn/lit/ds/symlink/msp430fr6989.pdf , P29
      With FRAM wait states (NWAITSx = 1)    支持频率 0-16M      (NWAITSx = 0)    支持频率 0-8M

3、还一个调试的小问题,留意下。  

用户手册http://www.ti.com.cn/cn/lit/ug/slau367o/slau367o.pdf,P294页
Access time error flag. This flag is set and a reset PUC is generated if a wrong setting for NWAITS is set and the FRAM access time is violated. This bit is cleared by software or by reading the system reset vector word SYSRSTIV if it is the highest pending flag. This bit is write 0 only, write 1 has no effect.
Note: The ACCTEIFG bit may be set in debug mode when the system frequency is configured to be greater than 8 MHz, regardless of the wait states (NWAITS).
In the case, it is not an FRAM access violation. The ACCTEIFG bit does not trigger a PUC or change the SYSRSTIV register value. The ACCTEIFG bit is cleared only by writing 0. It is recommended to use SYSRESTIV register to check FRAM access violation error to avoid confusion.

google翻译未校对(先吃午饭去了):
访问时间错误标志。 如果设置了NWAITS的错误设置并且违反了FRAM访问时间,则设置该标志并生成重置PUC。 如果该位是最高挂起标志,则通过软件或读取系统复位向量字SYSRSTIV来清除该位。 该位仅写0,写1无效。
注:当系统频率配置为大于8 MHz时,无论等待状态(NWAITS)如何,ACCTEIFG位都可以设置为调试模式。
在这种情况下,它不是FRAM访问冲突。 ACCTEIFG位不会触发PUC或更改SYSRSTIV寄存器值。 仅通过写0清除ACCTEIFG位。建议使用SYSRESTIV寄存器检查FRAM访问冲突错误以避免混淆。



  1. #include "driverlib.h"

  2. void main(void)
  3. {
  4.     //停用看门狗
  5.     WDT_A_hold(WDT_A_BASE);

  6.     //设置等待时间,0时只能0-8MHz;不为0时,支持0-16M
  7.     //建议修改时钟前提前配置
  8.     FRAMCtl_configureWaitStateControl(FRAMCTL_ACCESS_TIME_CYCLES_1);

  9.     //设置DCO=16MHz
  10.     CS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_4);

  11.     //配置时钟信号 SMCLK = DCOCLK/1 = 16MHz
  12.     CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);

  13.     //配置时钟信号 MCLK = DCOCLK/1 = 16MHz,
  14.     CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);

  15. //  不能放在这,因为频率已经到16M. 放到此处可以复现问题
  16. //    FRAMCtl_configureWaitStateControl(FRAMCTL_ACCESS_TIME_CYCLES_1);

  17.     //配置P4.0方向为输出
  18.     GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN0);

  19.     //配置P4.0为功能引脚,可以直接将MCLK输出,通过示波器查看验证
  20.     GPIO_setAsPeripheralModuleFunctionOutputPin(
  21.             GPIO_PORT_P4,
  22.             GPIO_PIN0,
  23.             GPIO_TERNARY_MODULE_FUNCTION
  24.     );

  25.     //FRAM的常规操作吧,还没仔细看
  26.     PMM_unlockLPM5();

  27.     while(1)
  28.     {
  29.     };

  30. }
复制代码


实验结果截图:



73

主题

469

帖子

1007

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1007
4#
发表于 2019-8-2 18:16:48   只看该作者
有空可以在你的环境上验证下

2

主题

17

帖子

96

积分

一粒轻沙

Rank: 1

积分
96
5#
发表于 2019-8-2 21:07:01   只看该作者
shengxiang 发表于 2019-8-2 18:16
有空可以在你的环境上验证下

完美,谢谢!
快速回复 返回顶部 返回列表