NM500 Lib

Revision:
6:4bc46c554aed
Parent:
5:dacd883e994d
Child:
7:a8ebb0cab33d
--- a/NM500.cpp	Mon May 29 04:32:19 2017 +0000
+++ b/NM500.cpp	Fri Jun 23 05:37:17 2017 +0000
@@ -8,6 +8,27 @@
 
 //Serial test(SERIAL_TX, SERIAL_RX);
 
+extern int CMN_RC;
+extern int aif_fail;
+extern int ncount_fail;
+extern int Gcr1;
+extern int Gcr2;
+extern int Aif1;
+extern int Aif2;
+extern int Minif1;
+extern int Minif2;
+extern int Maxif1;
+extern int Maxif2;
+extern int Cat1;
+extern int Cat2;
+
+extern int Memory1;
+extern int Memory2;
+
+extern char array1[NEURONSIZE];
+extern char array2[NEURONSIZE];
+
+
 FILE *fp=NULL;
 
 DigitalOut BC_CS(D9);
@@ -24,7 +45,7 @@
     CLK_EN = HIGH;      //enable
     
     NM500.format(8,0);
-    NM500.frequency(3000000);
+    NM500.frequency(1000000);
 
     
     wait(0.2);
@@ -37,8 +58,6 @@
         error("Could not open file for write\n");
     }
     fclose(fp);
-  //  test.baud(115200);
-
     
     return clearNeurons();     //neruon init()
 }
@@ -49,11 +68,14 @@
 }
 int clearNeurons()
 {
-    int TempNSR=read(NM_NSR);
+    
     write(NM_FORGET,0);
-    write(NM_NSR, 16);
+    int ncount = read(NM_NCOUNT);
+    printf("ncount : %d ",ncount);
+    
+    write(NM_NSR, 0x10);
     for (int i=0; i< NEURONSIZE; i++) write(NM_TESTCOMP,0);
-    write(NM_NSR, TempNSR);
+    write(NM_NSR, 0);
     if((read(NM_MINIF)==2))
         return(0);      //clear ok
     else
@@ -72,7 +94,7 @@
     *distance = read(NM_DIST);
     *category = read(NM_CAT) & 0x7FFF; //Degenerated bit15 is masked
     *nid = read(NM_NID);
-    //printf("nid :%d",read(NM_NID));
+
     return(read(NM_NSR));
 }
 
@@ -149,7 +171,6 @@
 
     char neurons[NEURONSIZE];
     int aif=0;
-
     fp = fopen("/sd/data.txt", "w");
     if(fp == NULL)
         error("Write SD Fail");
@@ -160,7 +181,7 @@
  
     //read NCOUNT
     int nm_cnt = read(NM_NCOUNT);
-    if(nm_cnt == 0x7fff)     //change
+    if(nm_cnt == 0xFFFF || nm_cnt == 0x7FFF)     //change
         nm_cnt = MAXNEURONS;
     //printf("NCOUNT : %d\n", nm_cnt);
 
@@ -172,13 +193,47 @@
     write(NM_RSTCHAIN, 0);
     
     //loop until max neruon
