打印
[ZLG-ARM]

请教:关于LPC11xx中断向量表的映射问题

[复制链接]
4098|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#ifdef __DEBUG_RAM   
  LPC_SYSCON->SYSMEMREMAP = 0x1;  //01向量表映射在内部RAM
#else
#ifdef __DEBUG_FLASH   
  LPC_SYSCON->SYSMEMREMAP = 0x2;  //02或03向量表映射在内部FLASH(00映射在Boot Rom)
#endif
#endif
系统默认是将向量表映射在内部FLASH的0地址起始,但是我试着想将向量表映射到内部RAM,系统却跑飞了或者进入死循环!
用下面的代码在系统初始化完毕后,将向量表COPY过来也不行,不知道大家有没有试过?
#ifdef __DEBUG_RAM
    // Copy vectors table from 0x0 to RAM
    src = (volatile unsigned int *)0;
    dst = (volatile unsigned int *)0x10000000;
    size = 0xc0 >> 2;
    //size = 0x200>> 2;
    do
    {
      *dst++ = *src++;
    }while (--size);
    LPC_SYSCON->SYSMEMREMAP = 0x1;  //01向量表映射在内部RAM
     #endif  
while(1)
{                                                        
LED_TOG;
delay(8000);
}

相关帖子

沙发
sunyouyuan|  楼主 | 2011-3-17 09:44 | 只看该作者
顶一下,菜农帮下忙啊 呵呵:lol

使用特权

评论回复
板凳
sunyouyuan|  楼主 | 2011-3-18 18:13 | 只看该作者
我已经映射配置成功,稍后我会整理一下发上来:P

使用特权

评论回复
地板
sunyouyuan|  楼主 | 2011-3-19 11:33 | 只看该作者
配置代码如下:
#define VECTOR_TABLE_SIZE     0x200
#define  __DEBUG_RAM

#ifdef __DEBUG_RAM
      volatile unsigned int *dst, size;
      volatile const unsigned int *src;
      /*从内部flash0地址复制向量表到内部RAM 0x10000000(注意RAM起始处需要空着)*/
      src = (volatile unsigned int *)0;
      dst = (volatile unsigned int *)0x10000000;
      size = VECTOR_TABLE_SIZE >> 2;
      do
      {
          *dst++ = *src++;
      }while (--size);
      LPC_SYSCON->SYSMEMREMAP = 0x1;  //01向量表映射在内部RAM
    #else
      #ifdef __DEBUG_FLASH   
        LPC_SYSCON->SYSMEMREMAP = 0x2;  //02或03向量表映射在内部FLASH(00映射在Boot Rom)
      #endif
    #endif
另外需要在编译器的target opition---tagret下修改内部RAM的起始地址 如下图所示:

因为你若将中断向量表复制到RAM 0地址开始处,则需要空出来0x200字节。

使用特权

评论回复
5
bit6019| | 2011-3-20 17:46 | 只看该作者
这么好的经验啊!

使用特权

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

本版积分规则

个人签名:把时髦的技术挂在嘴边,还不如把过时的技术记在心里!我的淘宝:http://dragongo.taobao.com

6

主题

33

帖子

0

粉丝