NM500 Lib
Diff: NM500.cpp
- 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 -//} -// -// -// -//