150 lines
3.2 KiB
C
150 lines
3.2 KiB
C
/****************************************************************************
|
|
|
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
|
|
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
|
be copied by any method or incorporated into another program without
|
|
the express written consent of Aerospace C.Power. This Information or any portion
|
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
|
liability for its use in any way and conveys no license or title under
|
|
any patent or copyright and makes no representation or warranty that this
|
|
Information is free from patent or copyright infringement.
|
|
|
|
****************************************************************************/
|
|
/* os shim includes */
|
|
#include "os_types.h"
|
|
#include "os_task.h"
|
|
#include "os_utils.h"
|
|
|
|
/* common includes */
|
|
#include "iot_io.h"
|
|
#include "iot_bitops.h"
|
|
#include "iot_pkt_api.h"
|
|
#include "iot_ipc.h"
|
|
#include "iot_plc_lib.h"
|
|
#include "iot_dbglog_api.h"
|
|
#include "iot_config.h"
|
|
|
|
/* driver includes */
|
|
#include "iot_clock.h"
|
|
#include "iot_uart.h"
|
|
|
|
/* cli includes */
|
|
#include "iot_cli.h"
|
|
|
|
/* debug includes*/
|
|
#include "dbg_io.h"
|
|
|
|
typedef void (*jump)(void);
|
|
|
|
void div_zero()
|
|
{
|
|
int a = 0;
|
|
int b = 1;
|
|
int c;
|
|
c = b/a;
|
|
iot_printf("div zero : c=%d\r\n", c);
|
|
}
|
|
|
|
void invalid_addr_access() // mcause: 5/7 load/store address fault
|
|
{
|
|
int *buf = (int *)0x90000000;
|
|
//*buf = 0xaabbccdd;
|
|
iot_printf("align test a: %08x\r\n", *(buf));
|
|
}
|
|
|
|
void misalign_access() // mcause: 4/6 load/store address misaligned
|
|
{
|
|
uint32_t *a = (uint32_t *) 0x1003ffd1;
|
|
//*a = 0xaabb;
|
|
//*(a+1) = 0xccdd;
|
|
iot_printf("align test a: %08x\r\n", *(a));
|
|
iot_printf("align test a: %08x\r\n", *(a+1));
|
|
}
|
|
|
|
void instruction_illegal() // mcause: 2 illegal instruction
|
|
{
|
|
void (*pgm_start)(void) = (void*) 0x001003d1;
|
|
pgm_start();
|
|
}
|
|
|
|
void invalid_instruction_access() // mcause: 1 instruction fault
|
|
{
|
|
void (*pgm_start)(void) = (void*) 0x80000040;
|
|
pgm_start();
|
|
}
|
|
|
|
void instruction_misalign()
|
|
{
|
|
int a = 10;
|
|
iot_printf("a=%d\n", a);
|
|
}
|
|
|
|
|
|
void back_d()
|
|
{
|
|
iot_printf("back 4.......\r\n");
|
|
misalign_access();
|
|
}
|
|
|
|
struct test_t {
|
|
void (*callback)(void);
|
|
};
|
|
|
|
struct test_t g_test = {0};
|
|
|
|
void back_c()
|
|
{
|
|
iot_printf("back 3.......\r\n");
|
|
g_test.callback = back_d;
|
|
g_test.callback();
|
|
}
|
|
|
|
void back_b()
|
|
{
|
|
iot_printf("back 2.......\r\n");
|
|
back_c();
|
|
}
|
|
|
|
void back_a()
|
|
{
|
|
iot_printf("back 1.......\r\n");
|
|
back_b();
|
|
}
|
|
|
|
void trap_back_test()
|
|
{
|
|
back_a();
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
dbg_uart_init();
|
|
int i = 100;
|
|
int a = 100;
|
|
int b = 10;
|
|
int c = 100;
|
|
int d = 100;
|
|
iot_printf("%d %d %d %d %d\r\n", a,b,c,d,i);
|
|
|
|
//trap_back_test();
|
|
|
|
int j = 0;
|
|
while(i)
|
|
{
|
|
//div_zero();
|
|
//invalid_instruction_access(); // mcause: 1
|
|
//instruction_illegal(); // mcause: 2
|
|
//misalign_access(); // mcause: 6
|
|
//invalid_addr_access(); // mcause: 7
|
|
//instruction_misalign();
|
|
|
|
iot_printf("count i: %d\r\n", i);
|
|
|
|
for(j = 0; j<10000;j++);
|
|
i--;
|
|
}
|
|
return 0;
|
|
}
|