memory testing start
authorDan White <dan@whiteaudio.com>
Sat, 13 Apr 2013 17:42:33 +0000 (12:42 -0500)
committerDan White <dan@whiteaudio.com>
Sat, 13 Apr 2013 17:42:33 +0000 (12:42 -0500)
msp4th/Makefile
msp4th/ldscript_ns430
msp4th/main.c
msp4th/msp4th.c
msp4th/msp4th.h

index 1ad3d460c1f39a7d6207c4c1127f547c92005810..0a20f6f550ffc15bcf2f6ba395959515e0855066 100644 (file)
@@ -12,11 +12,12 @@ SHELL = /bin/bash
 
 TARGET     = main
 #MCU        = msp430f5529
-MCU        = msp1
-#MCU        = msp430x2013
+#MCU        = msp1
+MCU        = msp430x2013
 # List all the source files here
 # eg if you have a source file foo.c then list it here
 SOURCES = main.c ns430-uart.c msp4th.c
+#SOURCES = main.c ns430-uart.c
 # Include are located in the Include directory
 #INCLUDES = -IInclude
 INCLUDES = -I.
@@ -24,6 +25,7 @@ INCLUDES = -I.
 #######################################################################################
 #CFLAGS   = -mmcu=$(MCU) -g -Os -Wall -Wunused $(INCLUDES)   
 #CFLAGS   = -mmcu=$(MCU) -Werror -Wall -Wunused -mendup-at=main $(INCLUDES)
+#CFLAGS   = -mmcu=$(MCU) -g -Os -Werror -Wall -Wunused $(INCLUDES)
 CFLAGS   = -mmcu=$(MCU) -g -Os -Werror -Wall -Wunused $(INCLUDES)
 #ASFLAGS  = -mmcu=$(MCU) -x assembler-with-cpp -Wa,-gstabs
 #ASFLAGS  = -mmcu=$(MCU) -Wall -Wunused -mendup-at=main $(INCLUDES)
index 8480b889cb0e0d3b01d0b5c8ed1705fed0bf763d..7a8168ce229a099ceb650037b9a401504abddc76 100644 (file)
@@ -120,6 +120,7 @@ SECTIONS
   }  > data
    PROVIDE (__data_load_start = LOADADDR(.data) );
    PROVIDE (__data_size = SIZEOF(.data) );
