mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-31 14:11:42 +01:00 
			
		
		
		
	
		
			
	
	
		
			200 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			200 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /* TRAX register definitions
 | ||
|  | 
 | ||
|  |    Copyright (c) 2006-2012 Tensilica Inc. | ||
|  | 
 | ||
|  |    Permission is hereby granted, free of charge, to any person obtaining | ||
|  |    a copy of this software and associated documentation files (the | ||
|  |    "Software"), to deal in the Software without restriction, including | ||
|  |    without limitation the rights to use, copy, modify, merge, publish, | ||
|  |    distribute, sublicense, and/or sell copies of the Software, and to | ||
|  |    permit persons to whom the Software is furnished to do so, subject to | ||
|  |    the following conditions: | ||
|  | 
 | ||
|  |    The above copyright notice and this permission notice shall be included | ||
|  |    in all copies or substantial portions of the Software. | ||
|  | 
 | ||
|  |    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
|  |    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
|  |    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
|  |    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||
|  |    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
|  |    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
|  |    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */ | ||
|  | 
 | ||
|  | #ifndef _TRAX_REGISTERS_H_
 | ||
|  | #define _TRAX_REGISTERS_H_
 | ||
|  | 
 | ||
|  | #define SHOW	1
 | ||
|  | #define HIDE	0
 | ||
|  | 
 | ||
|  | #define RO	0
 | ||
|  | #define RW	1
 | ||
|  | 
 | ||
|  | /*  TRAX Register Numbers (from possible range of 0..127)  */ | ||
|  | #if 0
 | ||
|  | #define TRAXREG_ID		0
 | ||
|  | #define TRAXREG_CONTROL		1
 | ||
|  | #define TRAXREG_STATUS		2
 | ||
|  | #define TRAXREG_DATA		3
 | ||
|  | #define TRAXREG_ADDRESS		4
 | ||
|  | #define TRAXREG_TRIGGER		5
 | ||
|  | #define TRAXREG_MATCH		6
 | ||
|  | #define TRAXREG_DELAY		7
 | ||
|  | #define TRAXREG_STARTADDR	8
 | ||
|  | #define TRAXREG_ENDADDR		9
 | ||
|  | /*  Internal use only (unpublished):  */ | ||
|  | #define TRAXREG_P4CHANGE	16
 | ||
|  | #define TRAXREG_P4REV		17
 | ||
|  | #define TRAXREG_P4DATE		18
 | ||
|  | #define TRAXREG_P4TIME		19
 | ||
|  | #define TRAXREG_PDSTATUS	20
 | ||
|  | #define TRAXREG_PDDATA		21
 | ||
|  | #define TRAXREG_STOP_PC		22
 | ||
|  | #define TRAXREG_STOP_ICNT	23
 | ||
|  | #define TRAXREG_MSG_STATUS	24
 | ||
|  | #define TRAXREG_FSM_STATUS	25
 | ||
|  | #define TRAXREG_IB_STATUS	26
 | ||
|  | #define TRAXREG_MAX		27
 | ||
|  | #define TRAXREG_ITCTRL		96
 | ||
|  | #endif
 | ||
|  | /* The registers above match the NAR addresses. So, their values are used for NAR access */ | ||
|  | 
 | ||
|  | /*  TRAX Register Fields  */ | ||
|  | 
 | ||
|  | /*  TRAX ID register fields:  */ | ||
|  | #define TRAX_ID_PRODNO          0xf0000000	/* product number (0=TRAX) */
 | ||
|  | #define TRAX_ID_PRODOPT         0x0f000000	/* product options */
 | ||
|  | #define TRAX_ID_MIW64		0x08000000	/* opt: instruction width */
 | ||
|  | #define TRAX_ID_AMTRAX		0x04000000	/* opt: collection of options,
 | ||
|  | 						   internal (VER_2_0 or later)*/ | ||
|  | #define TRAX_ID_MAJVER(id)	(((id) >> 20) & 0x0f)
 | ||
|  | #define TRAX_ID_MINVER(id)	(((id) >> 17) & 0x07)
 | ||
|  | #define TRAX_ID_VER(id)		((TRAX_ID_MAJVER(id)<<4)|TRAX_ID_MINVER(id))
 | ||
