⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 breakcmd.c

📁 T-Kernel Shell Sample
💻 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 + -