382 lines
18 KiB
Plaintext
382 lines
18 KiB
Plaintext
C51 COMPILER V9.01 SH_IEC60730B_8051F_TESTPROC 10/11/2023 14:22:17 PAGE 1
|
||
|
||
|
||
C51 COMPILER V9.01, COMPILATION OF MODULE SH_IEC60730B_8051F_TESTPROC
|
||
OBJECT MODULE PLACED IN .\output\sh_iec60730b_8051f_testproc.obj
|
||
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c LARGE OPTIMIZE(7
|
||
-,SIZE) REGFILE(.\output\McuFlash_ISP.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage) DEB
|
||
-UG OBJECTEXTEND PRINT(.\output\sh_iec60730b_8051f_testproc.lst) OBJECT(.\output\sh_iec60730b_8051f_testproc.obj)
|
||
|
||
line level source
|
||
|
||
1 /*
|
||
2 * IEC60730 Class B TEST PROCESS for SINOWEALTH 8051 based ICs.
|
||
3 * File: sh_iec60730b_8051f_testproc.h
|
||
4 * Version: 1.0
|
||
5 * Author: Robin.zhang Chaoming.luo
|
||
6 * Date: 04/21/2023
|
||
7 * SINOWEALTH IS SUPPLYING THIS SOFTWARE FOR USE EXCLUSIVELY ON SINOWEALTH'S
|
||
8 * MICROCONTROLLER PRODUCTS. IT IS PROTECTED UNDER APPLICABLE COPYRIGHT LAWS.
|
||
9 * THIS SOFTWARE IS FOR GUIDANCE IN ORDER TO SAVE TIME. AS A RESULT, SINOWEALTH
|
||
10 * SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES
|
||
11 * WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF SUCH FIRMWARE AND/OR
|
||
12 * THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN
|
||
13 * CONNECTION WITH THEIR PRODUCTS.
|
||
14 *
|
||
15 */
|
||
16 #include "sh_iec60730b_8051f_testproc.h"
|
||
*** WARNING C318 IN LINE 16 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: can't open file 'sh_iec60730b_80
|
||
-51f_testproc.h'
|
||
17 //#include "MAIN.H"
|
||
18
|
||
19
|
||
20 extern SHT_U32 __iec60730b_stack_top;
|
||
*** ERROR C129 IN LINE 20 OF CODE_CLASSB\IEC60730_PROC\SH_IEC60730B_8051F_TESTPROC.C: missing ';' before '__iec60730b_st
|
||
-ack_top'
|
||
21 extern SHT_U32 __iec60730b_stack_bottom;
|
||
22
|
||
23 SHT_U8 __iec60730b_bist_step;
|
||
24 static SHT_U32 __iec60730b_crc_addr;
|
||
25
|
||
26
|
||
27 SHT_RESULT sh_iec60730b_8051f_test_post(void)
|
||
28 {
|
||
29 SHT_RESULT checkResult = SH_CHK_PASS;
|
||
30 /******************************************************/
|
||
31 /*Initial global variables*/
|
||
32 __iec60730b_bist_step = 0;
|
||
33 __iec60730b_crc_addr = 0;
|
||
34
|
||
35 /******************************************************/
|
||
36 /* check watch dog */
|
||
37 #if SH_CHK_WDG_EN == 1
|
||
*** WARNING C322 IN LINE 37 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
checkResult = sh_8051f_wdg_test();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
42 /*******************************************************/
|
||
43 /* Disable Interrupt */
|
||
44 EA = 0;
|
||
45
|
||
46 /******** CHECK CPU REGISTERS *********/
|
||
47 #if SH_CHK_CPU_EN == 1
|
||
*** WARNING C322 IN LINE 47 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
C51 COMPILER V9.01 SH_IEC60730B_8051F_TESTPROC 10/11/2023 14:22:17 PAGE 2
|
||
|
||
checkResult = sh_8051f_cpu_register1();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
|
||
checkResult = sh_8051f_cpu_register2();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
56
|
||
57 /******** CHECK PROGRAM COUNTER *********/
|
||
58 #if SH_CHK_PC_EN == 1
|
||
*** WARNING C322 IN LINE 58 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
checkResult = sh_8051f_pc_test();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
63
|
||
64 /******** CHECK RAM ADDRESSING LINE *********/
|
||
65 #if SH_CHK_ADDRLINE_TEST_EN == 1
|
||
*** WARNING C322 IN LINE 65 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
__iec60730b_addrline_address = 0;
|
||
checkResult = sh_8051f_addrline_data1();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
|
||
checkResult = sh_8051f_addrline_data2();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
|
||
checkResult = sh_8051f_addrline_xdata_test();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
79
|
||
80 /******** CHECK RAM *********/
|
||
81 #if SH_CHK_XDATA_EN == 1
|
||
*** WARNING C322 IN LINE 81 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
__iec60730b_ram_data_address = 0;
|
||
__iec60730b_ram_xdata_address = 0;
|
||
checkResult = sh_8051f_ram_data_test();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
|
||
checkResult = sh_8051f_ram_xdata_test();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
92 CLR_WDT();
|
||
93
|
||
94 /* Enable Interrupt */
|
||
95 EA = 1;
|
||
96
|
||
97 /******** CHECK BOOT *********/
|
||
98 #if SH_CHK_BOOT_EN == 1
|
||
*** WARNING C322 IN LINE 98 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
__iec60730b_boot_checksum = CWORD[(SH_CHK_BOOT_END_ADDR-2)/2];
|
||
if(sh_8051f_crc_code(SH_CHK_BOOT_START_ADDR,SH_CHK_BOOT_END_ADDR,MCU_CRC_FLASH) != __iec60730b_boot_ch
|
||
-ecksum)
|
||
checkResult = SH_CHK_FAIL_BOOT;
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
|
||
C51 COMPILER V9.01 SH_IEC60730B_8051F_TESTPROC 10/11/2023 14:22:17 PAGE 3
|
||
|
||
CLR_WDT();
|
||
#endif
|
||
107
|
||
108 /******** CHECK FLASH *********/
|
||
109 #if SH_CHK_FLASH_EN == 1
|
||
*** WARNING C322 IN LINE 109 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
__iec60730b_flash_addr = SH_CHK_FLASH_START_ADDR;
|
||
if(sh_8051f_crc_code(SH_CHK_FLASH_START_ADDR,SH_CHK_FLASH_END_ADDR,MCU_CRC_FLASH) != __iec60730b_flash
|
||
-_checksum)
|
||
checkResult = SH_CHK_FAIL_FLASH;
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
|
||
CLR_WDT();
|
||
#endif
|
||
118
|
||
119 /******** CHECK EEPROM *********/
|
||
120 #if SH_CHK_EE_EN == 1
|
||
*** WARNING C322 IN LINE 120 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
__iec60730b_ee1_addr = SH_CHK_EE1_START_ADDR;
|
||
__iec60730b_ee2_addr = SH_CHK_EE2_START_ADDR;
|
||
|
||
sh_8051f_ee_readchecksum((SH_CHK_EE1_END_ADDR-2), (SHT_RESULT xdata *)&__iec60730b_ee1_checksum, 2);
|
||
if(sh_8051f_crc_code(SH_CHK_EE1_START_ADDR,SH_CHK_EE1_END_ADDR,MCU_CRC_EE) != __iec60730b_ee1_checksum
|
||
-)
|
||
checkResult = SH_CHK_FAIL_EE;
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
|
||
CLR_WDT();
|
||
|
||
/******** CHECK EEPROM *********/
|
||
sh_8051f_ee_readchecksum((SH_CHK_EE2_END_ADDR-2), (SHT_RESULT xdata *)&__iec60730b_ee2_checksum, 2);
|
||
if(sh_8051f_crc_code(SH_CHK_EE2_START_ADDR,SH_CHK_EE2_END_ADDR,MCU_CRC_EE) != __iec60730b_ee2_checksum
|
||
-)
|
||
checkResult = SH_CHK_FAIL_EE;
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
|
||
CLR_WDT();
|
||
#endif
|
||
141
|
||
142 /******** STACK CHECK *********/
|
||
143 #if SH_CHK_STACK_EN == 1
|
||
*** WARNING C322 IN LINE 143 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
sh_8051f_stack_init();
|
||
checkResult = sh_8051f_stack_test();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
149
|
||
150 /********* CLOCK CHECK ********/
|
||
151 #if SH_CHK_CLOCK_EN == 1
|
||
*** WARNING C322 IN LINE 151 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
{
|
||
SHT_U16 timeout = 0x8000;
|
||
sh_8051f_clk_init();
|
||
__iec60730b_clk_limit_high = 0Xff00;
|
||
__iec60730b_clk_limit_low = 1;
|
||
SH_CHK_CLOCK_TIMER_START();
|
||
while(timeout)
|
||
{
|
||
C51 COMPILER V9.01 SH_IEC60730B_8051F_TESTPROC 10/11/2023 14:22:17 PAGE 4
|
||
|
||
EA = 0;
|
||
checkResult = sh_8051f_clk_check();
|
||
EA = 1;
|
||
if(checkResult != SH_CHK_FAIL_CLK_PROGRESS)
|
||
break;
|
||
timeout--;
|
||
CLR_WDT();
|
||
}
|
||
//CALCULATE CLOCK TOLERANCE RANGE
|
||
if(checkResult == SH_CHK_PASS)
|
||
{
|
||
SHT_U16 tmp = (__iec60730b_clk_context * SH_CHK_CLK_TOLERANCE) / 100;
|
||
__iec60730b_clk_limit_low = __iec60730b_clk_context - tmp;
|
||
__iec60730b_clk_limit_high = __iec60730b_clk_context + tmp;
|
||
}
|
||
}
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
179 CLR_WDT();
|
||
180
|
||
181 /********** AIO CHECK ****************/
|
||
182 #if SH_CHK_AIO_TEST_EN == 1
|
||
*** WARNING C322 IN LINE 182 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
__iec60730b_aio_state = SH_CHK_PASS;
|
||
checkResult = sh_8051f_aio_test();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
188
|
||
189 /********** DIO CHECK ****************/
|
||
190 #if SH_CHK_DIO_TEST_EN == 1
|
||
*** WARNING C322 IN LINE 190 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
checkResult = sh_8051f_dio_test();
|
||
if(checkResult != SH_CHK_PASS)
|
||
return checkResult;
|
||
#endif
|
||
195
|
||
196 return checkResult;
|
||
197 }
|
||
198
|
||
199 SHT_RESULT sh_iec60730b_8051f_test_bist(void)
|
||
200 {
|
||
201 SHT_RESULT checkResult = SH_CHK_PASS;
|
||
202
|
||
203 if((__iec60730b_bist_step >> 4) == 0)
|
||
204 {/************** 0: CHECK CPU REGISTERS **************/
|
||
205 #if SH_CHK_CPU_EN == 1
|
||
*** WARNING C322 IN LINE 205 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
EA = 0;
|
||
switch(__iec60730b_bist_step&0x0F)
|
||
{
|
||
case 0:
|
||
checkResult = sh_8051f_cpu_register1();
|
||
break;
|
||
case 1:
|
||
checkResult = sh_8051f_cpu_register2();
|
||
break;
|
||
}
|
||
EA = 1;
|
||
__iec60730b_bist_step++;
|
||
if((__iec60730b_bist_step&0xF) >= 2)
|
||
C51 COMPILER V9.01 SH_IEC60730B_8051F_TESTPROC 10/11/2023 14:22:17 PAGE 5
|
||
|
||
{
|
||
__iec60730b_bist_step = 0x10;
|
||
}
|
||
#else
|
||
223 __iec60730b_bist_step = 0x10;
|
||
224 #endif
|
||
225 }
|
||
226 else if((__iec60730b_bist_step >> 4) == 1)
|
||
227 {/************** 1: CHECK PROGRAM COUNTER **************/
|
||
228 #if SH_CHK_PC_EN == 1
|
||
*** WARNING C322 IN LINE 228 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
EA = 0;
|
||
checkResult = sh_8051f_pc_test();
|
||
EA = 1;
|
||
#endif
|
||
233 __iec60730b_bist_step = 0x20;
|
||
234 }
|
||
235 else if((__iec60730b_bist_step >> 4) == 2)
|
||
236 {/************** 2: CHECK RAM ADDRESSING LINE **************/
|
||
237 #if SH_CHK_ADDRLINE_TEST_EN == 1
|
||
*** WARNING C322 IN LINE 237 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
EA = 0;
|
||
if((__iec60730b_bist_step&0x0F) == 0)
|
||
{
|
||
checkResult = sh_8051f_addrline_data1();
|
||
__iec60730b_bist_step++;
|
||
}
|
||
else if((__iec60730b_bist_step&0x0F) == 1)
|
||
{
|
||
checkResult = sh_8051f_addrline_data2();
|
||
__iec60730b_bist_step++;
|
||
}
|
||
else if((__iec60730b_bist_step&0x0F) == 2)
|
||
{
|
||
checkResult = sh_8051f_addrline_xdata_runtime();
|
||
__iec60730b_bist_step++;
|
||
}
|
||
else
|
||
__iec60730b_bist_step = 0x30;
|
||
EA = 1;
|
||
#else
|
||
258 __iec60730b_bist_step = 0x30;
|
||
259 #endif
|
||
260 }
|
||
261 else if((__iec60730b_bist_step >> 4) == 3)
|
||
262 {/************** 3: CHECK RAM **************/
|
||
263 #if SH_CHK_XDATA_EN == 1
|
||
*** WARNING C322 IN LINE 263 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
EA = 0;
|
||
if((__iec60730b_bist_step&0x0F) == 0)
|
||
{
|
||
checkResult = sh_8051f_ram_data_runtime();
|
||
__iec60730b_bist_step++;
|
||
}
|
||
else if((__iec60730b_bist_step&0x0F) == 1)
|
||
{
|
||
checkResult = sh_8051f_ram_xdata_runtime();
|
||
__iec60730b_bist_step++;
|
||
}
|
||
else
|
||
__iec60730b_bist_step = 0x40;
|
||
EA = 1;
|
||
C51 COMPILER V9.01 SH_IEC60730B_8051F_TESTPROC 10/11/2023 14:22:17 PAGE 6
|
||
|
||
#else
|
||
279 __iec60730b_bist_step = 0x40;
|
||
280 #endif
|
||
281 }
|
||
282
|
||
283 else if((__iec60730b_bist_step >> 4) == 4)
|
||
284 {/************** 4: CHECK CODE ROM **************/
|
||
285 #if SH_CHK_FLASH_EN == 1
|
||
*** WARNING C322 IN LINE 285 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
checkResult = sh_8051f_flash_runtime();
|
||
#endif
|
||
288 __iec60730b_bist_step = 0x50;
|
||
289 }
|
||
290 else if((__iec60730b_bist_step >> 4) == 5)
|
||
291 {/************** 5: CHECK STACK **************/
|
||
292 #if SH_CHK_STACK_EN == 1
|
||
*** WARNING C322 IN LINE 292 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
checkResult = sh_8051f_stack_test();
|
||
#endif
|
||
295 __iec60730b_bist_step = 0x60;
|
||
296 }
|
||
297 else if((__iec60730b_bist_step >> 4) == 6)
|
||
298 {/************** 6: CHECK CLOCK **************/
|
||
299 #if SH_CHK_CLOCK_EN == 1
|
||
*** WARNING C322 IN LINE 299 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
EA = 0;
|
||
checkResult = sh_8051f_clk_check();
|
||
EA = 1;
|
||
#endif
|
||
304 __iec60730b_bist_step = 0x70;
|
||
305 }
|
||
306 else if((__iec60730b_bist_step >> 4) == 7)
|
||
307 {/************** 7: CHECK AIO **************/
|
||
308 #if SH_CHK_AIO_TEST_EN == 1
|
||
*** WARNING C322 IN LINE 308 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
checkResult = sh_8051f_aio_test_runtime();
|
||
#endif
|
||
311 __iec60730b_bist_step = 0x80;
|
||
312 }
|
||
313 else if((__iec60730b_bist_step >> 4) == 8)
|
||
314 {/************** 8: CHECK EEPROM1 **************/
|
||
315 #if SH_CHK_EE_EN == 1
|
||
*** WARNING C322 IN LINE 315 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
checkResult = sh_8051f_ee1_runtime();
|
||
#endif
|
||
318 __iec60730b_bist_step = 0x90;
|
||
319 }
|
||
320 else if((__iec60730b_bist_step >> 4) == 9)
|
||
321 {/************** 8: CHECK EEPROM2 **************/
|
||
322 #if SH_CHK_EE_EN == 1
|
||
*** WARNING C322 IN LINE 322 OF code_classb\iec60730_proc\sh_iec60730b_8051f_testproc.c: unknown identifier
|
||
checkResult = sh_8051f_ee2_runtime();
|
||
#endif
|
||
325 __iec60730b_bist_step = 0x00;
|
||
326 }
|
||
327 return checkResult;
|
||
328 }
|
||
|
||
C51 COMPILATION COMPLETE. 23 WARNING(S), 1 ERROR(S)
|