|  | #define TRAX_ID_STDCFG		0x00010000	/* standard config */
 | ||
|  | #define TRAX_ID_CFGID		0x0000ffff	/* TRAX configuration ID */
 | ||
|  | #define TRAX_ID_MEMSHARED	0x00001000	/* Memshared option in TRAX */
 | ||
|  | #define TRAX_ID_FROM_VER(ver)	((((ver) & 0xf0) << 16) | (((ver) & 0x7) << 17))
 | ||
|  | /*  Other TRAX ID register macros:  */ | ||
|  | /*  TRAX versions of interest (TRAX_ID_VER(), ie. MAJVER*16 + MINVER):  */ | ||
|  | #define TRAX_VER_1_0		0x10		/* RA */
 | ||
|  | #define TRAX_VER_1_1		0x11		/* RB thru RC-2010.1 */
 | ||
|  | #define TRAX_VER_2_0		0x20		/* RC-2010.2, RD-2010.0, 
 | ||
|  | 						   RD-2011.1 */ | ||
|  | #define TRAX_VER_2_1		0x21		/* RC-2011.3 / RD-2011.2 and 
 | ||
|  | 						   later */ | ||
|  | #define TRAX_VER_3_0		0x30		/* RE-2012.0 */
 | ||
|  | #define	TRAX_VER_3_1		0x31		/* RE-2012.1 */
 | ||
|  | #define TRAX_VER_HUAWEI_3	TRAX_VER_3_0	/* For Huawei, PRs: 25223, 25224
 | ||
|  | 						   , 24880 */ | ||
|  | 
 | ||
|  | 
 | ||
|  | /*  TRAX version 1.0 requires a couple software workarounds:  */ | ||
|  | #define TRAX_ID_1_0_ERRATUM(id)	(TRAX_ID_VER(id) == TRAX_VER_1_0)
 | ||
|  | /*  TRAX version 2.0 requires software workaround for PR 22161:  */ | ||
|  | #define TRAX_ID_MEMSZ_ERRATUM(id)	(TRAX_ID_VER(id) == TRAX_VER_2_0)
 | ||
|  | 
 | ||
|  | /*  TRAX Control register fields:  */ | ||
|  | #define TRAX_CONTROL_TREN	0x00000001
 | ||
|  | #define TRAX_CONTROL_TRSTP	0x00000002
 | ||
|  | #define TRAX_CONTROL_PCMEN	0x00000004
 | ||
|  | #define TRAX_CONTROL_PTIEN	0x00000010
 | ||
|  | #define TRAX_CONTROL_CTIEN	0x00000020
 | ||
|  | #define TRAX_CONTROL_TMEN	0x00000080	/* 2.0+ */
 | ||
|  | #define TRAX_CONTROL_CNTU	0x00000200
 | ||
|  | #define TRAX_CONTROL_BIEN	0x00000400
 | ||
|  | #define TRAX_CONTROL_BOEN	0x00000800
 | ||
|  | #define TRAX_CONTROL_TSEN	0x00000800
 | ||
|  | #define TRAX_CONTROL_SMPER	0x00007000
 | ||
|  | #define TRAX_CONTROL_SMPER_SHIFT	12
 | ||
|  | #define TRAX_CONTROL_PTOWT	0x00010000
 | ||
|  | #define TRAX_CONTROL_CTOWT	0x00020000
 | ||
|  | #define TRAX_CONTROL_PTOWS	0x00100000
 | ||
|  | #define TRAX_CONTROL_CTOWS	0x00200000
 | ||
|  | #define TRAX_CONTROL_ATID	0x7F000000	/* 2.0+, amtrax */
 | ||
|  | #define TRAX_CONTROL_ATID_SHIFT		24
 | ||
|  | #define TRAX_CONTROL_ATEN	0x80000000	/* 2.0+, amtrax */
 | ||
|  | 
 | ||
|  | #define TRAX_CONTROL_PTOWS_ER	0x00020000	/* For 3.0 */
 | ||
|  | #define TRAX_CONTROL_CTOWT_ER	0x00100000	/* For 3.0 */
 | ||
|  | 
 | ||
