搜索
bottom↓
回复: 18

lpc1788 如何在sdram调试程序

[复制链接]

出0入0汤圆

发表于 2015-9-22 15:10:01 | 显示全部楼层 |阅读模式
用stm32的时候,习惯在sram上调试程序,省去flash下载的麻烦

现在用lpc1788后,也打算在sdram上调试程序了,结果好几天了  还是没有搞定如何在sdram调试程序

flash上运行时,sdram可以正常运行,但是现在用sdram调试,第一条指令初始化是正常的,但是运行就跑飞,出现错误:
**JLink Warning: T-bit of XPSR is 0 but should be 1. Changed to 1

我用的调试配置文件如下,是从程序上的时钟和sdram配置改的,也参考了网上的意见,但是网上也没有看到有人在sdram上调试成功的

lpc1788_debug_sdram.ini
  1. /******************************************************************
  2. * File: LPC43XX_E_SDRAM_KEIL_DEBUG.ini
  3. *
  4. * Date: October 2012           Author: NXP
  5. *
  6. * KEIL µVision INI file for initialisation of LPC43xx when debugging code
  7. * running from external SDRAM @ 0x28000000. The SDRAM must be initialized
  8. * before the debugger can load the image to it.
  9. * This use case is just for debugging, in a real application the code
  10. * which goes into SDRAM will come from an external flash and the startup
  11. * code needs to initialize the SDRAM and relocate the image.
  12. *
  13. * This script initializes the SDRAM on the KEIL MCB4300 board.
  14. *
  15. ******************************************************************/


  16. FUNC void Setup (unsigned int region) {
  17.   region &= 0xFF000000;
  18. //  _WDWORD(0x40043100, 0);                                // Set the shadow pointer to zero (can't map SDRAM to 0)
  19.   SP = _RDWORD(region);                     // Setup Stack Pointer
  20.   PC = _RDWORD(region + 4);                 // Setup Program Counter
  21.   _WDWORD(0xE000ED08, region);                                // Set the vector table offset
  22. }

  23. FUNC void Clock_Setup (void) {
  24.         _WDWORD(0x400FC1A0, 0x00000021);                        // Enable the crystal oscillator
  25.         while((_RDWORD(0x400FC1A0) & (1<<6)) == 0);        // delay wait for oscillator to start
  26.         _WDWORD(0x400FC10C, 0x00000001);                        // select crystal oscillator
  27.         _WDWORD(0x400FC084, 0x00000009);                        // Configure PLL0 to multiply x 10 for 120 MHz operation from 12 MHz crystal
  28.         _WDWORD(0x400FC080, 0x00000001);                        // PLL0 Enable
  29.         _WDWORD(0x400FC08C, 0x000000AA);                        //
  30.         _WDWORD(0x400FC08C, 0x00000055);                        //
  31.        
  32.         while((_RDWORD(0x400FC088) & (1<<10)) == 0);        // Wait for PLOCK0
  33.        
  34.         _WDWORD(0x400FC104, 0x00000101);                        //PLL0 not divide as the cpuclock
  35.         _WDWORD(0x400FC100, 0x00000001);                        //cpuclock / 2 as the emcclock
  36.         _WDWORD(0x400FC0C4, 0x00000800);                        //emcclock enable

  37.         _WDWORD(0x400FC1B0, 0x00000003);                        //120M support
  38. }


  39. FUNC void LPC1788_setupEmc (void)
  40. {   
  41. // Setup pins for external data/address bus
  42. _WDWORD(0x4002C180, (1 << 9)|1);   // D0,  P3.0   
  43. _WDWORD(0x4002C184, (1 << 9)|1);   // D1,  P3.1   
  44. _WDWORD(0x4002C188, (1 << 9)|1);   // D2,  P3.2   
  45. _WDWORD(0x4002C18C, (1 << 9)|1);   // D3,  P3.3   
  46. _WDWORD(0x4002C190, (1 << 9)|1);   // D4,  P3.4   
  47. _WDWORD(0x4002C194, (1 << 9)|1);   // D5,  P3.5   
  48. _WDWORD(0x4002C198, (1 << 9)|1);   // D6,  P3.6   
  49. _WDWORD(0x4002C19C, (1 << 9)|1);   // D7,  P3.7                                      
  50. _WDWORD(0x4002C1A0, (1 << 9)|1);   // D8,  P3.8                                      
  51. _WDWORD(0x4002C1A4, (1 << 9)|1);   // D9,  P3.9                                      
  52. _WDWORD(0x4002C1A8, (1 << 9)|1);   // D10, P3.10                                    
  53. _WDWORD(0x4002C1AC, (1 << 9)|1);   // D11, P3.11                                    
  54. _WDWORD(0x4002C1B0, (1 << 9)|1);   // D12, P3.12                                    
  55. _WDWORD(0x4002C1B4, (1 << 9)|1);   // D13, P3.13                                    
  56. _WDWORD(0x4002C1B8, (1 << 9)|1);   // D14, P3.14                                    
  57. _WDWORD(0x4002C1BC, (1 << 9)|1);   // D15, P3.15   

  58. _WDWORD(0x4002C200, (1 << 9)|1);   // A0,  P4.0
  59. _WDWORD(0x4002C204, (1 << 9)|1);   // A1,  P4.1
  60. _WDWORD(0x4002C208, (1 << 9)|1);   // A2,  P4.2   
  61. _WDWORD(0x4002C20C, (1 << 9)|1);   // A3,  P4.3   
  62. _WDWORD(0x4002C210, (1 << 9)|1);   // A4,  P4.4   
  63. _WDWORD(0x4002C214, (1 << 9)|1);   // A5,  P4.5   
  64. _WDWORD(0x4002C218, (1 << 9)|1);   // A6,  P4.6   
  65. _WDWORD(0x4002C21C, (1 << 9)|1);   // A7,  P4.7   
  66. _WDWORD(0x4002C220, (1 << 9)|1);   // A8,  P4.8   
  67. _WDWORD(0x4002C224, (1 << 9)|1);   // A9,  P4.9   
  68. _WDWORD(0x4002C228, (1 << 9)|1);   // A10, P4.10   
  69. _WDWORD(0x4002C22C, (1 << 9)|1);   // A11, P4.11   
  70. _WDWORD(0x4002C230, (1 << 9)|1);   // A12, P4.12   
  71. _WDWORD(0x4002C234, (1 << 9)|1);   // A13, P4.13   
  72. _WDWORD(0x4002C238, (1 << 9)|1);   // A14, P4.14   

  73. _WDWORD(0x4002C264, (1 << 9)|1);   // WEN, P4.25   

  74. _WDWORD(0x4002C140, (1 << 9)|1);   // CAS, P2.16
  75. _WDWORD(0x4002C144, (1 << 9)|1);   // RAS, P2.17
  76. _WDWORD(0x4002C148, (1 << 9)|1);   // CLK, P2.18
  77. _WDWORD(0x4002C150, (1 << 9)|1);   // DYCS,P2.20
  78. _WDWORD(0x4002C160, (1 << 9)|1);   // CKE, P2.24  
  79. _WDWORD(0x4002C170, (1 << 9)|1);   // DMQ0,P2.28   
  80. _WDWORD(0x4002C174, (1 << 9)|1);   // DMQ1,P2.29   

  81. _WDWORD(0x400FC1DC, 0x00001010);   // (0x1010+1)* 250ps

  82. // Initialize EMC
  83. _WDWORD(0x2009C000, 0x00000001); // CONTROL=1 = Enable EMC
  84. _WDWORD(0x2009C008, 0x00000000); // CONFIG=0
  85. _WDWORD(0x2009C100, 0x00000680); // DYNAMICCONFIG0
  86. _WDWORD(0x2009C104, 0x00000202); // DYNAMICRASCAS0

  87. _WDWORD(0x2009C028, 0x00000001); // DYNAMICREADCONFIG

  88. _WDWORD(0x2009C030, 0x00000001); // DYNAMICRP
  89. _WDWORD(0x2009C034, 0x00000003); // DYNAMICRAS
  90. _WDWORD(0x2009C038, 0x00000000); // DYNAMICREX
  91. _WDWORD(0x2009C03C, 0x00000001); // DYNAMICAPR
  92. _WDWORD(0x2009C040, 0x00000005); // DYNAMICDAL
  93. _WDWORD(0x2009C044, 0x00000001); // DYNAMICWR
  94. _WDWORD(0x2009C048, 0x00000004); // DYNAMICRC
  95. _WDWORD(0x2009C04C, 0x00000004); // DYNAMICRFC
  96. _WDWORD(0x2009C050, 0x00000005); // DYNAMICXSR
  97. _WDWORD(0x2009C054, 0x00000001); // DYNAMICRRD
  98. _WDWORD(0x2009C058, 0x00000001); // DYNAMICMRD

  99. _WDWORD(0x2000C020, 0x00000183); // DYNAMICCONTROL - NOP
  100. _WDWORD(0x2000C020, 0x00000103); // DYNAMICCONTROL - PRECHARGE_ALL

  101. _WDWORD(0x2000C024, 0x0000001D); // DYNAMICREFRESH = 1D

  102. _WDWORD(0x2009C020, 0x00000083); // DYNAMICCONTROL - MODE

  103. _RDWORD(0xA0000000 | (0x23<<12));// Write 16-bit SDRAM Mode register burst 8- this is a read as requested by the SDRAM spec

  104. _WDWORD(0x2009C020, 0x00000000); // DYNAMICCONTROL - NORMAL

  105. _WDWORD(0x2009C100, 0x00080680); // DYNAMICCONFIG0

  106. }

  107. FUNC void mpu_region_setup(unsigned int a_addr,
  108.                        unsigned int a_region,
  109.                        unsigned int a_size,
  110.                        unsigned int a_ap,
  111.                        unsigned int a_mem_attrib,
  112.                        unsigned int a_srd,
  113.                        unsigned int a_XN,
  114.                        unsigned int a_enable)
  115. {
  116.     // Setup procedure for each region
  117.     unsigned int temp;
  118.     temp = (a_addr & 0xFFFFFFE0) | (a_region & 0xF) | 0x10 ;
  119.     _WDWORD(0xE000ED9C, temp); // RBAR
  120.     temp = ((a_XN & 0x1)<<28) | ((a_ap & 0x7)<<24) | ((a_mem_attrib & 0x3F)<<16) | ((a_srd&0xFF)<<8) | ((a_size & 0x1F)<<1)| (a_enable & 0x1) ;
  121. //    temp = ((a_ap & 0x7)<<24) | ((a_size & 0x1F)<<1)| (a_enable & 0x1) ;
  122.     _WDWORD(0xE000EDA0, temp); // RASR
  123.     _WDWORD(0xE000ED94, 1); // MPU enable
  124. }

  125. Clock_Setup();

  126. //# Initialize the external memory interface. If booting in EMC mode,
  127. //# the bootloader initializes the EMC, but enables only A[13:0].
  128. LPC1788_setupEmc();

  129. //# The LOAD command downloads the image to the memory region specified by the linker script as load region.
  130. LOAD %L INCREMENTAL

  131. //mpu_region_setup( 0xA0000000,
  132. //                   7, // always reprogramming MPU region 7
  133. //                   0x18,//32MB
  134. //                   3, // full access
  135. //                   0, // strongly ordered, shareable
  136. //                   0, // subregion disabled
  137. //                   0, // allow instruction execution
  138. //                   1) ; // region enabled
  139. mpu_region_setup( 0xA0000000,0,0x18,3,7,0,0,1);

  140. //# Get ready to execute image in the given memory region
  141. Setup(0xA0000000);
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2015-9-22 15:32:22 | 显示全部楼层
这个是分散加载的段设置

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-9-22 16:00:26 | 显示全部楼层
方法是思路是对的。
1. 检查SDRAM是否可以正常读写
2. 检查MPU配置是允许SDRAM执行
3. 下载费不了几个时间,也就调些硬件驱动时用得多些,没必要折腾自己不熟悉的。