-    for(int cnt = 1; cnt<=nm_cnt; cnt++){
+    for(int cnt = 1; cnt<=nm_cnt; cnt++){  
         
         //read context
         int context = read(NM_NCR);
        //printf("context #%d\t,", context);
         fprintf(fp,"%d\t", context);
         
+        //GCR register fail
+        if(context != 5){   
+            if(cnt < MAXNEURONS/2){ //neuron1 fail
+                Gcr1=1;
+                printf("\nNID # %d, GCR # %d \n",cnt,context);
+            }
+            else{                   //neruon2 fail
+                Gcr2=1;
+                printf("\nNID # %d, GCR # %d \n",cnt,context);
+            }
+        }
+        char temp_neuron[NEURONSIZE];
+//        for(int j =0;j<NEURONSIZE;j=j+2){   
+//            temp_neuron[j] = cnt>>8;          //upper bit save
+//            temp_neuron[j+1] = cnt;           //low bit save
+//        }
+        if(cnt%2 == 1){
+            for(int j =0;j<DATA_CNT;j=j+2){   
+                temp_neuron[j] = cnt>>8;          //upper bit save
+                temp_neuron[j+1] = cnt;           //low bit save
+            }
+            for(int j =DATA_CNT;j<NEURONSIZE; j++){   
+                temp_neuron[j] = array1[j];          //upper bit save
+            }
+        }
+        else if(cnt%2 == 0){
+            for(int j =0;j<DATA_CNT;j=j+2){   
+                temp_neuron[j] = cnt>>8;          //upper bit save
+                temp_neuron[j+1] = cnt;           //low bit save
+            }
+            for(int j =DATA_CNT;j<NEURONSIZE; j++){   
+                temp_neuron[j] = array2[j];          //upper bit save
+            }
+        }    
        //printf("Neruon Data : ");       
         //read Neuron data
         for (int j=0; j<NEURONSIZE; j++){
@@ -186,29 +241,81 @@
             neurons[j]=read(NM_COMP);
             fprintf(fp,"%d,", neurons[j]);
             //printf("%d,", neurons[j]);
+            if(temp_neuron[j]!= neurons[j]){
+                
+                if(j<MAXNEURONS/2){
+                    printf("NID # %d Memory Fail\n", cnt);
+                    Memory1 = 1;
+                }
+                else{
+                    printf("NID # %d Memory Fail\n", cnt);
+                    Memory2 = 1;
+                }
+                printf("# %d : temp %d, neruon %d\n",j, temp_neuron[j],neurons[j]);
+                    
+            }
+                
         }
 
+
         
         //read AIF
         aif=read(NM_AIF);
+        fprintf(fp,"\t%d\t", aif);
         //printf("AIF : %d,\t", aif);
-        fprintf(fp,"\t%d\t", aif);
         
+        //aif register fail
+        if(aif != 5){
+            if(cnt <= 576){ //neuron1 fail
+                Aif1=1;
+                printf("\nNID # %d, AIF # %d \n",cnt,aif);
+            }
+            else{                   //neruon2 fail
+                Aif2=1;
+                printf("\nNID # %d, AIF # %d \n",cnt,aif);
+            }
+        }      
         
         //raed minif
         int minif=read(NM_MINIF);
         //printf("MINIF : %d,\t", minif);
         fprintf(fp,"%d\t", minif);
         
+        //minif register fail
+        if(minif != 3){
+            if(cnt <= 576){ //neuron1 fail
+                Minif1 = 1;
+                printf("\nNID # %d, MINIF # %d \n",cnt,minif);
+            }
+            else{                   //neruon2 fail
+                Minif2 = 1;
+                printf("\nNID # %d, MINIF # %d \n",cnt,minif);
+            }
+        }
+        
         //read cat
-        int cat=read(NM_CAT);
-        //printf("CAT : %d, \t\n", cat);
-        fprintf(fp,"%d\t", cat);
+        int cat = read(NM_CAT) & 0x7FFF;
+        fprintf(fp,"%d\t", cat);      
+        fprintf(fp,"\n");
+        //printf("****CAT : %d\n", cat);
         
-        fprintf(fp,"\n");
+        //reset chain test
+//        if(cnt > 2 && cat == 1)
+//            CMN_RC = 1;
+            
+        //cat test
+        if(cnt != cat){
+            printf("cnt : %d , cat : %d \n", cnt, cat);
+            if(cnt <= 576){
+                Cat1 = 1;
+                printf("\n NM500 #1 Cat Fail # %d\n", cnt);
+            }
+            else {
+                Cat2 = 1;
+                printf("\n NM500 #2 Cat Fail # %d\n", cnt);
+            }
+        }
         printf(".");
-        
-        
     }
     printf("\n");
         
@@ -256,40 +363,20 @@
         fscanf(fp,"\t%d\t", &aif);
       // printf("AIF # %d \t", aif);
         write(NM_AIF,aif);
-    
+
         fscanf(fp,"%d\t", &minif);
       // printf("MINIF # %d", minif);
-        write(NM_MINIF,minif);
+        write(NM_MINIF,minif);    
         
         fscanf(fp,"%d\t", &cat);
      //  printf("CAT # %d \n", cat);
         write(NM_CAT,cat);
-        printf(".");    
+        printf(".");
+        
     }
     printf("\n");
     fclose(fp);
     write(NM_NSR, TempNSR); // set the NN back to its calling status
     return NCOUNT();
 }
-//void readNeuron(int nid, unsigned char model[], int* context, int* aif, int* category)
-//{
-//    int TempNSR=read(NM_NSR);
-//    write(NM_NSR, 0x10);
-//    write(NM_RSTCHAIN, 0);
-//    if (nid>0)
-//    {
-//         // move to index in the chain of neurons
-//         for (int i=0; i<nid; i++) read(NM_CAT);
-//    }
-//    *context=read(NM_NCR);
-//    for (int j=0; j<NEURONSIZE; j++) model[j]=read(NM_COMP);
-//    *aif=read(NM_AIF);
-//    *category=read(NM_CAT);
-//    *category=*category&0x7fff;
-//    write(NM_NSR, TempNSR); // set the NN back to its calling status
-//}
-//
-//
-//
-//