Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: Test.cpp
- Revision:
- 1:f23d9ead1017
- Parent:
- 0:f7ea94750875
- Child:
- 2:4a75bdce2735
diff -r f7ea94750875 -r f23d9ead1017 Test.cpp
--- a/Test.cpp Tue Jul 18 07:32:39 2017 +0000
+++ b/Test.cpp Fri Nov 24 00:33:13 2017 +0000
@@ -8,6 +8,7 @@
FILE *fp=NULL;
+
DigitalOut SDCard_CS(D10);
unsigned char vector[NEURONSIZE];
@@ -16,6 +17,7 @@
extern int GCR_Conn_fail;
extern int MINIF_Conn_fail;
extern int MAXIF_Conn_fail;
+extern int AIF_Conn_fail;
extern int NCR_Conn_fail;
extern int Memory_fail;
@@ -68,17 +70,54 @@
{
error("Could not open file for write\n");
}
- fclose(fp);
+ fclose(fp);
printf("SD Init OK\n");
}
void RESET_Test(void)
{
+
+ printf("\nRESET Test\n");
+
+ //nomal mode
+ //printf("NOMAL MODE \n");
int nsr = read(NM_NSR);
+ //printf("NSR : 0x%x \n",nsr);
int gcr = read(NM_GCR);
+ //printf("GCR : 0x%x \n",gcr);
int minif = read(NM_MINIF);
- int maxif = read(NM_MAXIF);
+ //printf("MINIF : 0x%x \n",minif);
+ int maxif = read(NM_MAXIF);
+ //printf("MAXIF : 0x%x \n",maxif);
+ int dist = read(NM_DIST);
+ //printf("dist : 0x%x \n",dist);
+ int cat = read(NM_CAT);
+ //printf("cat : 0x%x \n",cat);
+ int ncount = read(NM_NCOUNT);
+ //printf("ncount : 0x%x \n",ncount);
+
+
- //printf("RESET Test\n");
+ //sr mode
+ // printf("\nSR MODE \n");
+ write(NM_NSR,0x10);
+// int comp = read(NM_COMP);
+// printf("COMP : 0x%x \n",comp);
+ //nsr = read(NM_NSR);
+ //printf("NSR : 0x%x \n",nsr);
+ //minif = read(NM_MINIF);
+ //printf("MINIF : 0x%x \n",minif);
+ int ncr = read(NM_NCR);
+ //printf("ncr : 0x%x \n",ncr);
+ //dist = read(NM_DIST);
+ //printf("dist : 0x%x \n",dist);
+ //cat = read(NM_CAT);
+ //printf("cat : 0x%x \n",cat);
+ int aif = read(NM_AIF);
+ //printf("aif : 0x%x \n",aif);
+ int nid = read(NM_NID);
+ //printf("nid : 0x%x \n",nid);
+
+ write(NM_NSR,0x00);
if(nsr != 0x00)
Reset_fail = 1;
@@ -88,61 +127,66 @@
Reset_fail = 1;
if(maxif != 0x4000)
Reset_fail = 1;
-
+ if(dist != 0xffff)
+ Reset_fail = 1;
+ if(cat != 0xffff)
+ Reset_fail = 1;
+ if(ncr != 0x01)
+ Reset_fail = 1;
+ if(aif != 0x4000)
+ Reset_fail = 1;
+ if(nid != 0x0000)
+ Reset_fail = 1;
+
if(Reset_fail == 0)
printf("Reset Test Pass\n");
- else
+ else{
+ printf("Reset Test Fail\n");
printf("Reset the NM500 and proceed\n");
-// printf("NSR : 0x%x\n", nsr);
-// printf("GCR : 0x%x\n", gcr);
-// printf("MINIF : 0x%x\n", minif);
-// printf("MAXIF : 0x%x\n", maxif);
-
-
+ }
}
//각 레지스터의 데이터가 깨지는 것이 없는지 확인
void Connection_test(void)
{
///////////NSR 시작//////////////
- //기존 NSR 백업
- int init_NSR = read(NM_NSR);
- //NSR의 데이터에 0xaa write
- write(NM_NSR, 0xaa);
- //사용하는 비트만 & 연산
- int temp_NSR = read(NM_NSR)& 0x1f;
- //printf("NSR : 0x%x\n", temp_NSR);
- if(temp_NSR != 0xa){
- printf("NSR Connection error\n");
- NSR_Conn_fail=1;
- Connection = 1;
- }
-
- //NSR의 데이터를 0x55로 변경하여 write
- write(NM_NSR, 0x055);
- temp_NSR = read(NM_NSR)&0x1f;
- //printf("NSR : 0x%x",temp_NSR);
- if(temp_NSR != 0x19){
- printf("NSR Connection error\n");
- NSR_Conn_fail=1;
- Connection = 1;
- }
- if(NSR_Conn_fail == 0)
- //printf("NSR_Connetion PASS \n");
-
- //NSR을 초기 저장값으로 복원
- write(NM_NSR, init_NSR);
+ printf("\nConnection Test\n");
+// //기존 NSR 백업
+// //int init_NSR = read(NM_NSR);
+// //NSR의 데이터에 0xaa write
+// write(NM_NSR, 0xaa);
+// //사용하는 비트만 & 연산
+// int temp_NSR = read(NM_NSR)& 0x3f;
+// //printf("NSR : 0x%x\n", temp_NSR);
+// if(temp_NSR != 0x2a){
+// printf("NSR Connection error\n");
+// NSR_Conn_fail=1;
+// Connection = 1;
+// }
+//
+// //NSR의 데이터를 0x55로 변경하여 write
+// write(NM_NSR, 0x055);
+// temp_NSR = read(NM_NSR)&0x3f;
+// //printf("NSR : 0x%x\n",temp_NSR);
+// if(temp_NSR != 0x19){
+// printf("NSR Connection error\n");
+// NSR_Conn_fail=1;
+// Connection = 1;
+// }
+//// if(NSR_Conn_fail == 0)
+//// printf("NSR_Connetion PASS \n");
+//
+// //NSR을 초기 저장값으로 복원
+// write(NM_NSR, 0);
////////////NSR 종료////////////
- ///////////GCR 시작//////////////
- unsigned int init_GCR = read(NM_GCR);
-
+ ///////////GCR 시작//////////////
//write GCR 0xaa
write(NM_GCR, 0xaa);
//GCR Read
unsigned int temp_GCR = read(NM_GCR);
- //printf("GCR : 0x%x\n", temp_GCR);
+ // printf("GCR : 0x%x\n", temp_GCR);
//GCR data가 깨졌을 경우
if(temp_GCR != 0xaa){
@@ -160,72 +204,64 @@
Connection = 1;
printf("GCR Connection error\n");
}
-
- if(GCR_Conn_fail == 0)
- // printf("GCR Connection PASS\n");
- write(NM_GCR, init_GCR);
+
///////////GCR 종료//////////////
///////////MINIF 시작//////////////
-
- //write minif 0xaa
- write(NM_MINIF, 0xaa);
+
+ write(NM_MINIF, 0xaaaa);
int temp_MINIF = read(NM_MINIF);
//printf("MINIF : 0x%x\n", temp_MINIF);
//minif data 확인
- if(temp_MINIF != 0xaa){
+ if(temp_MINIF != 0xaaaa){
MINIF_Conn_fail = 1;
Connection = 1;
printf("MINIF Connection error\n");
}
//write MINIF 0x55
- write(NM_MINIF, 0x55);
+ write(NM_MINIF, 0x5555);
temp_MINIF = read(NM_MINIF);
//printf("MINIF : 0x%x\n", temp_MINIF);
//MINIF test
- if(temp_MINIF != 0x55){
+ if(temp_MINIF != 0x5555){
MINIF_Conn_fail = 1;
Connection = 1;
printf("MINIF Connection error\n");
}
+
+ //////////END MINIF/////////////////
+
+ ///////////MAXIF 시작//////////////
- if(MINIF_Conn_fail == 0)
- // printf("MINIF Connection PASS\n");
- ///////////MINIF 종료//////////////
- ///////////MAXIFIF 시작//////////////
- //write MAXIF 0xaa
- write(NM_MAXIF, 0xaa);
+ //write maxif 0xaaaa
+
+ write(NM_MAXIF, 0xaaaa);
int temp_MAXIF = read(NM_MAXIF);
//printf("MAXIF : 0x%x\n", temp_MAXIF);
- //MAXIF test
- if(temp_MAXIF != 0xaa){
+ //maxif data 확인
+ if(temp_MAXIF != 0xaaaa){
MAXIF_Conn_fail = 1;
Connection = 1;
printf("MAXIF Connection error\n");
}
//write MAXIF 0x55
- write(NM_MAXIF, 0x55);
+ write(NM_MAXIF, 0x5555);
temp_MAXIF = read(NM_MAXIF);
//printf("MAXIF : 0x%x\n", temp_MAXIF);
//MAXIF test
- if(temp_MAXIF != 0x55){
+ if(temp_MAXIF != 0x5555){
MAXIF_Conn_fail = 1;
Connection = 1;
printf("MAXIF Connection error\n");
- }
-
- if(MAXIF_Conn_fail == 0)
- // printf("MAXIF Connection PASS\n");
- ///////////MAXIF 종료//////////////
-
-
+ }
+ //////////END MAXIF/////////////////
+
+
///////////NCR 시작//////////////
//NSR 저장
- init_NSR = read(NM_NSR);
- //printf("init NSR : 0x%x\n", init_NSR);
//SR Mode 전환
write(NM_NSR, 0x10);
int init_NCR = read(NM_NCR);
@@ -233,7 +269,7 @@
//write NCR 0xaa
write(NM_NCR, 0xaa);
int temp_NCR = read(NM_NCR);
- // printf("NCR : 0x%x\n", temp_NCR);
+ //printf("NCR : 0x%x\n", temp_NCR);
//NCR test
if(temp_NCR != 0xaa){
NCR_Conn_fail = 1;
@@ -250,18 +286,35 @@
Connection = 1;
printf("NCR Connection error\n");
}
-
- if(NCR_Conn_fail == 0)
- // printf("NCR Connection PASS\n");
- write(NM_NCR, init_NCR);
- //restore Nomal Mode
-// printf("init NSR : 0x%x\n", init_NSR);
- //NSR 복원
- write(NM_NSR, init_NSR);
- ///////////NCR 종료//////////////
+
+///////////NCR 종료//////////////
+
+/////////////////AIF
+
+ write(NM_AIF, 0xaaaa);
+ int temp_AIF = read(NM_AIF);
+ //printf("AIF : 0x%x\n", temp_AIF);
+ //AIF test
+ if(temp_AIF != 0xaaaa){
+ AIF_Conn_fail = 1;
+ Connection = 1;
+ printf("AIF Connection error\n");
+ }
+ //write AIF 0x55
+ write(NM_AIF, 0x5555);
+ temp_AIF = read(NM_AIF);
+ /// printf("AIF : 0x%x\n", temp_AIF);
+ //AIF test
+ if(temp_AIF != 0x5555){
+ AIF_Conn_fail = 1;
+ Connection = 1;
+ printf("AIF Connection error\n");
+ }
+
+ write(NM_NSR, 0x00);
if(Connection == 1)
- error("Connection Test Fail\n");
+ printf("Connection Test Fail\n");
else
printf("Connection Test Pass\n");
}
@@ -493,7 +546,7 @@
printf(".");
}
printf("\n");
- printf("NCOUNT : %d\n",ncnt);
+// printf("NCOUNT : %d\n",ncnt);
//학습 완료 후 ncount가 MAXNEURONS보다 작을 경우
if(ncnt == MAXNEURONS/2)
return 1; //데이지체인 불량
@@ -751,7 +804,7 @@
{
int distance, cat, nid;
//number of neuron 1156
- for(int i=1;i<=MAXNEURONS;i++){
+ for(int i=1;i<=MAXNEURONS;i++){
if(i%2 == 1){
for(int j =0;j<DATA_CNT;j=j+2){
vector[j] = i>>8; //upper bit save
@@ -773,6 +826,7 @@
//input : data, data length output : distance, category, Neuron ID return 인식된 데이터 갯수
int nsr = classify(vector, NEURONSIZE, &distance, &cat, &nid);
+
id_fail = nsr & 0x70;
if(id_fail == 0)
nsr_fail = 1;