コード例 #1
0
ファイル: avr32_ap7k.c プロジェクト: RTOSkit/openocd
static int avr32_ap7k_examine(struct target *target)
{
	uint32_t devid, ds;
	struct avr32_ap7k_common *ap7k = target_to_ap7k(target);

	if (!target_was_examined(target))
	{
		target_set_examined(target);
		avr32_jtag_nexus_read(&ap7k->jtag, AVR32_OCDREG_DID, &devid);
		LOG_INFO("device id: %08x", devid);
		avr32_ocd_setbits(&ap7k->jtag, AVR32_OCDREG_DC,OCDREG_DC_DBE);
		avr32_jtag_nexus_read(&ap7k->jtag, AVR32_OCDREG_DS, &ds);

		/* check for processor halted */
		if (ds & OCDREG_DS_DBA) 
		{
			LOG_INFO("target is halted");
			target->state = TARGET_HALTED;
		}
		else
			target->state = TARGET_RUNNING;
	}

	return ERROR_OK;
}
コード例 #2
0
ファイル: avr32_ap7k.c プロジェクト: AmesianX/openocd
static int avr32_ap7k_poll(struct target *target)
{
	uint32_t ds;
	int retval;
	struct avr32_ap7k_common *ap7k = target_to_ap7k(target);

	retval = avr32_jtag_nexus_read(&ap7k->jtag, AVR32_OCDREG_DS, &ds);
	if (retval != ERROR_OK)
		return retval;

	/* check for processor halted */
	if (ds & OCDREG_DS_DBA) {
		if ((target->state == TARGET_RUNNING) || (target->state == TARGET_RESET)) {
			target->state = TARGET_HALTED;

			retval = avr32_ap7k_debug_entry(target);
			if (retval != ERROR_OK)
				return retval;

			target_call_event_callbacks(target, TARGET_EVENT_HALTED);
		} else if (target->state == TARGET_DEBUG_RUNNING) {
			target->state = TARGET_HALTED;

			retval = avr32_ap7k_debug_entry(target);
			if (retval != ERROR_OK)
				return retval;

			target_call_event_callbacks(target, TARGET_EVENT_DEBUG_HALTED);
		}
	} else
		target->state = TARGET_RUNNING;


	return ERROR_OK;
}
コード例 #3
0
ファイル: avr32_ap7k.c プロジェクト: AmesianX/openocd
static int avr32_ap7k_debug_entry(struct target *target)
{

	uint32_t dpc, dinst;
	int retval;
	struct avr32_ap7k_common *ap7k = target_to_ap7k(target);

	retval = avr32_jtag_nexus_read(&ap7k->jtag, AVR32_OCDREG_DPC, &dpc);
	if (retval != ERROR_OK)
		return retval;

	retval = avr32_jtag_nexus_read(&ap7k->jtag, AVR32_OCDREG_DINST, &dinst);
	if (retval != ERROR_OK)
		return retval;

	ap7k->jtag.dpc = dpc;

	avr32_ap7k_save_context(target);

	return ERROR_OK;
}
コード例 #4
0
ファイル: avr32_regs.c プロジェクト: FelixVi/openocd
static int avr32_jtag_read_reg(struct avr32_jtag *jtag_info, int reg,
		uint32_t *val)
{
	int retval;
	uint32_t dcsr;

	retval = avr32_jtag_exec(jtag_info, MTDR(AVR32_OCDREG_DCCPU, reg));
	if (retval != ERROR_OK)
		return retval;

	do {
		retval = avr32_jtag_nexus_read(jtag_info,
			AVR32_OCDREG_DCSR, &dcsr);

		if (retval != ERROR_OK)
			return retval;
	} while (!(dcsr & OCDREG_DCSR_CPUD));

	retval = avr32_jtag_nexus_read(jtag_info,
			AVR32_OCDREG_DCCPU, val);

	return retval;
}
コード例 #5
0
ファイル: avr32_jtag.c プロジェクト: Erguotou/openocd-libswd
int avr32_ocd_clearbits(struct avr32_jtag *jtag, int reg, uint32_t bits)
{
	uint32_t value;
	int res;

	res = avr32_jtag_nexus_read(jtag, reg, &value);
	if (res)
		return res;

	value &= ~bits;
	res = avr32_jtag_nexus_write(jtag, reg, value);
	if (res)
		return res;

	return ERROR_OK;
}
コード例 #6
0
ファイル: avr32_jtag.c プロジェクト: Erguotou/openocd-libswd
int avr32_jtag_exec(struct avr32_jtag *jtag_info, uint32_t inst)
{
	int retval;
	uint32_t ds;

	retval = avr32_jtag_nexus_write(jtag_info, AVR32_OCDREG_DINST, inst);
	if (retval != ERROR_OK)
		return retval;

	do {
		retval = avr32_jtag_nexus_read(jtag_info, AVR32_OCDREG_DS, &ds);
		if (retval != ERROR_OK)
			return retval;
	} while ((ds & OCDREG_DS_DBA) && !(ds & OCDREG_DS_INC));

	return ERROR_OK;
}
コード例 #7
0
ファイル: avr32_regs.c プロジェクト: FelixVi/openocd
static int avr32_jtag_write_reg(struct avr32_jtag *jtag_info, int reg,
		uint32_t val)
{
	int retval;
	uint32_t dcsr;

	/* Restore Status reg */
	retval = avr32_jtag_nexus_write(jtag_info,
				AVR32_OCDREG_DCEMU, val);
	if (retval != ERROR_OK)
		return retval;

	retval = avr32_jtag_exec(jtag_info, MFDR(reg, AVR32_OCDREG_DCEMU));
	if (retval != ERROR_OK)
		return retval;
	do {
		retval = avr32_jtag_nexus_read(jtag_info,
			AVR32_OCDREG_DCSR, &dcsr);
	} while (!(dcsr & OCDREG_DCSR_EMUD) && (retval == ERROR_OK));

	return retval;
}