加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

MSP430读写片内FLASH保存数据

发布时间:2020-12-15 17:45:48 所属栏目:百科 来源:网络整理
导读:?? 分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 ???? FLASH型的MSP430单片机都带有信息存储器SegmengA及SegmentB,SegmengA及SegmentB各有
??
分享到
  • 一键分享
  • QQ空间
  • 新浪微博
  • 百度云收藏
  • 人人网
  • 腾讯微博
  • 百度相册
  • 开心网
  • 腾讯朋友
  • 百度贴吧
  • 豆瓣网
  • 搜狐微博
  • 百度新首页
  • QQ好友
  • 和讯微博
  • 更多...

百度分享

???? FLASH型的MSP430单片机都带有信息存储器SegmengA及SegmentB,SegmengA及SegmentB各有128字,SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。程序被写入MSP430之后,程序通过SegmengA及SegmentB就可以保存不掉电数据。注意:每次程序烧写到MSP430时,SegmengA及SegmentB都会被擦除!

????? 接下来贴出本文的程序代码,以及程序写入信息存储器之后的FLASH数据:

[cpp] view plain copy print ?
  1. #include??<msp430xG43x.h>??
  2. ??
  3. void?WriteSegment_256?(char?index,char?*value,char?size);??
  4. char?ReadSegment_256(char?index);??
  5. ??
  6. void?main(void)??
  7. {??
  8. ??WDTCTL?=?WDTPW?+?WDTHOLD;?????????????????//?Stop?watchdog?timer??
  9. ??FCTL2?=?FWKEY?+?FSSEL0?+?FN0;?????????????//?MCLK/2?for?Flash?Timing?Generator??
  10. ???
  11. ??char?str1[3]={0xAA,0xBB,0xCC};??
  12. ????
  13. ??WriteSegment_256(0,str1,3);??
  14. ????
  15. ??for(char?i=0;i<255;i++)??
  16. ????_NOP();???????????????????????????????????
  17. ????
  18. ??char?str2[3]={0xBB,0xAA,0xCC};??
  19. ??WriteSegment_256(0,str2,3);??
  20. ????
  21. }??
  22. ??
  23. #define?SegmentStart?0x01000??//Segment?=?0x01000~0x010FF??
  24. #define?SegmentSize?255?//SegmentA?+?SegmentB?=?256??
  25. ??
  26. //*********************************************************??
  27. //读取片内存储的数据??
  28. //*********************************************************??
  29. char?ReadSegment_256(char?index)??
  30. {??
  31. ??char?*flash_ptr?=?((char?*)?SegmentStart)?+?index;??
  32. ??return?*flash_ptr;??
  33. }??
  34. ??
  35. //?*****************************************************??
  36. //把数组写入数据到片内FLASH,必须先全部擦除再写入??
  37. //参数index:保存数组的位置??
  38. //参数value:数组的指针??
  39. //参数size:数组的大小??
  40. //?*****************************************************??
  41. void?WriteSegment_256?(char?index,char?size)??
  42. {??
  43. ??char?buffer[SegmentSize],i=0;??
  44. ??char?*flash_ptr?=?(char?*)?SegmentStart;??
  45. ????
  46. ??//先读取原FLASH数组??
  47. ??for(i=0;i<SegmentSize;i++)??
  48. ????buffer[i]=ReadSegment_256(i);??
  49. ????
  50. ??//擦除FLASH,必须??
  51. ??FCTL1?=?FWKEY?+?ERASE;????????????????????//?Set?Erase?bit??
  52. ??FCTL3?=?FWKEY;????????????????????????????//?Clear?Lock?bit??
  53. ??*flash_ptr?=?0;???????????????????????????//?Dummy?write?to?erase?Flash?segment??
  54. ????
  55. ??//把整个数组都写入FLASH??
  56. ??FCTL1?=?FWKEY?+?WRT;??????????????????????//?Set?WRT?bit?for?write?operation??
  57. ????
  58. ??for(i=0;i<size;i++)//修改原数组??
  59. ????buffer[index+i]=value[i];??
  60. ??for(i=0;?i<SegmentSize;?i++)//写入数据到FLASH??
  61. ????*(flash_ptr++)?=?buffer[i];?????????????????????
  62. ????
  63. ??FCTL1?=?FWKEY;????????????????????????????//?Clear?WRT?bit??
  64. ??FCTL3?=?FWKEY?+?LOCK;?????????????????????//?Set?LOCK?bit??
  65. }??




暂没有新通知
您有 0条新通知

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读