view nuc-fw/serial/debug.c @ 137:5fe5559003b7

RV bring-up: RVT "system time" heartbeat messages now get printed every 20 s! The problem was a slight Nucleus API incompatibility between what the RVF code from TCS211 expected and what our FreeNucleus implements: in the TCS211 version of Nucleus it was OK to pass 0 for the initial_time parameter to NU_Create_Timer(), but our version flags such usage as an error. RVF used 0 as the dummy initial_time value when initializing the legacy RV timers with NU_DISABLE_TIMER. Implemented fix: using a dummy value of 1 instead.
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Mon, 11 Nov 2013 09:56:23 +0000
parents 3b5c3f3646fb
children
line wrap: on
line source

/*
 * This module is a FreeCalypso addition for very low-level debugging.
 * The functions implemented in this module produce "forced" serial output
 * on the RVTMUX UART without going through the normal RV trace mechanism.
 * Calls to these FC debug functions should be added during difficult
 * debug sessions, but should never remain in stable checked-in code:
 * these functions are too disruptive to be used in "production" fw images.
 */

#include "../include/config.h"
#include "../include/sys_types.h"

#include "serialswitch.h" 

#include <string.h>

freecalypso_raw_dbgout(char *string)
{
	char *p;
	int l, cc;

	p = string;
	l = strlen(p);
	while (l) {
		cc = SER_tr_WriteNBytes(SER_LAYER_1, p, l);
		p += cc;
		l -= cc;
	}
}

freecalypso_lldbg_intinfo()
{
	char strbuf[128];
	extern unsigned IQ_TimerCount2;
	extern unsigned TMD_System_Clock;
	extern unsigned INT_Check_IRQ_Mask();

	sprintf(strbuf, "*CPSR=%08x, IQ_TimerCount2=%u, TMD_System_Clock=%u",
		INT_Check_IRQ_Mask(), IQ_TimerCount2, TMD_System_Clock);
	freecalypso_raw_dbgout(strbuf);
}

freecalypso_nucidle_dbghook()
{
	freecalypso_raw_dbgout("*In Nucleus idle loop");
	freecalypso_lldbg_intinfo();
}