打印

LPC4357使用SDRAM当系统RAM异常咨询

[复制链接]
722|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerry3564|  楼主 | 2017-2-9 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用BOOT+APP模式。BOOT初始化SDRAM,测试SDRAM也是OK的,然后转跳APP,
APP使用内部100K+的内部ram,没有任何问题。分散加载如下

LR_IROM1 0x1A020000 0x00060000  {    ; load region size_region
  ER_IROM1 0x1A020000 0x00060000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10080000 0x0000A000  {
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x20000000 0x00010000  {
   .ANY (+RW +ZI)
  }
  RW_IRAM3 0x10000000 0x00008000  {  ; RW data
   .ANY (+RW +ZI)
  }
; RW_RAM1 0x28000000 0x02000000  {  ; RW data
;  .ANY (+RW +ZI)
; }
}


使用内部ram
这种模式下,app各种功能正常。
使用外部saram 加载如下

LR_IROM1 0x1A020000 0x00060000  {    ; load region size_region
  ER_IROM1 0x1A020000 0x00060000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
; RW_IRAM1 0x10080000 0x0000A000  {
;  .ANY (+RW +ZI)
; }
; RW_IRAM2 0x20000000 0x00010000  {
;  .ANY (+RW +ZI)
; }
; RW_IRAM3 0x10000000 0x00008000  {  ; RW data
;  .ANY (+RW +ZI)
; }
  RW_RAM1 0x28000000 0x02000000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

外部ram
这种模式下 APP 跑流水程序(没有中断产生的)是正常的。
但是当开启各种硬件中断后程序有一定几率20%,程序会跑飞。

开始怀疑是sdram问题。就加了段测试代码

#define  len123  (7*1024*1024)
unsigned int tetss= 0;
unsigned int buf[len123];
       
void test11(void){
        unsigned int i = 0;
        for(;;){
                for(tetss = 0 ; tetss < len123 ; tetss++)
                        buf[tetss] = tetss + i;
                tetss = 0;
                while(1){
                        if((tetss%1000000 == 0)||(buf[tetss] != (tetss + i)))
                                jhprintf("mcu staring %d , %d\n" ,i , buf[tetss]);
                        tetss++;
                        if(tetss >= len123)
                                break;
                }
                i++;
        }
}
这个测试非常正常。

怀疑是中断向量地址没有设置好。跑测试了下也是正常的。(使用内部ram和外部ram的向量地址是一样的)
SCB->VTOR 的值也是 0x1A020000

相关帖子

沙发
lanhaowang| | 2017-2-9 11:27 | 只看该作者
LPC的RAM调试我也弄不明白,顶个。

使用特权

评论回复
板凳
jerry3564|  楼主 | 2017-2-9 13:48 | 只看该作者
大神都出来支援下撒

使用特权

评论回复
地板
m564522634| | 2017-2-14 09:15 | 只看该作者
没用过LPC4357,不过觉得不上中断向量的问题了。我怀疑是堆栈设置的问题,如果中断向量的问题的话应该一次也进不去了。 楼主你也没有交待跑偏是随机的还是有规律的所以不好判断了,看下你的bootloader的代码吧,堆栈设置上有没有什么问题了。

使用特权

评论回复
5
jerry3564|  楼主 | 2017-2-14 10:32 | 只看该作者
堆栈有问题的话使用内部ram 也会出问题了。

使用特权

评论回复
6
jerry3564|  楼主 | 2017-2-14 10:33 | 只看该作者
m564522634 发表于 2017-2-14 09:15
没用过LPC4357,不过觉得不上中断向量的问题了。我怀疑是堆栈设置的问题,如果中断向量的问题的话应该一次 ...

Stack_Size      EQU     0x00003000

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00001000

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit



程序没有使用 mlloc  Heap_Size       可以忽略

使用特权

评论回复
7
jerry3564|  楼主 | 2017-2-14 10:34 | 只看该作者
m564522634 发表于 2017-2-14 09:15
没用过LPC4357,不过觉得不上中断向量的问题了。我怀疑是堆栈设置的问题,如果中断向量的问题的话应该一次 ...

Stack_Size      EQU     0x00003000

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00001000

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

程序没有使用 mlloc  Heap_Size       可以忽略

使用特权

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

本版积分规则

2

主题

7

帖子

0

粉丝