出0入0汤圆

发表于 2015-9-22 19:37:14 | 显示全部楼层
需要配置MPU

出0入0汤圆

发表于 2015-9-22 20:44:33 | 显示全部楼层
myxiaonia 发表于 2015-9-22 15:32
这个是分散加载的段设置

记得论坛上有的,但是现在不怎么用1788了,忘记在哪了

出0入0汤圆

 楼主| 发表于 2015-9-22 21:19:59 | 显示全部楼层
LQS1200 发表于 2015-9-22 20:44
记得论坛上有的,但是现在不怎么用1788了,忘记在哪了

你有没有使用过调试程序啊,我找遍了各个角落,,,有人提出过相同的需求,却没有看到过完整确切的答案

出0入0汤圆

发表于 2015-9-22 22:08:21 | 显示全部楼层
myxiaonia 发表于 2015-9-22 21:19
你有没有使用过调试程序啊,我找遍了各个角落,,,有人提出过相同的需求,却没有看到过完整确切的答案 ...

明天问下先,不知道还有没有

出0入0汤圆

 楼主| 发表于 2015-9-22 22:16:31 | 显示全部楼层
本帖最后由 myxiaonia 于 2015-9-22 22:38 编辑

在程序装载后,更新sp,pc等  我发现xpsr的t位一直为0,而cm3必须为1(thumb模式),我强制设置为1还是为0

