这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 一个LPC2114的内存中寄存器存储数据的问题

共7条 1/1 1 跳转至

一个LPC2114的内存中寄存器存储数据的问题

菜鸟
2008-03-25 14:54:17     打赏
问题如图中所示,我运行了从main标号到蓝色箭头指示之间的程序。关注3条语句LDR  R0,=PINSEL1   LDR  R1,=IOPINSET   STR  R1,[R0]   PINSEL1代表的寄存器映射地址是0xe002c004,IOPINSET是我定义的常量为0x55400000(观察寄存器r1的值也可以看出来),但是我执行完STR  R1,[R0] 后观察内存发现,不单是0xE002c004,还有0xe002c024,0xe002c044......,每偶数行都变了,见图中红色的55代表内存中变化的数,
而且每两行,也就是每32个字节的内存内容都是一样的,这是为什么呢?可能因为我是初学者,但希望大家能帮助解答一下!



关键词: 一个     LPC2114     内存     寄存器     存储     数据         

助工
2008-03-25 17:52:59     打赏
2楼
版主来给解答一下

菜鸟
2008-03-25 22:03:26     打赏
3楼
出现类似问题一般是存储配置可能有问题。另外,有些片子对控制寄存器进行配置的时候,要求连续执行。或者,CPU运行出现问题,也有可能造成这样的问题。

建议LZ把这段程序放到程序的开头试一试。这样可以排除程序其它部分的干扰。

菜鸟
2008-03-26 09:32:27     打赏
4楼

我判断应该不是我写的程序运行或存储配置的问题,因为片子一加电,没开始load image文件之前,我没有对片子进行任何操作,但我观察内存中的数据已经是按照上述方式排列了。也就是说在遇到下一个已经被其他寄存器映射的地址之前,所有的中间地址的内存中存储的都是上一个寄存器的数据。
好比对于LPC2114,PINSEL0和PINSEL1的映射地址是从0xe002c000开始,而下一个被其他寄存器映射的地址是e0030000,它被S1PCR寄存器所映射,则在从地址0xe002c000到0xe002ffff之间的所有地址都是不断重复的写入了相同的数据。
难道是twentyone大大所说LPC2114对寄存器配置时就会连续执行,直至到下一个被其他控制寄存器映射的地址?


菜鸟
2008-03-26 09:45:37     打赏
5楼
有这个可能的,你考虑一下下面2个问题:
1 - 你出问题的这段程序是否是对存储进行配置的?如果是,那会不会影响程序的运行?
2 - 如果上面的问题成立,能否让你的程序运行在一个不会受影响的地址去运行?

菜鸟
2008-03-26 11:07:59     打赏
6楼

不知道twentyone大大所指的存储配置具体是指那个文件,我猜测是特殊寄存器的地址映射定义及分散加载的scatter文件吧,这两个文件我使用的是ZLG例程中自带的LPC2294.inc,还有mem_b,内容如下:

ROM_LOAD 0x40000000
{
    ROM_EXEC 0x40000000
    {
        Startup.o (vectors, +First)
        * (+RO)
    }
}
我觉得这两个文件只是定义了寄存器的地址还有程序中段和域的映射位置和起始地址,不会对内存的写入方式有影响吧?


菜鸟
2008-03-26 12:25:40     打赏
7楼
你提供的SCATTER文件说明:你的程序的装载和运行地址都是0X40000000,这个地址应该是片内SRAM吧? 你考虑2个问题:

1 - 这个地址空间是不是片内SRAM?
2 - 如果是片内SRAM的话,你执行配置的那几条语句是否会改变片内SRAM的地址?

21

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]