打印

430数据读取问题

[复制链接]
529|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lefeng|  楼主 | 2017-3-29 20:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MSP430如何将一个内存单元中的数据读取至数组中?
比如我想将内存单元0300-0310中的数据取出,将每一个数据对应赋值给RAM数组,如果用C语言来操作,如何实现?

如果将取出的数据进行相应的操作,将操作后的数据如何赋给0300-0310地址中?

请高手帮忙写一下

相关帖子

沙发
lwsn| | 2017-3-29 21:11 | 只看该作者
那就使用指针咯

使用特权

评论回复
板凳
豆腐块| | 2017-3-29 21:23 | 只看该作者
/*******************************************************************************
文件名称:Flash.c
功能描述:
*******************************************************************************/
#include <msp430x14x.h>
int wordbuf[];
char bytebuf[];
/*******************************************************************************
函数名称:Flash_Init
功    能:初始化Flash
参    数:无
返回值  :无
调用模块:main
*******************************************************************************/
void Flash_Init()
{
FCTL2 = FWKEY + FSSEL0 + FN0;      // MCLK/2 for Flash Timing Generator
}
/*******************************************************************************
函数名称:Flash_Erase
功    能:段擦除Flash
参    数:无
返回值  :无
调用模块:
*******************************************************************************/
void Flash_Erase(int *addr)
{
    while(FCTL3 & BUSY);             // 等待空闲
    FCTL3 = FWKEY;                     // 清除 "Lock"
    FCTL1 = FWKEY + ERASE;             // 准备擦除              
    *addr = 0;                         // 擦除,写任意数均可
    FCTL3 = FWKEY + LOCK;              // 置“LOCK”              
}

/*******************************************************************************
函数名称:Flash_Write_Word
功    能:字,写Flash
参    数:addr--写地址
    buf--要写数据的首地址
    len--数据长度
返回值  :无
调用模块:
*******************************************************************************/
void Flash_Write_Word(int *addr, int *buf, int len)
{
    unsigned int cnt;

    while(FCTL3 & BUSY);             // 等待空闲
    FCTL3 = FWKEY;                     // 清除 "Lock"
    FCTL1 = FWKEY + ERASE;             // 准备擦除              
    *addr = 0;                         // 擦除,写任意数均可
    FCTL3 = FWKEY + LOCK;              // 置“LOCK”

    while(FCTL3 & BUSY);             // 等待Flash空闲
    FCTL3 = FWKEY;                     // 清除“LOCK”标识
    FCTL1 = FWKEY + WRT;               // 准备写                     
    for(cnt=0; cnt<len; cnt++)
    {
        *(addr + cnt) = *(buf + cnt);   // 写数据
    }
    FCTL3 = FWKEY + LOCK;              // Lock            
}
/*******************************************************************************
函数名称:Flash_Read_Word
功    能:字,读Flash
参    数:addr--读地址
    wordbuf--存储读取的数据
    len--数据长度
返回值  :无
调用模块:
*******************************************************************************/
void Flash_Read_Word(int *addr, int *wordbuf, int len)
{
    unsigned int cnt;
   
    while(FCTL3 & BUSY);                 // 等待flash空闲
    for(cnt = 0; cnt < len; cnt++)
    {
        *(wordbuf + cnt) = *(addr + cnt);   // 读数据
    }
    FCTL3 = FWKEY + LOCK;                   // Lock      
}
/*******************************************************************************
函数名称:Flash_Write_Byte
功    能:字节,写Flash
参    数:addr--写地址
    buf--要写数据的首地址
    len--数据长度
返回值  :无
调用模块:
*******************************************************************************/
void Flash_Write_Byte(char *addr, char *buf, int len)
{
    unsigned int cnt;

    while(FCTL3 & BUSY);             // 等待空闲
    FCTL3 = FWKEY;                     // 清除 "Lock"
    FCTL1 = FWKEY + ERASE;             // 准备擦除              
    *addr = 0;                         // 擦除,写任意数均可
    FCTL3 = FWKEY + LOCK;              // 置“LOCK”

    while(FCTL3 & BUSY);             // 等待Flash空闲
    FCTL3 = FWKEY;                     // 清除“LOCK”标识
    FCTL1 = FWKEY + WRT;               // 准备写                     
    for(cnt=0; cnt<len; cnt++)
    {
        *(addr + cnt) = *(buf + cnt);  // 写数据
    }
    FCTL3 = FWKEY + LOCK;             // Lock            
}
/*******************************************************************************
函数名称:Flash_Read_Byte
功    能:字节,读Flash
参    数:addr--读地址
    wordbuf--存储读取的数据
    len--数据长度
返回值  :无
调用模块:
*******************************************************************************/
void Flash_Read_Byte(char *addr, char *bytebuf, int len)
{
    unsigned int cnt;
   
    while(FCTL3 & BUSY);                 // 等待flash空闲
    for(cnt=0; cnt<len; cnt++)
    {
        *(bytebuf+ cnt) = *(addr + cnt);    // 读数据
    }
    FCTL3 = FWKEY + LOCK;                  // Lock      
}

使用特权

评论回复
地板
可可球| | 2017-3-29 21:32 | 只看该作者
每个函数都有说明的

使用特权

评论回复
5
Levenburg| | 2017-3-29 21:49 | 只看该作者
就是读写flash了

使用特权

评论回复
6
xiaoyaodz| | 2017-4-1 21:17 | 只看该作者
设置二维数组,一个保存地址,一个保存数据

使用特权

评论回复
7
xiaoyaodz| | 2017-4-1 21:18 | 只看该作者
楼主RAM数据使用地址和数据对应就可以。

使用特权

评论回复
8
wangdezhi| | 2017-4-2 10:04 | 只看该作者
xiaoyaodz 发表于 2017-4-1 21:17
设置二维数组,一个保存地址,一个保存数据

这个方案可行。

使用特权

评论回复
9
wangdezhi| | 2017-4-2 10:06 | 只看该作者
使用DMA将地址一一对应也行。

使用特权

评论回复
10
1988020566| | 2017-4-2 21:07 | 只看该作者
这个直接对应好了起始地址和数据地址地址。

使用特权

评论回复
11
1988020566| | 2017-4-2 21:11 | 只看该作者
使用指针把这个数据地址赋值。

使用特权

评论回复
12
zyj9490| | 2017-4-2 22:39 | 只看该作者
读写FLASH,还是RAM啊,这是不同的操作机理。

使用特权

评论回复
13
xiaoyaozt| | 2017-4-3 21:30 | 只看该作者
使用指针操作。

使用特权

评论回复
14
xiaoyaozt| | 2017-4-3 21:32 | 只看该作者
这个将地址直接赋值给数组,数据就可以对应了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

200

主题

1087

帖子

0

粉丝