就是这个罪魁祸首,奇怪的是寄存器窗口xpsr显示值是0x81000000,这里t位是1,展开后t位却为0

贴两张截图


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-9-23 00:14:44 | 显示全部楼层
原来是vtor设置最多0-28位,并且29位还是code或者ram指示器 这样的话设置为0xa0000000效果成了0x20000000

出0入0汤圆

发表于 2015-9-23 08:46:24 | 显示全部楼层
工程还没找到,参考下http://blog.csdn.net/waitig1992/article/details/38561867

出0入0汤圆

 楼主| 发表于 2015-9-23 10:42:48 | 显示全部楼层
本帖最后由 myxiaonia 于 2015-9-23 10:46 编辑


这是你的博客吗  我看过啊嘿嘿  但是怎么忽略了在sdram调试成功的经验,估计是外部ram没有写明是sdram就晃眼了。。。回家测试下看看

我之前写外部字库到sst39v1602也是用的这个博客上的norflash配置ini,当时这个很快就搞成功了,用上这个配置文件立马ok

出0入0汤圆

发表于 2015-9-23 11:54:35 | 显示全部楼层
myxiaonia 发表于 2015-9-23 10:42
这是你的博客吗  我看过啊嘿嘿  但是怎么忽略了在sdram调试成功的经验,估计是外部ram没有写明是sdram就 ...

