懂MSP430的帮下忙 谢谢

[复制链接]
2592|4
 楼主| jzhjt29 发表于 2011-11-25 14:27 | 显示全部楼层 |阅读模式
本帖最后由 21小跑堂 于 2011-11-25 15:49 编辑

本人刚学MSP430碰到几个问题:(C语言编程)1,看门狗停止时用WDTCTL=WDTPW+WDTHOLD 可看门狗控制寄存器里根本没有WDTPW和WDTHOLD啊(虽然有hold);那为什么可以有这个关键字呢?2,假如我要把345这个数据写到Flash的0xc000H单元和RAM的0x0300H,请问他们分别怎么写??(请用C)
cat3902982 发表于 2011-11-25 14:57 | 显示全部楼层
第一个问题 你可以到你的头文件里去看 ,最好是结合你的头文件和你的USERGUIDE 一起看。
cat3902982 发表于 2011-11-25 14:58 | 显示全部楼层
第二个问题 你可以去官网搜索下你对应的型号的MCU的官方例程
tianm 发表于 2011-11-26 09:02 | 显示全部楼层
楼上说的很对 TI的网站上有很多资料可供学习 特别是器件手册一定要看明白
TI_MCU 发表于 2011-11-28 09:32 | 显示全部楼层
写到RAM里很简单,定义一个指针直接读写就好了:

  1. int *a = (int *)0x0300H;
  2. *a = 345;
写到Flash是个相对复杂的问题,要允许Flash的写入考虑到Flash的写入时间,同时还要考虑到Flash是否已经擦除等等,下面的代码来自TI写Flash的示例,楼主可以参考一下

  1. /***********************************************************************/
  2. /* flash_idle.c 2000-06-20 */
  3. /* */
  4. /* Flash erase and program functions */
  5. /* */
  6. /* Below functions using the direct Flash programming algorithm. */
  7. /* After starting a flash write or erase cycle, the CPU will wait */
  8. /* until the flash is read-accessable again, so no program must be */
  9. /* copied into RAM. However, during flash programming, the CPU is */
  10. /* in ”idle” mode. */
  11. /* */
  12. /* Note: Since all interrupt vectors are unavailable during flash */
  13. /* programming, all interrupts must be disabled. */
  14. /* */
  15. /* Anton Muehlhofer Texas Instruments Incorporated */
  16. /***********************************************************************/
  17. #define _CPU_ 5 /* 5=MSP430F1121, 6=MSP430F149 device */
  18. #include <std_def.h> /* ports */
  19. #include ”flash_prog.h” /* function prototypes */
  20. /***********************************************************************/
  21. /* Flash_wb */
  22. /* programs 1 byte (8 bit) into the flash memory */
  23. /***********************************************************************/
  24. void Flash_wb( char *Data_ptr, char byte )
  25. {
  26. FCTL3 = 0x0A500; /* Lock = 0 */
  27. FCTL1 = 0x0A540; /* WRT = 1 */
  28. *Data_ptr=byte; /* program Flash word */
  29. FCTL1 = 0x0A500; /* WRT = 0 */
  30. FCTL3 = 0x0A510; /* Lock = 1 */
  31. }
  32. /***********************************************************************/
  33. /* Flash_ww */
  34. /* programs 1 word (16 bits) into the flash memory */
  35. /***********************************************************************/
  36. void Flash_ww( int *Data_ptr, int word )
  37. {
  38. FCTL3 = 0x0A500; /* Lock = 0 */
  39. FCTL1 = 0x0A540; /* WRT = 1 */
  40. *Data_ptr=word; /* program Flash word */
  41. FCTL1 = 0x0A500; /* WRT = 0 */
  42. FCTL3 = 0x0A510; /* Lock = 1 */
  43. }
  44. /***********************************************************************/
  45. /* Flash_clr */
  46. /* erases 1 Segment of flash memory */
  47. /***********************************************************************/
  48. void Flash_clr( int *Data_ptr )
  49. {
  50. FCTL3 = 0x0A500; /* Lock = 0 */
  51. FCTL1 = 0x0A502; /* ERASE = 1 */
  52. *Data_ptr=0; /* erase Flash segment */
  53. FCTL1 = 0x0A500; /* ERASE = 0 */
  54. FCTL3 = 0x0A510; /* Lock = 1 */
  55. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

140

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部