+   PROVIDE (__data_end = LOADADDR(.data) + SIZEOF(.data) );
   /* Bootloader.  */
   .bootloader   :
   {
index 7a909573d2fea808d09a27bb70e2b51f183df46a..1de6ef557d6e286710976de92ccdc055e30c86d2 100644 (file)
@@ -9,10 +9,9 @@
 
 
 #define DEVBOARD_CLOCK 12000000L
-#define BAUDRATE 4800L
+#define BAUDRATE 19200L
 
 
-/*NAKED(_reset_vector__){*/
 void __attribute__ ((naked)) _reset_vector__(void) {
   __asm__ __volatile__("br #main"::);
 }
@@ -35,12 +34,22 @@ static void __inline__ eint(void){
   __asm__ __volatile__ ( "eint" :: );
 }
 
+
+
+
+
+
 int main(void){
 
     uint16_t tmp;
 
+    volatile int16_t *dirMemory;
+    dirMemory = 0;
+
     dint();
 
+
+    // chip setup for UART0 use
     PAPER = 0x0030;
     PAOUT = 0x0000;
     PAOEN = 0x0010;  // set data direction registers
@@ -48,11 +57,14 @@ int main(void){
     UART0_BCR = BCR(DEVBOARD_CLOCK, BAUDRATE);
     UART0_CR = UARTEn;
 
+    // a read clears the register
     tmp = UART0_SR;
 
 
-    uart_putchar('!');
 
+
+    /*
+    uart_puts((uint8_t *)"UART echo mode, ` to exit:");
     char c;
     while (1) {
         c = uart_getchar();
@@ -60,15 +72,106 @@ int main(void){
             break;
         uart_putchar(c);
     }
+    */
+
+
+
+    /*
+     * dump contents of all RAM
+     */
+    volatile uint16_t *addr;
+
+    uart_puts((uint8_t *)"Memory dump:");
+    uart_putchar('\r');
+    uart_putchar('\n');
+
+    for (addr = (uint16_t *)0x4000; addr < (uint16_t *)0xfffe; addr++) {
+        printHexWord((int16_t)addr);
+        uart_putchar(' ');
+        printHexWord((int16_t)*addr);
+        uart_putchar('\r');
+        uart_putchar('\n');
+    }
+
+
+
+
+
+
+    /*
+     * memtest starting at end of program code
+     */
+
+    const int16_t patterns[] = {
+        0x0000,
+        0x0001,
+        0x0002,
+        0x0004,
+        0x0008,
+        0x0010,
+        0x0020,
+        0x0040,
+        0x0080,
+        0x0100,
+        0x0200,
+        0x0400,
+        0x0800,
+        0x1000,
+        0x2000,
+        0x4000,
+        0x8000,
+        0xaaaa,
+        0x5555,
+        0xffff,
+        0x0000,
+    };
+
+    volatile int16_t idx;
+    volatile int16_t readback;
+    volatile int16_t pattern;
+
+    const int16_t dend = (int16_t)0x51f0;
+    const int16_t memend = (int16_t)0xff80;
+
+    uart_puts((uint8_t *)"*** Memtest patterns ***");
+
+    printHexWord((int16_t)dend);
+    uart_puts((uint8_t *)" -- start address");
+
+    printHexWord((int16_t)memend);
+    uart_puts((uint8_t *)" -- end address");
+
+    for (idx=0; idx < sizeof(patterns)/sizeof(int16_t); idx++) {
+        pattern = patterns[idx];
+
+        printHexWord(pattern);
+        uart_puts((uint8_t *)" -- write pattern");
+
+        // write pattern to all locations
+        for (addr = (uint16_t *)dend; addr < (uint16_t *)memend; addr++) {
+            *addr = (uint16_t)pattern;
+        }
+
+        printHexWord(pattern);
+        uart_puts((uint8_t *)" -- readback pattern");
+
+        // readback pattern
+        for (addr = (uint16_t *)dend; addr < (uint16_t *)memend; addr++) {
+            readback = (int16_t)*addr;
+
+            if (readback != pattern) {
+                printHexWord((int16_t)addr);
+                uart_putchar(' ');
+                printHexWord(pattern);
+                uart_putchar(' ');
+                printHexWord(readback);
+                uart_putchar('\r');
+                uart_putchar('\n');
+            }
+        }
+    }
 
-    uart_putchar('t');
-    uart_putchar('e');
-    uart_putchar('s');
-    uart_putchar('t');
-    uart_putchar('i');
-    uart_putchar('n');
-    uart_putchar('g');
-    uart_puts((uint8_t *)"This is a test of the UART serial printing\r\nit really does work ...\r\n");
+    uart_puts((uint8_t *)"*** Memtest done ***");
 
     init_msp4th();
     processLoop();
index 69694b34c3bef482b3296e53ce751f680cf3e99c..4b84ad43195ab909e3e4d9eaa9d336111e889bce 100644 (file)
@@ -381,8 +381,8 @@ void getWord(void)
 
     wordBuffer[0] = 0;
 
-    uart_putchar('.');
-    uart_putchar('.');
+    /*uart_putchar('.');*/
+    /*uart_putchar('.');*/
 
     /*while (wordBuffer[0] == 0) {*/
     waiting = 1;
@@ -392,6 +392,7 @@ void getWord(void)
 
         while ((c <= ' ') && (c != 0)) {
             c = getKeyB();    /* strip leading spaces */
+            uart_putchar('a');
             /*uart_putchar(c);*/
         }
 
@@ -409,8 +410,9 @@ void getWord(void)
                 /*}*/
             /*} else {*/
                 while (c > ' ') {
+                    uart_putchar('b');
                     wordBuffer[k++] = c;
-                    uart_putchar(c);
+                    /*uart_putchar(c);*/
                     c = getKeyB();
                 }
             /*}*/
@@ -418,6 +420,7 @@ void getWord(void)
             wordBuffer[k] = 0;
             waiting = 0;
         } else {
+            uart_putchar('c');
             wordBuffer[0] = 0;
             getLine();
         }
@@ -438,14 +441,14 @@ int16_t popMathStack(void)
 
     k = 1;
     j = mathStack[0];
-    uart_putchar('1');
-    uart_putchar('2');
+    /*uart_putchar('1');*/
+    /*uart_putchar('2');*/
 
     for (i=1;i<MATH_STACK_SIZE;i++) {
-    uart_putchar('s');
+    /*uart_putchar('s');*/
         mathStack[i-1] = mathStack[i];
     }
-    uart_putchar('3');
+    /*uart_putchar('3');*/
     k = 0;
     return(j);
 }
@@ -454,8 +457,8 @@ void pushMathStack(int16_t n)
 {
     volatile uint16_t i;
     volatile uint16_t tmp;
-    printNumber(n);
-    uart_puts((str_t *)"<-- push math");
+    /*printNumber(n);*/
+    /*uart_puts((str_t *)"<-- push math");*/
     for (i=MATH_STACK_SIZE - 2; i > 0; i--) {
         tmp = i - 1;
         mathStack[i] = mathStack[tmp];
@@ -556,7 +559,7 @@ void numFunc()
     volatile int16_t j;
     volatile int16_t n;
 
-    uart_puts((str_t *)"in numFunc()");
+    /*uart_puts((str_t *)"in numFunc()");*/
 
     // first check for neg sign
     i = 0;
@@ -564,15 +567,15 @@ void numFunc()
         i = i + 1;
     }
 
-    uart_puts((str_t *)"there");
+    /*uart_puts((str_t *)"there");*/
 
     if ((wordBuffer[i] >= '0') && (wordBuffer[i] <= '9')) {
-        uart_puts((str_t *)"num");
+        /*uart_puts((str_t *)"num");*/
         // it is a number 
         j = 1;
         // check if hex
         if(wordBuffer[0] == '0' && wordBuffer[1] == 'x'){
-            uart_puts((str_t *)"hex");
+            /*uart_puts((str_t *)"hex");*/
             // base 16 number ... just assume all characters are good
             i = 2;
             n = 0;
@@ -585,7 +588,7 @@ void numFunc()
                 i = i + 1;
             }
         } else {
-            uart_puts((str_t *)"dec");
+            /*uart_puts((str_t *)"dec");*/
             // base 10 number
             n = 0;
             while(wordBuffer[i]){
@@ -598,16 +601,16 @@ void numFunc()
             }
         }
     } else {
-        uart_puts((str_t *)"not number");
+        /*uart_puts((str_t *)"not number");*/
         n = 0;
         j = 0;
     }
 
-    uart_putchar('.');
+    /*uart_putchar('.');*/
     pushMathStack(n);
-    uart_putchar('.');
+    /*uart_putchar('.');*/
     pushMathStack(j);
-    uart_putchar('.');
+    /*uart_putchar('.');*/
 }
 
 void ifFunc(int16_t x){     // used as goto if x == 1
@@ -615,7 +618,7 @@ void ifFunc(int16_t x){     // used as goto if x == 1
     volatile uint16_t tmp;
     volatile int16_t i;
 
-    uart_puts((str_t *)"in ifFunc");
+    /*uart_puts((str_t *)"in ifFunc");*/
 
     if(progCounter > 9999){
         tmp = progCounter - 10000;
@@ -624,28 +627,28 @@ void ifFunc(int16_t x){     // used as goto if x == 1
         addr = prog[progCounter];
     }
 
-    printNumber(addr);
-    uart_puts((str_t *)"<-- addr");
+    /*printNumber(addr);*/
+    /*uart_puts((str_t *)"<-- addr");*/
 
     progCounter = progCounter + 1;
-    uart_putchar('.');
+    /*uart_putchar('.');*/
     if(x == 1){
         // this is a goto
-        uart_putchar('g');
+        /*uart_putchar('g');*/
         progCounter = addr;
         /*uart_puts((str_t *)"goto");*/
     } else {
         // this is the "if" processing
-        uart_putchar('i');
+        /*uart_putchar('i');*/
         i = popMathStack();
         /*uart_putchar('a');*/
         /*printNumber((int16_t)addr);*/
         if(i == 0){
             progCounter = addr;
         }
-        uart_puts((str_t *)"<-- if");
+        /*uart_puts((str_t *)"<-- if");*/
     }
-    uart_putchar('.');
+    /*uart_putchar('.');*/
 }
 
 void pushnFunc(){
@@ -768,11 +771,13 @@ void execFunc(){
 
 void execN(int16_t n){
   volatile int16_t i,j,k,m;
-  int32_t x,y,z;
-  uart_puts((str_t *)"execN: ");
-  printNumber(n);
-  uart_puts((str_t *)"");
+  int16_t x,y,z;
+  /*uart_puts((str_t *)"execN: ");*/
+  /*printNumber(n);*/
+  /*uart_puts((str_t *)"");*/
   switch(n){
+    case 0:
+      break;
     case 1:
   //    xit = 1;
       break;
@@ -896,11 +901,11 @@ void execN(int16_t n){
       ifFunc(0);
       break;
 
-//    case 23: // then      ( trapped in ':')
-//      break;
+    case 23: // then      ( trapped in ':')
+      break;
 
-//    case 24: // else      ( trapped in ':')
-//      break;
+    case 24: // else      ( trapped in ':')
+      break;
 
     case 25:  // begin
       pushAddrStack(progCounter);
@@ -925,9 +930,11 @@ void execN(int16_t n){
       printHexWord(popMathStack());
       break;
 
+    case 29:
+      break;
 
     case 30:  // num
-      uart_puts((str_t *)"in case 30");
+      /*uart_puts((str_t *)"in case 30");*/
       numFunc();
       break;
 
@@ -1147,7 +1154,7 @@ void execN(int16_t n){
       break;
 
     default:
-      uart_puts((str_t *)"opcode ");      
+      /*uart_puts((str_t *)"opcode ");      */
       break;
   }
 }
index 8f8a16f2283854f33fbaa44323f5fd15a75bf492..15164c692950ab6d5755e70f4d0290885cc93baa 100644 (file)
@@ -4,4 +4,25 @@
 void init_msp4th(void);
 void processLoop(void);
 
+uint8_t getKeyB(void);
+void getLine(void);
+void getWord(void);
+void listFunction(void);
+int16_t popMathStack(void);
+void pushMathStack(int16_t n);
+int16_t popAddrStack(void);
+void pushAddrStack(int16_t n);
+int16_t lookupToken(uint8_t *x, uint8_t *l);
+void luFunc(void);
+void numFunc(void);
+void ifFunc(int16_t x);
+void pushnFunc(void);
+void overFunc(void);
+void dfnFunc(void);
+void printNumber(int16_t n);
+void printHexChar(int16_t n);
+void printHexByte(int16_t n);
+void printHexWord(int16_t n);
+void execN(int16_t n);
+void execFunc(void);
 #endif