⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu_it.c

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 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 + -