|  | #define TRAX_CONTROL_ITCTO	0x00400000	/* For 3.0 */
 | ||
|  | #define TRAX_CONTROL_ITCTIA	0x00800000	/* For 3.0 */
 | ||
|  | #define TRAX_CONTROL_ITATV	0x01000000	/* For 3.0 */
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /*  TRAX Status register fields:  */ | ||
|  | #define TRAX_STATUS_TRACT	0x00000001
 | ||
|  | #define TRAX_STATUS_TRIG	0x00000002
 | ||
|  | #define TRAX_STATUS_PCMTG	0x00000004
 | ||
|  | #define TRAX_STATUS_BUSY	0x00000008  /* ER ??? */
 | ||
|  | #define TRAX_STATUS_PTITG	0x00000010
 | ||
|  | #define TRAX_STATUS_CTITG	0x00000020
 | ||
|  | #define TRAX_STATUS_MEMSZ	0x00001F00
 | ||
|  | #define TRAX_STATUS_MEMSZ_SHIFT		8
 | ||
|  | #define TRAX_STATUS_PTO		0x00010000
 | ||
|  | #define TRAX_STATUS_CTO		0x00020000
 | ||
|  | 
 | ||
|  | #define TRAX_STATUS_ITCTOA	0x00400000	/* For 3.0 */
 | ||
|  | #define TRAX_STATUS_ITCTI	0x00800000	/* For 3.0 */
 | ||
|  | #define TRAX_STATUS_ITATR	0x01000000	/* For 3.0 */
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /*  TRAX Address register fields:  */ | ||
|  | #define TRAX_ADDRESS_TWSAT	0x80000000
 | ||
|  | #define TRAX_ADDRESS_TWSAT_SHIFT	31
 | ||
|  | #define TRAX_ADDRESS_TOTALMASK	0x00FFFFFF
 | ||
|  | // !!! VUakiVU. added for new TRAX:
 | ||
|  | #define TRAX_ADDRESS_WRAPCNT	0x7FE00000	/* version ???... */
 | ||
|  | #define TRAX_ADDRESS_WRAP_SHIFT		21
 | ||
|  | 
 | ||
|  | /*  TRAX PCMatch register fields:  */ | ||
|  | #define TRAX_PCMATCH_PCML	0x0000001F
 | ||
|  | #define TRAX_PCMATCH_PCML_SHIFT		0
 | ||
|  | #define TRAX_PCMATCH_PCMS	0x80000000
 | ||
|  | 
 | ||
|  | /*  Compute trace ram buffer size (in bytes) from status register:  */ | ||
|  | #define TRAX_MEM_SIZE(status)	(1L << (((status) & TRAX_STATUS_MEMSZ) >> TRAX_STATUS_MEMSZ_SHIFT))
 | ||
|  | 
 | ||
|  | #if 0
 | ||
|  | /*  Describes a field within a register:  */ | ||
|  | typedef struct { | ||
|  |     const char*	name; | ||
|  | // unsigned	width;
 | ||
|  | // unsigned	shift;
 | ||
|  |     char	width; | ||
|  |     char	shift; | ||
|  |     char	visible;		/* 0 = internal use only, 1 = shown */ | ||
|  |     char	reserved; | ||
|  | } trax_regfield_t; | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /*  Describes a TRAX register:  */ | ||
|  | typedef struct { | ||
|  |     const char*	name; | ||
|  |     unsigned	id; | ||
|  |     char	width; | ||
|  |     char	visible; | ||
|  |     char	writable; | ||
|  |     char	reserved; | ||
|  |     //const trax_regfield_t * fieldset;
 | ||
|  | } trax_regdef_t; | ||
|  | 
 | ||
|  | 
 | ||
|  | extern const trax_regdef_t	trax_reglist[]; | ||
|  | extern const signed char	trax_readable_regs[]; | ||
|  | 
 | ||
|  | #ifdef  __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /*  Prototypes:  */ | ||
|  | extern int		trax_find_reg(char * regname, char **errmsg); | ||
|  | extern const char *	trax_regname(int regno); | ||
|  | 
 | ||
|  | #ifdef  __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* _TRAX_REGISTERS_H_ */
 | ||
|  | 
 |