不是,没那么高手

出0入0汤圆

 楼主| 发表于 2015-9-24 10:03:34 | 显示全部楼层
终于搞定了,贴出正确的配置文件,后来者不用再走弯路,感谢楼上兄弟贴出的博客地址,让我增强信心,因为之前在网上没有找到在sdram调试程序的先例,方向不明朗信心很受打击

基本配置过程就是那样,问题出在两处:emc操作寄存器,DYNAMICCONTROL 地址写错了,时钟配置寄存器里,没有使能外设时钟和gpio时钟,好低级的错误。。。。越是低级错误排错越是匪夷所思,血的教训。。。

  1. /******************************************************************
  2. * File: LPC43XX_E_SDRAM_KEIL_DEBUG.ini
  3. *
  4. * Date: October 2012           Author: NXP
  5. *
  6. * KEIL µVision INI file for initialisation of LPC43xx when debugging code
  7. * running from external SDRAM @ 0x28000000. The SDRAM must be initialized
  8. * before the debugger can load the image to it.
  9. * This use case is just for debugging, in a real application the code
  10. * which goes into SDRAM will come from an external flash and the startup
  11. * code needs to initialize the SDRAM and relocate the image.
  12. *
  13. * This script initializes the SDRAM on the KEIL MCB4300 board.
  14. *
  15. ******************************************************************/


  16. FUNC void Setup (unsigned int region) {
  17.     region &= 0xFF000000;
  18. //    _WDWORD(0x40043100, 0);                                        // Set the shadow pointer to zero (can't map SDRAM to 0)
  19.     SP = _RDWORD(region);                       // Setup Stack Pointer
  20.     PC = _RDWORD(region + 4);                   // Setup Program Counter
  21.     _WDWORD(0xE000ED08, region);                                // Set the vector table offset
  22. }

  23. FUNC void Clock_Setup (void) {
  24.         _WDWORD(0x400FC1A0, 0x00000021);                        // Enable the crystal oscillator
  25. //        while((_RDWORD(0x400FC1A0) & (1<<6)) == 0);        // delay wait for oscillator to start
  26.     _sleep_ (100);                              // Wait for main oscillator to stabilize        _WDWORD(0x400FC10C, 0x00000001);                        // select crystal oscillator
  27.         _WDWORD(0x400FC084, 0x00000009);                        // Configure PLL0 to multiply x 10 for 120 MHz operation from 12 MHz crystal
  28.         _WDWORD(0x400FC080, 0x00000001);                        // PLL0 Enable
  29.         _WDWORD(0x400FC08C, 0x000000AA);                        //
  30.         _WDWORD(0x400FC08C, 0x00000055);                        //
  31.        
  32. //        while((_RDWORD(0x400FC088) & (1<<10)) == 0);        // Wait for PLOCK0
  33.     _sleep_ (100);                              // Wait for PLOCK0
  34.         _WDWORD(0x400FC104, 0x00000101);                        //PLL0 not divide as the cpuclock
  35.         _WDWORD(0x400FC100, 0x00000001);                        //cpuclock / 2 as the emcclock
  36.         _WDWORD(0x400FC18A, 0x00000002);                        //cpuclock / 2 as the pclock
  37.         _WDWORD(0x400FC0C4, 0x00008800);                        //emcclock gpio enable

  38.         _WDWORD(0x400FC1B0, 0x00000003);                        //120M support
  39. }


  40. FUNC void LPC1788_setupEmc (void)
  41. {   
  42.     // Setup pins for external data/address bus
  43.     _WDWORD(0x4002C180, (1 << 9)|1);   // D0,  P3.0   
  44.     _WDWORD(0x4002C184, (1 << 9)|1);   // D1,  P3.1   
  45.     _WDWORD(0x4002C188, (1 << 9)|1);   // D2,  P3.2   
  46.     _WDWORD(0x4002C18C, (1 << 9)|1);   // D3,  P3.3   
  47.     _WDWORD(0x4002C190, (1 << 9)|1);   // D4,  P3.4   
  48.     _WDWORD(0x4002C194, (1 << 9)|1);   // D5,  P3.5   
  49.     _WDWORD(0x4002C198, (1 << 9)|1);   // D6,  P3.6   
  50.     _WDWORD(0x4002C19C, (1 << 9)|1);   // D7,  P3.7                                      
  51.     _WDWORD(0x4002C1A0, (1 << 9)|1);   // D8,  P3.8                                      
  52.     _WDWORD(0x4002C1A4, (1 << 9)|1);   // D9,  P3.9                                      
  53.     _WDWORD(0x4002C1A8, (1 << 9)|1);   // D10, P3.10                                    
  54.     _WDWORD(0x4002C1AC, (1 << 9)|1);   // D11, P3.11                                    
  55.     _WDWORD(0x4002C1B0, (1 << 9)|1);   // D12, P3.12                                    
  56.     _WDWORD(0x4002C1B4, (1 << 9)|1);   // D13, P3.13                                    
  57.     _WDWORD(0x4002C1B8, (1 << 9)|1);   // D14, P3.14                                    
  58.     _WDWORD(0x4002C1BC, (1 << 9)|1);   // D15, P3.15   

  59.     _WDWORD(0x4002C200, (1 << 9)|1);   // A0,  P4.0
  60.     _WDWORD(0x4002C204, (1 << 9)|1);   // A1,  P4.1
  61.     _WDWORD(0x4002C208, (1 << 9)|1);   // A2,  P4.2   
  62.     _WDWORD(0x4002C20C, (1 << 9)|1);   // A3,  P4.3   
  63.     _WDWORD(0x4002C210, (1 << 9)|1);   // A4,  P4.4   
  64.     _WDWORD(0x4002C214, (1 << 9)|1);   // A5,  P4.5   
  65.     _WDWORD(0x4002C218, (1 << 9)|1);   // A6,  P4.6   
  66.     _WDWORD(0x4002C21C, (1 << 9)|1);   // A7,  P4.7   
  67.     _WDWORD(0x4002C220, (1 << 9)|1);   // A8,  P4.8   
  68.     _WDWORD(0x4002C224, (1 << 9)|1);   // A9,  P4.9   
  69.     _WDWORD(0x4002C228, (1 << 9)|1);   // A10, P4.10   
  70.     _WDWORD(0x4002C22C, (1 << 9)|1);   // A11, P4.11   
  71.     _WDWORD(0x4002C230, (1 << 9)|1);   // A12, P4.12   
  72.     _WDWORD(0x4002C234, (1 << 9)|1);   // A13, P4.13   
  73.     _WDWORD(0x4002C238, (1 << 9)|1);   // A14, P4.14   

  74.     _WDWORD(0x4002C264, (1 << 9)|1);   // WEN, P4.25   

  75.     _WDWORD(0x4002C140, (1 << 9)|1);   // CAS, P2.16
  76.     _WDWORD(0x4002C144, (1 << 9)|1);   // RAS, P2.17
  77.     _WDWORD(0x4002C148, (1 << 9)|1);   // CLK, P2.18
  78.     _WDWORD(0x4002C150, (1 << 9)|1);   // DYCS,P2.20
  79.     _WDWORD(0x4002C160, (1 << 9)|1);   // CKE, P2.24  
  80.     _WDWORD(0x4002C170, (1 << 9)|1);   // DMQ0,P2.28   
  81.     _WDWORD(0x4002C174, (1 << 9)|1);   // DMQ1,P2.29   

  82.     _WDWORD(0x400FC1DC, 0x00001010);   // (0x1010+1)* 250ps

  83.     // Initialize EMC
  84.     _WDWORD(0x2009C000, 0x00000001);   // CONTROL=1 = Enable EMC
  85.     _WDWORD(0x2009C008, 0x00000000);   // CONFIG=0
  86.     _WDWORD(0x2009C100, 0x00000680);   // DYNAMICCONFIG0
  87.     _WDWORD(0x2009C104, 0x00000202);   // DYNAMICRASCAS0
  88.                                        
  89.     _WDWORD(0x2009C028, 0x00000001);   // DYNAMICREADCONFIG
  90.                                        
  91.     _WDWORD(0x2009C030, 0x00000001);   // DYNAMICRP
  92.     _WDWORD(0x2009C034, 0x00000003);   // DYNAMICRAS
  93.     _WDWORD(0x2009C038, 0x00000000);   // DYNAMICREX
  94.     _WDWORD(0x2009C03C, 0x00000001);   // DYNAMICAPR
  95.     _WDWORD(0x2009C040, 0x00000005);   // DYNAMICDAL
  96.     _WDWORD(0x2009C044, 0x00000001);   // DYNAMICWR
  97.     _WDWORD(0x2009C048, 0x00000004);   // DYNAMICRC
  98.     _WDWORD(0x2009C04C, 0x00000004);   // DYNAMICRFC
  99.     _WDWORD(0x2009C050, 0x00000005);   // DYNAMICXSR
  100.     _WDWORD(0x2009C054, 0x00000001);   // DYNAMICRRD
  101.     _WDWORD(0x2009C058, 0x00000001);   // DYNAMICMRD
  102.                                        
  103.     _WDWORD(0x2009C020, 0x00000183);   // DYNAMICCONTROL - NOP
  104.     _sleep_(100);
  105.     _WDWORD(0x2009C020, 0x00000103);   // DYNAMICCONTROL - PRECHARGE_ALL
  106.     _sleep_(100);                                      
  107.     _WDWORD(0x2009C024, 0x0000001D);   // DYNAMICREFRESH = 1D
  108.                                        
  109.     _WDWORD(0x2009C020, 0x00000083);   // DYNAMICCONTROL - MODE
  110.                                        
  111.     _RDWORD(0xA0000000 | (0x23<<12));  // Write 16-bit SDRAM Mode register burst 8- this is a read as requested by the SDRAM spec
  112.                                        
  113.     _WDWORD(0x2009C020, 0x00000003);   // DYNAMICCONTROL - NORMAL
  114.                                        
  115.     _WDWORD(0x2009C100, 0x00080680);   // DYNAMICCONFIG0
  116.     _sleep_(100);                                      
  117. }

  118. FUNC void mpu_region_setup(unsigned int a_addr,
  119.                        unsigned int a_region,
  120.                        unsigned int a_size,
  121.                        unsigned int a_ap,
  122.                        unsigned int a_mem_attrib,
  123.                        unsigned int a_srd,
  124.                        unsigned int a_XN,
  125.                        unsigned int a_enable)
  126. {
  127.     // Setup procedure for each region
  128.     unsigned int temp;
  129.     temp = (a_addr & 0xFFFFFFE0) | (a_region & 0xF) | 0x10 ;
  130.     _WDWORD(0xE000ED9C, temp); // RBAR
  131.     temp = ((a_XN & 0x1)<<28) | ((a_ap & 0x7)<<24) | ((a_mem_attrib & 0x3F)<<16) | ((a_srd&0xFF)<<8) | ((a_size & 0x1F)<<1)| (a_enable & 0x1) ;
  132.     _WDWORD(0xE000EDA0, temp); // RASR
  133.     _WDWORD(0xE000ED24, 1<<18); // usage fault enable
  134.     _WDWORD(0xE000ED94, 5); // MPU enable
  135. }

  136. Clock_Setup();

  137. LPC1788_setupEmc();

  138. LOAD %L INCREMENTAL

  139. mpu_region_setup( 0xA0000000,0,0x18,3,7,0,0,1);

  140. Setup(0x10000000);
复制代码

出0入0汤圆

发表于 2015-9-24 13:46:54 | 显示全部楼层
搞定了就好,恭喜

出0入0汤圆

发表于 2015-12-13 16:25:57 | 显示全部楼层
按你的方法还是调不出,SDRAM是好的,你看看对不对
LR_IROM1 0x10000000 0x00010000  {    ; load region size_region
  ER_IROM1 0x10000000 0x00010000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_RAM1 0xA0010000 UNINIT 0x00010000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

LR_ROM1 0xA0000000 0x00010000  {
  ER_ROM1 0xA0000000 0x00010000  {  ; load address = execution address
   .ANY (+RO)
  }
}

出0入0汤圆

发表于 2015-12-14 21:29:22 来自手机 | 显示全部楼层
已搞惦了

出0入0汤圆

发表于 2015-12-18 22:58:51 来自手机 | 显示全部楼层
楼主文件有错误

出0入0汤圆

 楼主| 发表于 2015-12-18 23:24:02 | 显示全部楼层
R8C 发表于 2015-12-18 22:58
楼主文件有错误

哦 请指出哪里有错误?

出0入0汤圆

发表于 2015-12-19 08:58:43 | 显示全部楼层
错误地方:
_WDWORD(0x400FC18A, 0x00000002);                        //cpuclock / 2 as the pclock
正确应该是:
_WDWORD(0x400FC1A8, 0x00000002);                        //cpuclock / 2 as the pclock
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 17:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表