📄 breakcmd.c
字号:
/*""FILE COMMENT""************************************************************** System Name : Renesas SH7145 micro T-Engine* File Name : breakcmd.c* Version : 1.01.00* Contents : Break command functions* Model : SH7145 micro T-Engine * CPU : SH7145F* Compiler : GNU* OS : T-Kernel** note : The Software is being delivered to you "AS IS" * : and Renesas,whether explicitly or implicitly makes * : no warranty as to its Use or performance. * : RENESAS AND ITS SUPPLIER DO NOT AND CANNOT WARRANT * : THE PERFORMANCE OR RESULTS YOU MAY OBTAIN BY USING * : THE SOFTWARE. AS TO ANY MATTER INCLUDING WITHOUT * : LIMITATION NONINFRINGEMENT OF THIRD PARTY RIGHTS,* : MERCHANTABILITY, INTEGRATION, SATISFACTORY QUALITY, * : OR FITNESS FOR ANY PARTICULAR PURPOSE.** Copyright (c) 2004-2006 RENESAS TECHNOLOGY CORP. All Rights Reserved.* AND RENESAS SOLUTIONS CORP. All Rights Reserved.** history : 2004.12.01 ver1.01.00* : 2006.02.01 ver1.01.00*""FILE COMMENT END""*********************************************************/#ifdef _MIC_SH7145_#include <tk/tkernel.h>#include "shell.h"#include "shelldisp.h"#include "breakcmd.h"/* address definition */#define REG_UBARH (volatile unsigned short *)0xFFFF8600#define REG_UBARL (volatile unsigned short *)0xFFFF8602#define REG_UBAMR (volatile unsigned short *)0xFFFF8604#define REG_UBAMRH (volatile unsigned short *)0xFFFF8604#define REG_UBAMRL (volatile unsigned short *)0xFFFF8606#define REG_UBBR (volatile unsigned short *)0xFFFF8608#define REG_UBCR (volatile unsigned short *)0xFFFF860A#define IV_NII 0x2 /* normal illegal instruction */#define IV_SII 0x3 /* slot illegal instruction */#define IV_CAE 0x4 /* CPU address error */#define IV_DAE 0x5 /* DMAC/DTC address error */#define IV_NMI 0x6 /* NMI */#define IV_UBC 0x7 /* UserBreak */extern W errcode;extern W opmode;extern int argcnt;extern char *cmdargs[];extern unsigned char commandbuf[];const char *prompt2 = "Break> ";RegTable *regtable;/*""FUNC COMMENT""******************************************************* * ID : X.Y.Z * Outline : shell loop in break mode *----------------------------------------------------------------------- * Include : *----------------------------------------------------------------------- * Definition : void break_shell(RegTable *,unsigned long dintno) *----------------------------------------------------------------------- * Function : shell in break mode * : Show interrupt message and shell loop *----------------------------------------------------------------------- * Argument : RegTable *addr : Register table address in break * : unsigned long dintno ; interrupt vector number *----------------------------------------------------------------------- * Return : None *----------------------------------------------------------------------- * Input : None * Output : None *----------------------------------------------------------------------- * Used Func : printBreakRegister() * : _PutString() * : get_line() * : analyze() *----------------------------------------------------------------------- * Notice : None *""FUNC COMMENT END""***************************************************/void break_shell(RegTable *addr,unsigned long dintno){ W check; regtable = addr; switch(dintno){ case IV_NII: /* normal illegal instruction */ tm_putstring("Normal illegal instruction!!\n"); break; case IV_SII: /* slot illegal instruction */ tm_putstring("Slot illegal instruction!!\n"); break; case IV_CAE: /* CPU address error */ tm_putstring("CPU Address Error!!\n"); break; case IV_DAE: /* DMAC/DTC address error */ tm_putstring("DMAC/DTC Address Error!!\n"); break; case IV_NMI: tm_putstring("NMI happened!!\n"); break; case IV_UBC: *REG_UBCR = 1; /* disable ubc interrupt */ *REG_UBBR = 1; /* disable ubc interrupt */ *REG_UBARH = 0; /* clear user break address */ *REG_UBARL = 0; /* clear user break address */ tm_putstring("User Break Hit!!\n"); break; default: tm_putstring("Another Error Happened!!\n"); break; } printBreakRegisters(addr); opmode = -1; /* change break mode */ while(1) {#ifdef NOUSE_STDIO _PutString(prompt2);#else // original DSP("%s%s\n",prompt2);#endif check = get_line(commandbuf); if(!strcmp(commandbuf,"CONTINUE")) break; if(check){ analyze(commandbuf); } } opmode = 1; /* change task mode */}/*""FUNC COMMENT""******************************************************* * ID : X.Y.Z * Outline : define interrupt handler for NMI,UBC,... *----------------------------------------------------------------------- * Include : tk/tkernel.h *----------------------------------------------------------------------- * Definition : void init_ubc() *----------------------------------------------------------------------- * Function : define interrupt handler for NMI,UBC,... *----------------------------------------------------------------------- * Argument : None *----------------------------------------------------------------------- * Return : None *----------------------------------------------------------------------- * Input : None * Output : None *----------------------------------------------------------------------- * Used Func : tk_def_int() *----------------------------------------------------------------------- * Notice : None *""FUNC COMMENT END""***************************************************/void init_ubc(){ T_DINT dint; *REG_UBCR = 1; /* disable ubc interrupt */ *REG_UBBR = 0x0054;/* CPUcyble,fetch inst,read */ dint.intatr = TA_ASM; dint.inthdr = (FP)&UserBreakHandler; tk_def_int(IV_NII,&dint); tk_def_int(IV_SII,&dint); tk_def_int(IV_CAE,&dint); tk_def_int(IV_DAE,&dint); tk_def_int(IV_NMI,&dint); tk_def_int(IV_UBC,&dint);}/*""FUNC COMMENT""******************************************************* * ID : X.Y.Z * Outline : "BS" command *----------------------------------------------------------------------- * Include : *----------------------------------------------------------------------- * Definition : void BREAKSET_cmd() *----------------------------------------------------------------------- * Function : "BS" command exec function * : If argcnt != 0 set break address * : else show current break address *----------------------------------------------------------------------- * Argument : None *----------------------------------------------------------------------- * Return : None *----------------------------------------------------------------------- * Input : argcnt ; input command count * Output : *----------------------------------------------------------------------- * Used Func : get_ulnum() * : convertstring() *----------------------------------------------------------------------- * Notice : None *""FUNC COMMENT END""***************************************************/void BREAKSET_cmd(){ int err; unsigned long addr; unsigned short addrh,addrl; unsigned char *tmp; if(argcnt){ /* if set the breakpoint,show the break address */ addr = get_ulnum(cmdargs[1],&err); if(err) goto illegalpar_return; *REG_UBBR = 0x0054;/* CPU-cycle,fetch inst,read */ *REG_UBARH = (unsigned short)((addr&0xFFFF0000) >> 16); *REG_UBARL = (unsigned short)(addr&0xFFFF); *REG_UBCR = 0; /* enable ubc interrupt */ printargs[0] = (VP)addr; convertstring(strstrstr,"Break Address : %08x\n",printargs); DSP; } else { if(!(*REG_UBCR&1)) { /* show user break address */ addrh = *REG_UBARH; addrl = *REG_UBARL; addr = (addrh<<16)|(addrl); printargs[0] = (VP)addr; convertstring(strstrstr,"Break Address : %08x\n",printargs); DSP; } } return;illegalpar_return: errcode = ER_ILLEGALPAR; return;}/*""FUNC COMMENT""******************************************************* * ID : X.Y.Z * Outline : "BC" command *----------------------------------------------------------------------- * Include : *----------------------------------------------------------------------- * Definition : void BREAKCLR_cmd() *----------------------------------------------------------------------- * Function : "BC" command exec function * : clear user break registers *----------------------------------------------------------------------- * Argument : None *----------------------------------------------------------------------- * Return : None *----------------------------------------------------------------------- * Input : None * Output : None *----------------------------------------------------------------------- * Used Func : None *----------------------------------------------------------------------- * Notice : None *""FUNC COMMENT END""***************************************************/void BREAKCLR_cmd(){ *REG_UBCR = 1; /* disable ubc interrupt */ *REG_UBARH = 0; /* clear user break address */ *REG_UBARL = 0; /* clear user break address */}#endif // _MIC_SH7145_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -