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.

[参考译文] MSP430F5507:闪存和 SPI 模块配置

Guru**** 2387830 points
Other Parts Discussed in Thread: MSP430F5507
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/888148/msp430f5507-flash-and-spi-module-configuration

器件型号:MSP430F5507

您好,

我有一个在 MSP430F5507上运行的代码,一切都正常。

但我有以下问题:

1 -  配置 SPI 模块 UCB1CTL0。 而 UCSWRST 为0。

    对寄存器进行了修改、没有问题。

 

2-  在不等待忙位的情况下写入/擦除闪存。 擦除为5段、我检查了 ACCIFG 位从未置位、擦除成功完成。

我理解数据表、但我的问题是没有故障的原因。 即使它未按应有的方式实施。

如果一切可能都正常、我如何才能发现这种情况?

3-  空指针去引用没有任何问题。(我正在使用内存范围访问进行调试)

但是、Code Composer 不会遇到这种情况。

 

谢谢,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请给我一些时间来重新创建您的问题。

    伊斯天

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    当然,我会等你的,感谢你的帮助。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Dina BIN"]3-  空指针去引用,没有任何问题。(我正在使用内存范围访问进行调试)

    但代码编写器无法捕获此类情况。地址0的 NULL 指针位于  MSP430x5xx 器件上的"保留用于系统扩展"外设地址范围00000h-000FFh 内、不会导致访问错误。

     MSP430F5507有一个"嵌入式仿真模块(EEM)(S 版本)"、此模块可设定一个观察点来捕捉到对地址0的访问。 例如、在 CCS Breakpoints 视图中右键点击并选择(Breakpoint Code Composer Studio)-> watchpoint、然后输入零作为地址:

    在对地址0执行读写操作之后、程序将在断点上停止、尽管在执行访问操作的代码之后、程序似乎停止了大约2条指令。

    还可以设置"Watch on Data Address Range"来破坏0-0xff (为系统扩展保留的范围)范围内的任何地址。 这是因为如果一个 NULL 指针被用于一个结构体、那么试图访问一个具有非零偏移量的结构体字段将使用一个非零地址:

    与 "监视点"相比、使用"监视数据地址范围"的缺点是、在 EEM 的 S 版本中使用2个而不是1个硬件触发器、这会限制其他断点的使用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    关于您的第一个问题、请参阅我们的数据表:

     UCSWRST 的默认值为1。 代码只是为了确保 UCSWRST 被置位。

    关于您的第二个问题、我想您将讨论 ACCVIFG。 您能提供您的代码供我测试吗? 是否已检查 忙位是否仍然设置?

    伊斯天

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1 -     关于第一个问题、UCB1CTL0被修改、而该位被设定为零(被释放用于运行)。

    这是什么意思、当模块运行时、控制寄存器被修改而没有置位/复位 UCSWRST、这是否正常?

    2 -     我无法共享完整代码、但下面是擦除闪存代码的一个片段。

     我的问题是、在擦除第一个段后、它不会等待忙位、

    我在开始下一段的擦除之前检查了 ACCVIFG、该位从未置位、这意味着一切都正常。 我是对的吗?

    对于(Temp_Counter=0;Temp_Counter 
    

     3-解决了空指针问题。


    谢谢、  


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    关于您的第一个问题:

    在不设置/复位 UCSWRST 的情况下、不能修改控制寄存器。 这样做的原因是、当您为器件上电时 、UCSWRST = 1。 这意味着即使您没有设置 UCSWRST、它也已经由硬件进行了设置。

    关于您的第二个问题:

    如果 ACCVIFG 位从未置位、则意味着一切都正常。 我之前的意思是、虽然您不检查忙位、但在您执行下一个操作时、它可能会被清除。

    伊斯天

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    2) 2)您没有说、但我怀疑您的段擦除代码正在闪存中运行。 在这种情况下、CPU 在擦除完成时处于停滞状态。 [参考用户指南(SLAU208Q)第7.3.1.4节]。 实际上、您的代码永远不会看到 BUSY=1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的澄清,感谢您的帮助。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、它从闪存运行、但让我感到困惑的是、需要在擦除过程中从 RAM/Flash 中检查它。
    [参考用户指南(SLAU208Q) FIG7.4]。

    如果 CPU 被保持、检查 BUSY 位的目的是什么?

    无论如何,我将根据数据表工作,感谢您的帮助。