memtest.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:3k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2.  * FILE : Sram.c 
  3.  * Description: 2420 user defined test program.
  4.  * History:
  5.  * Nov/xx/2002 for 2420. S.J.Lee
  6.  */
  7. #include "def.h"
  8. #include "option.h"
  9. #include "2440lib.h"
  10. #include "2440addr.h"
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include <stdio.h>
  14. #define SRAM_SADDR _NONCACHE_STARTADDRESS
  15. #define SRAM_EADDR (SRAM_SADDR+ (128*1024)) // Total : 256KB, 0x3100_0000-0x3101_FFFF
  16. void Mem_Test(int Print_msg)
  17. {
  18. U32 addr=0, indata, src_data, i;
  19. U32 error;
  20. static int offset=0;
  21. U16 jump_offset=1;
  22. //Uart_Printf("Check: SRAM Area must be in non-cacheable area!n");
  23. //Uart_Printf("SRAM W/R test[%xh-%xh], R/W offset[%d]n", SRAM_SADDR, SRAM_EADDR-1, offset);
  24. // for(i=0; i<3; i++) { // 8/16/32-bit.
  25. for(i=2; i<3; i++) { // 8/16/32-bit.
  26. if(i==0) jump_offset=1;
  27. else if(i==1) jump_offset=2;
  28. else if(i==2) jump_offset=4;
  29. ///////////////////// Clear Source/Target ////////////////////
  30. //Uart_Printf("Clear data.n");
  31. for(addr=0; (SRAM_SADDR+addr)<SRAM_EADDR; addr+=4) {
  32. *(U32 *)(SRAM_SADDR+addr) = 0x0;
  33. if(!(addr%(4*1024))) {
  34. //Uart_Printf("bbbbbbbbbb%10x", SRAM_SADDR+addr);
  35. }
  36. }
  37. //Uart_Printf("bbbbbbbbbb%10xn", SRAM_SADDR+addr);
  38. ///////////////////// Write ////////////////////
  39. //Uart_Printf("Write data[%x-%x].n", SRAM_SADDR, SRAM_EADDR);
  40. if(Print_msg>0) Uart_Printf("Wr(%d-bit)...", jump_offset*8);
  41. if(Print_msg>1) Uart_Printf("ADDR:%8x", SRAM_SADDR);
  42. Led_Display(0x1);
  43. for(addr=0; (SRAM_SADDR+addr)<SRAM_EADDR; addr+=jump_offset) {
  44. src_data = addr+offset;
  45. switch(jump_offset) {
  46. case 1:
  47. *(U8 *)(SRAM_SADDR+addr) = src_data;
  48. break;
  49. case 2:
  50. *(U16 *)(SRAM_SADDR+addr) = src_data;
  51. break;
  52. case 4:
  53. *(U32 *)(SRAM_SADDR+addr) = src_data;
  54. break;
  55. }
  56. if(!(addr%(4*1024))) {
  57. if(Print_msg>1) Uart_Printf("bbbbbbbb%8x", SRAM_SADDR+addr);
  58. }
  59. }
  60. if(Print_msg>1) Uart_Printf("bbbbbbbb%8x  ", SRAM_SADDR+addr);
  61. ///////////////////// Verify //////////////////////
  62. //Uart_Printf("Verify[%x-%x].n", SRAM_SADDR, SRAM_EADDR);
  63. if(Print_msg>0) Uart_Printf("Verify...");
  64. if(Print_msg>1) Uart_Printf("ADDR:%8x", SRAM_SADDR);
  65. Led_Display(0x2);
  66. for(error=0, addr=0; (SRAM_SADDR+addr)<SRAM_EADDR; addr+=jump_offset) {
  67. switch(jump_offset) {
  68. case 1:
  69. src_data = (U8)(addr+offset);
  70. indata = *(U8 *)(SRAM_SADDR+addr);
  71. break;
  72. case 2:
  73. src_data = (U16)(addr+offset);
  74. indata = *(U16 *)(SRAM_SADDR+addr);
  75. break;
  76. case 4:
  77. src_data = (U32)(addr+offset);
  78. indata = *(U32 *)(SRAM_SADDR+addr);
  79. break;
  80. }
  81. if(!(addr%(4*1024))) {
  82. if(Print_msg>1) Uart_Printf("bbbbbbbb%8x", SRAM_SADDR+addr);
  83. }
  84. if(indata != src_data) {
  85. error++;
  86. //Uart_Printf("%xH[W:%x, R:%x]n", addr, src_data, indata);
  87. }
  88. }
  89. if(Print_msg>1) Uart_Printf("bbbbbbbb%8x  ", SRAM_SADDR+addr);
  90. if(error!=0) {
  91. if(Print_msg>0) Uart_Printf("ERROR(%d)...nn", error);
  92. } else {
  93. if(Print_msg>0) Uart_Printf("OK!n");
  94. //Uart_Printf(".");
  95. }
  96. Led_Display(0xf);
  97. }
  98. offset++;
  99. }