📄 menu_it.c
字号:
//*----------------------------------------------------------------------------
//* ATMEL Microcontroller Software Support - ROUSSET -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name : menu_it.c
//* Object : manage TTRC interruption for the AT91EB55
//*
//* 1.0 10/09/00 JPP : Creation
//*----------------------------------------------------------------------------
#ifndef AT91_DEBUG_NONE
#include <stdio.h>
#endif
#include "parts/m55800/lib_m55800.h"
#include "targets/eb55/eb55.h"
#include "drivers/time_rtc/time_rtc.h"
#include "drivers/com/com.h"
extern print_date(void);
extern int get_val(int val);
//* Global Variable
extern char message[512];
extern TimeDescRtc rtc;
extern ComDesc COM;
char mes_menu[]=
{
"\n\r COMMAND MENU: Interrupt\n\r"
" 0) Info\n\r"
" 1) Get Alarm\n\r"
" 2) Get event type\n\r"
" 3) Read status \n\r"
" 4) Clear Status\n\r"
" 8) Open Interrupt RTC\n\r"
" 9) Close Interrupt RTC\n\r"
" 99) Quit program\n\r"
"Enter command to execute: "
};
//*----------------------------------------------------------------------------
//* Function Name : Get_Command_rtc_it
//* Object : Get command val
//* Input Parameters : None
//* Output Parameters : int : Command num
//*----------------------------------------------------------------------------
int Get_Command_rtc_it(void)
{
int command;
at91_print_frame(&COM,mes_menu,sizeof(mes_menu));
at91_scanf(&COM,"%d", &command);
at91_print_crlf(&COM);
return command;
}
//*----------------------------------------------------------------------------
//* Function Name : menu
//* Object : check general menu
//* Input Parameters : None
//* Output Parameters : None
//*----------------------------------------------------------------------------
void menu_rtc_it(void)
{
int command = 0;
u_int register_sr,rtc_mode;
u_int tevsel;
u_int cevsel;
u_int read;
while(command!=99)
{
command = Get_Command_rtc_it();
switch(command)
{
case 0: /* Info */
//* update time
at91_time_rtc_read(&rtc);
//* print time
print_date();
//* print event
read = at91_rtc_get_event(*(&rtc.rtc_desc));
tevsel = read & RTC_TEVSEL_MASQ ;
cevsel = read & RTC_CEVSEL_MASQ ;
at91_print(&COM,"TYPE change :");
if (tevsel == RTC_TEVSEL_MN_CHG)
at91_print(&COM,"Minute\n\r");
if (tevsel == RTC_TEVSEL_HR_CHG)
at91_print(&COM,"Hour\n\r");
if (tevsel == RTC_TEVSEL_EVDAY_MD)
at91_print(&COM,"Every day at midnight\n\r");
if (tevsel == RTC_TEVSEL_EVDAY_NOON)
at91_print(&COM,"Every day at noon\n\r");
at91_print(&COM,"TYPE change :");
if (cevsel == RTC_CEVSEL_WEEK_CHG)
at91_print(&COM,"Week change\n\r");
if (cevsel == RTC_CEVSEL_MONTH_CHG)
at91_print(&COM,"Month change\n\r");
if (cevsel == RTC_CEVSEL_YEAR_CHG)
at91_print(&COM,"Year change\n\r");
if (cevsel == RTC_CEVSEL_MASQ)
at91_print(&COM,"Year change\n\r");
//* print alarm
at91_time_rtc_read_time_alarm(&rtc);
at91_time_rtc_read_cal_alarm(&rtc);
//* bcd date
sprintf(message,"date bcd: DD-MM %02X-%02X mode %08X \n\r",
rtc.alarm_bcd.date,rtc.alarm_bcd.month,rtc.mode_al_cal);
at91_print(&COM,message);
//* bcd time
sprintf(message,"TIME bcd: HH:MM:SS %02X-%02X-%02X AM/PM %02X mode %08X\n\r",
rtc.alarm_bcd.hour,rtc.alarm_bcd.min,rtc.alarm_bcd.sec,rtc.alarm_bcd.ampm ,rtc.mode_al_time);
at91_print(&COM,message);
break;
case 1: /* Get Alarm */
//* RTC Time Alarm Register
at91_print(&COM,"RTC Time Alarm Register\n\r");
at91_print(&COM,"Enter seconde: ");
rtc.alarm_int.sec = get_val(rtc.alarm_int.sec);
at91_print(&COM,"Enter seconde 0=>disable 1=>enable: ");
read =0xFF;
read = get_val(read);
if (read != 0xFF)
{
if (read == 0) rtc.mode_al_time &= ~(RTC_SEC_ALRM_EN);
if (read == 1) rtc.mode_al_time |= RTC_SEC_ALRM_EN;
}
at91_print(&COM,"Enter minute: ");
rtc.alarm_int.min = get_val(rtc.alarm_int.min);
at91_print(&COM,"Enter minute 0=>disable 1=>enable: ");
read =0xFF;
read = get_val(read);
if (read != 0xFF)
{
if (read == 0) rtc.mode_al_time &= ~(RTC_MIN_ALRM_EN);
if (read == 1) rtc.mode_al_time |= RTC_MIN_ALRM_EN;
}
at91_print(&COM,"Enter hour: ");
rtc.alarm_int.hour = get_val(rtc.alarm_int.hour);
at91_print(&COM,"Enter hour 0=>disable 1=>enable: ");
read =0xFF;
read = get_val(read);
if (read != 0xFF)
{
if (read == 0) rtc.mode_al_time &= ~(RTC_HOUR_ALRM_EN);
if (read == 1) rtc.mode_al_time |= RTC_HOUR_ALRM_EN;
}
at91_print(&COM,"Enter AM / PM: ");
rtc.alarm_int.ampm = get_val(rtc.alarm_int.ampm);
//* set Alarm
at91_time_rtc_set_time_alarm(&rtc);
//* RTC Calendar Alarm Register
at91_print(&COM,"RTC Calendar Alarm Register\n\r");
at91_print(&COM,"Enter date: ");
rtc.alarm_int.date = get_val(rtc.alarm_int.date);
at91_print(&COM,"Enter date 0=>disable 1=>enable: ");
read =0xFF;
read = get_val(read);
if (read != 0xFF)
{
if (read == 0) rtc.mode_al_cal &= ~(RTC_DATE_ALRM_EN);
if (read == 1) rtc.mode_al_cal |= RTC_DATE_ALRM_EN;
}
at91_print(&COM,"Enter mouth: ");
rtc.alarm_int.month = get_val(rtc.alarm_int.month);
at91_print(&COM,"Enter mouth 0=>disable 1=>enable: ");
read =0xFF;
read = get_val(read);
if (read != 0xFF)
{
if (read == 0) rtc.mode_al_cal &= ~(RTC_MONTH_ALRM_EN);
if (read == 1) rtc.mode_al_cal |= RTC_MONTH_ALRM_EN;
}
//* set Alarm
at91_time_rtc_set_cal_alarm(&rtc);
at91_print_crlf(&COM);
break;
case 2: /* Get event type and set */
at91_print(&COM,"\n\rEnter TYPE change :0 = Minute ,1 = Hour ,2 = Every midnight,3 = Everynoon");
read =0xFF;
read = get_val(read);
if (read != 0xFF)
{
if (read == 0) tevsel = RTC_TEVSEL_MN_CHG;
if (read == 1) tevsel = RTC_TEVSEL_HR_CHG;
if (read == 2) tevsel = RTC_TEVSEL_EVDAY_MD;
if (read == 3) tevsel = RTC_TEVSEL_EVDAY_NOON;
}
at91_print(&COM,"Enter TYPE change :0 = Week, 1 = Month, 2,3 = Year");
read =0xFF;
read = get_val(read);
if (read != 0xFF)
{
if (read == 0) cevsel = RTC_CEVSEL_WEEK_CHG;
if (read == 1) cevsel = RTC_CEVSEL_MONTH_CHG;
if (read == 2) cevsel = RTC_CEVSEL_YEAR_CHG;
if (read == 3) cevsel = RTC_CEVSEL_YEAR_CHG;
}
at91_rtc_set_event(*(&rtc.rtc_desc),( tevsel | cevsel ));
break;
case 4: /*Clear Status*/
at91_rtc_clear_status(*(&rtc.rtc_desc));
case 3: /* Read status Alarm*/
register_sr=at91_rtc_get_status(*(&rtc.rtc_desc));
sprintf(message," Status register %02x\n\r",register_sr);
at91_print(&COM,message);
if (( register_sr & RTC_ACKUPD ) == RTC_ACKUPD)
at91_print(&COM,"Enter mouth 0=>disable 1=>enable:");
if (( register_sr & RTC_ALARM ) == RTC_ALARM)
at91_print(&COM,"Alarm \n\r");
if (( register_sr & RTC_SEC ) == RTC_SEC)
at91_print(&COM,"Seconde Event \n\r");
if (( register_sr & RTC_TIMEV ) == RTC_TIMEV)
at91_print(&COM,"Time event\n\r");
if (( register_sr & RTC_CALEV ) == RTC_CALEV)
at91_print(&COM,"Calandar Event\n\r");
break;
case 8: /* Open Interrupt RTC*/
at91_print(&COM,"Enter interrupt=> 1 ACK, 2 ALARM, 4 sec, 8 TINEV, 16 CAL (hex):");
at91_scanf(&COM,"%x",(int *)&rtc_mode);
at91_print_crlf(&COM);
at91_time_rtc_open_irq(&rtc, rtc_mode,4);
break;
case 9: /* Close Interrupt RTC*/
at91_time_rtc_close_irq(&rtc);
break;
case 99: /* quit */
break;
default: /* invalid command */
at91_print(&COM,"Invalid command entered. Please enter again!\n\r");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -