Beispiel #1
0
/**
 * \brief Button event.
 */
static void _process_button_evt(void)
{
	uint32_t id = get_usart_id_from_addr(lin_desc2.addr);

	switch (key) {
	case 'P':
	case 'p':
		/* No interrupt on Master */
		aic_disable(id);
		/* Configure lin_descriptor MASTER */
		lin_msg_master.id = LIN_FRAME_ID_12;
		lin_msg_master.dlc = sizeof(lin_data_master);
		lin_msg_master.lin_cmd = PUBLISH;
		lin_register_descriptor(LIN_MASTER_NODE_NUM, 0, &lin_msg_master);
		/* Configure lin_descriptor SLAVE */
		lin_msg_slave.id = LIN_FRAME_ID_12;
		lin_msg_slave.dlc = sizeof(lin_data_slave);
		lin_msg_slave.lin_cmd = SUBSCRIBE;
		lin_msg_slave.pfnct = lin_slave_task_ID12,
		lin_register_descriptor(LIN_SLAVE_NODE_NUM, 0, &lin_msg_slave);
		memcpy(&lin_data_master, "12345678", sizeof(lin_data_master));
		break;

	case 'S':
	case 's':
		/* Configure lin_descriptor MASTER */
		lin_msg_master.id = LIN_FRAME_ID_15;
		lin_msg_master.dlc = sizeof(lin_data_master);
		lin_msg_master.lin_cmd = SUBSCRIBE;
		lin_register_descriptor(LIN_MASTER_NODE_NUM, 1, &lin_msg_master);
		/* Configure lin_descriptor SLAVE */
		lin_msg_slave.id = LIN_FRAME_ID_15;
		lin_msg_slave.dlc = sizeof(lin_data_slave);
		lin_msg_slave.lin_cmd = PUBLISH;
		lin_register_descriptor(LIN_SLAVE_NODE_NUM, 1, &lin_msg_slave);
		/* Interrupt Master, wait transfert complete */
		aic_enable(id);
		memcpy(&lin_data_slave, "87654321", sizeof(lin_data_slave));
		break;

	default:
		aic_disable(id);
		lin_msg_master.lin_cmd = IGNORE;
		lin_msg_slave.lin_cmd = IGNORE;
		break;
	}
}
int main(void)
{
	uint8_t ucKey;

	/* Disable watchdog */
	wdt_disable();

	/* Configure console */
	board_cfg_console();

	/* Output example information */
	printf("\r\n\r\n\r\n");
	printf("-- RTC Example " SOFTPACK_VERSION " --\r\n");
	printf("-- " BOARD_NAME "\r\n");
	printf("-- Compiled: " __DATE__ " " __TIME__ " --\n\r");

	// put 25 °C as a default temp, if there is no temprature sensor
	Temperature = 25;

	printf("Configure TC.\r\n");
	configure_tc();

	/* Default RTC configuration */
	rtc_set_hour_mode(0);	/* 24-hour mode */
	struct _time empty_time = {0,0,0};
	if (rtc_set_time_alarm(&empty_time)) {
		printf("\r\n Disable time alarm fail!");
	}
	struct _date empty_date = {0,0,0};
	if (rtc_set_date_alarm(&empty_date)) {
		printf("\r\n Disable date alarm fail!");
	}

	/* Configure RTC interrupts */
	rtc_enable_it(RTC_IER_SECEN | RTC_IER_ALREN);
	aic_set_source_vector(ID_SYSC, sysc_handler);
	aic_enable(ID_SYSC);

	/* Refresh display once */
	_RefreshDisplay();
	new_time.hour = 0;
	new_time.min = 0;
	new_time.sec = 30;
	rtc_set_time_alarm(&new_time);
	bMenuShown = 0;
	alarmTriggered = 0;
	rtc_calibration(Temperature);

	/* Handle keypresses */
	while (1) {
		ucKey = console_get_char();

		/* set time */
		if (ucKey == 't') {
			bState = STATE_SET_TIME;
			aic_disable(ID_TC0);

			do {
				printf("\r\n\r\n Set time(hh:mm:ss): ");
			} while (get_new_time());

			/* if valid input, none of variable for time is 0xff */
			if (new_time.hour != 0xFF) {
				if (rtc_set_time (&new_time)) {
					printf
					    ("\r\n Time not set, invalid input!\n\r");
				}
			}

			bState = STATE_MENU;
			bMenuShown = 0;
			_RefreshDisplay();
			CountDownTimer = 0;
			aic_enable(ID_TC0);
		}

		/* clock calibration */
		else if (ucKey == 'p') {

			rtc_calibration(30);

			bState = STATE_MENU;
			bMenuShown = 0;
			_RefreshDisplay();
		}

		/* set date */
		else if (ucKey == 'd') {
			bState = STATE_SET_DATE;
			aic_disable(ID_TC0);

			do {
				printf("\r\n\r\n Set date(mm/dd/yyyy): ");
			} while (get_new_date());

			/* if valid input, none of variable for date is 0xff(ff) */
			if (new_date.year != 0xFFFF) {
				if (rtc_set_date(&new_date)) {
					printf
					    ("\r\n Date not set, invalid input!\r\n");
				}
			}

			/* only 'mm/dd' inputed */
			if (new_date.month != 0xFF && new_date.year == 0xFFFF) {
				printf("\r\n Not Set for no year field!\r\n");
			}

			bState = STATE_MENU;
			bMenuShown = 0;
			CountDownTimer = 0;
			aic_enable(ID_TC0);
			_RefreshDisplay();
		}

		/* set time alarm */
		else if (ucKey == 'i') {
			bState = STATE_SET_TIME_ALARM;
			aic_disable(ID_TC0);

			do {
				printf("\r\n\r\n Set time alarm(hh:mm:ss): ");
			} while (get_new_time());

			if (new_time.hour != 0xFF) {
				if (rtc_set_time_alarm(&new_time)) {
					printf
					    ("\r\n Time alarm not set, invalid input!\r\n");
				} else {
					printf
					    ("\r\n Time alarm is set at %02d:%02d:%02d!",
					     new_time.hour, new_time.min, new_time.sec);
				}
			}
			bState = STATE_MENU;
			bMenuShown = 0;
			alarmTriggered = 0;
			CountDownTimer = 0;
			aic_enable(ID_TC0);
			_RefreshDisplay();
		}

		/* set date alarm */
		else if (ucKey == 'm') {
			bState = STATE_SET_DATE_ALARM;
			aic_disable(ID_TC0);

			do {
				printf("\r\n\r\n Set date alarm(mm/dd/): ");
			} while (get_new_date());

			if (new_date.year == 0xFFFF && new_date.month != 0xFF) {
				if (rtc_set_date_alarm(&new_date)) {
					printf
					    ("\r\n Date alarm not set, invalid input!\r\n");
				} else {
					printf
					    ("\r\n Date alarm is set on %02d/%02d!",
					     new_date.month, new_date.day);
				}

			}
			bState = STATE_MENU;
			bMenuShown = 0;
			alarmTriggered = 0;
			CountDownTimer = 0;
			aic_enable(ID_TC0);
			_RefreshDisplay();
		}

		/* clear trigger flag */
		else if (ucKey == 'c') {
			alarmTriggered = 0;
			bMenuShown = 0;
			_RefreshDisplay();
		}

		/* quit */
		else if (ucKey == 'q') {
			break;
		}
	}

	return 0;
}