|  | @@ -1,78 +0,0 @@
 | 
	
		
			
				|  |  | -//	Copyright (C) 2015 James Laird-Wah <james@laird-wah.net>
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//	This file is part of SCSI2SD.
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//	SCSI2SD is free software: you can redistribute it and/or modify
 | 
	
		
			
				|  |  | -//	it under the terms of the GNU General Public License as published by
 | 
	
		
			
				|  |  | -//	the Free Software Foundation, either version 3 of the License, or
 | 
	
		
			
				|  |  | -//	(at your option) any later version.
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//	SCSI2SD is distributed in the hope that it will be useful,
 | 
	
		
			
				|  |  | -//	but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
	
		
			
				|  |  | -//	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
	
		
			
				|  |  | -//	GNU General Public License for more details.
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//	You should have received a copy of the GNU General Public License
 | 
	
		
			
				|  |  | -//	along with SCSI2SD.  If not, see <http://www.gnu.org/licenses/>.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#include <stm32f2xx.h>
 | 
	
		
			
				|  |  | -#include <stdint.h>
 | 
	
		
			
				|  |  | -#include "trace.h"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// configure desired baud rate on the SWV pin.
 | 
	
		
			
				|  |  | -// up to the lower of CPU_clk/2 or 33MHz
 | 
	
		
			
				|  |  | -#define BAUD_RATE 921600
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Cortex-M3 Trace Port Interface Unit (TPIU)
 | 
	
		
			
				|  |  | -#define TPIU_BASE	0xe0040000
 | 
	
		
			
				|  |  | -#define MMIO32(addr) *((volatile uint32_t*)(addr))
 | 
	
		
			
				|  |  | -#define TPIU_SSPSR	MMIO32(TPIU_BASE + 0x000)
 | 
	
		
			
				|  |  | -#define TPIU_CSPSR	MMIO32(TPIU_BASE + 0x004)
 | 
	
		
			
				|  |  | -#define TPIU_ACPR	MMIO32(TPIU_BASE + 0x010)
 | 
	
		
			
				|  |  | -#define TPIU_SPPR	MMIO32(TPIU_BASE + 0x0F0)
 | 
	
		
			
				|  |  | -#define TPIU_FFSR	MMIO32(TPIU_BASE + 0x300)
 | 
	
		
			
				|  |  | -#define TPIU_FFCR	MMIO32(TPIU_BASE + 0x304)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define TPIU_CSPSR_BYTE (1 << 0)
 | 
	
		
			
				|  |  | -#define TPIU_CSPSR_HALFWORD	(1 << 1)
 | 
	
		
			
				|  |  | -#define TPIU_CSPSR_WORD	(1 << 3)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define TPIU_SPPR_SYNC	(0x0)
 | 
	
		
			
				|  |  | -#define TPIU_SPPR_ASYNC_MANCHESTER	(0x1)
 | 
	
		
			
				|  |  | -#define TPIU_SPPR_ASYNC_NRZ	(0x2)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define TPIU_FFCR_ENFCONT	(1 << 1)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -uint8_t LastTrace;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#ifndef TRACE
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void traceInit(void) { }
 | 
	
		
			
				|  |  | -#else
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void traceInit(void) {
 | 
	
		
			
				|  |  | -	// enable the trace module clocks
 | 
	
		
			
				|  |  | -	CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	// set SWV clock = CPU clock / 2, and enable
 | 
	
		
			
				|  |  | -	CY_SET_REG8(CYDEV_MFGCFG_MLOGIC_DEBUG, 0xc); // swv_clk_sel = CPU_clk / 2, swv_clk enable
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	// unlock the ETM/TPIU registers
 | 
	
		
			
				|  |  | -	*((volatile uint32_t*)0xE0000FB0) = 0xC5ACCE55;
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	// NRZ is "UART mode"
 | 
	
		
			
				|  |  | -	TPIU_SPPR = TPIU_SPPR_ASYNC_NRZ;
 | 
	
		
			
				|  |  | -	// prescaler, 0 = divide by 1
 | 
	
		
			
				|  |  | -	TPIU_ACPR = (BCLK__BUS_CLK__HZ/2/BAUD_RATE) - 1;
 | 
	
		
			
				|  |  | -	// can write 1, 2 or 4 byte ports
 | 
	
		
			
				|  |  | -	TPIU_CSPSR = TPIU_CSPSR_BYTE;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	// bypass formatter (puts sync & stuff in otherwise)
 | 
	
		
			
				|  |  | -	TPIU_FFCR &= ~TPIU_FFCR_ENFCONT;
 | 
	
		
			
				|  |  | -	// enable ITM, enable the first 2 stimulus ports
 | 
	
		
			
				|  |  | -	ITM->TCR = ITM_TCR_ITMENA_Msk;
 | 
	
		
			
				|  |  | -	ITM->TER = 0x3;
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	trace(trace_begin);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -#endif
 |