예제 #1
0
/**
 * \brief Execute SRAM and CPU tests
 *
 * This is an example of how the Class B interrupt monitor is used.
 * The tests performed in this function are not required to be run
 * periodically for Class B certification.
 *
 * \return Nothing is returned, but the tests will alter the state
 * of the global classb_error if an error is detected.
 */
static void ovenctl_periodic_classb_tests(void)
{
	/* Check a section of SRAM */
	cli();
	classb_sram_test();

	/* Check the register file */
	classb_register_test();
	sei();

	/* Tell the interrupt monitor that we have executed */
	classb_intmon_increase(PER_CLASSB_TESTS);
}
예제 #2
0
/**
 * \brief Run all Class B tests
 *
 * Destructively test ADC and DAC; modules must be reinitialized for application
 * use. Then test the SRAM, CPU registers and CRC of Flash (if enabled).
 */
void oven_classb_run_tests(void)
{
	oven_ui_set_status_leds(S_ORANGE); /* Tests started */

	/* Test the DAC and ADC used in this application */
	dac_enable(&DACB);
	adc_enable(&ADCA);
	classb_analog_io_test(&DACB, &ADCA);

	/* Disable interrupts globally. Normally one would disable
	 * this also for the analog test, but to emulate an error
	 * we allow interrupts during the analog test.
	 */
	cli();
	for (uint8_t i = 0; i < CLASSB_NSECS; ++i) {
		classb_sram_test();
	}

	/* Test the register file */
	classb_register_test();

	/* Test CRC Checksum */
	/* Uncomment the code below and set a breakpoint on it, then press
	 * F10/Step over to read the calculated checksum. Insert the value in
	 * classb_precalculated_flash_crc at the top of this file and recompile
	 * to get a working CRC check.
	 */
	/* checksum_test_flash = CLASSB_CRC32_Flash_HW (CRC_APP, 0, 0,
	 * &classb_precalculated_flash_crc);
	 */

	sei();

	/* Update status LED according to test results */
	if (classb_error == CLASSB_ERROR_NONE) {
		oven_ui_set_status_leds(S_GREEN);
	} else {
		oven_ui_set_status_leds(S_RED);
	}
}