/******************************************************************************
�� �� ����CLOCK.h
����������ʱ��ϵͳ���ü���ʼ��ͷ�ļ�
��    �ߣ�����
��    ����V1.0
��    �ڣ�2016.11.2
******************************************************************************/

#ifndef _CRG_H_
#define _CRG_H_

#include "stdint.h"
#include "mc9s12xhy256.h"
extern uint8_t Motortime;
extern uint8_t FuelTimeFlag;
/******************************************************************************
ʱ��Ƶ��
******************************************************************************/
#define    OSCCLK                        8000000             /* ����Ƶ�� */
#define    BUSCLK                       32000000             /* ����Ƶ�� */
#define    PLLCLK                     BUSCLK * 2             /* PLL Ƶ�� */

/******************************************************************************
αͣ��(Pseudo Stop)ģʽʹ��
******************************************************************************/
#define    CRG_USE_PSEUDO_STOP_MODE            1

/******************************************************************************
ͣ��״̬��־
******************************************************************************/
extern volatile uint8_t CRGStopMode;
#define    CRG_STOP_MODE                       CRGStopMode

/******************************************************************************
���Ź���ʱ����ѡ��
******************************************************************************/
#define   WDT_PERIOD     WDT_PERIOD_4194304xTosc


/******************************************************************************
���Ź���ʱ����
******************************************************************************/
#define    WDT_PERIOD_INVALID               0x00     /* ��Ч����,�ر� WDT */
#define    WDT_PERIOD_16384xTosc            0x01     /* 2^14 ��OSCCLK���� */
#define    WDT_PERIOD_65536xTosc            0x02     /* 2^16 ��OSCCLK���� */
#define    WDT_PERIOD_262144xTosc           0x03     /* 2^18 ��OSCCLK���� */
#define    WDT_PERIOD_1048576xTosc          0x04     /* 2^20 ��OSCCLK���� */
#define    WDT_PERIOD_4194304xTosc          0x05     /* 2^22 ��OSCCLK���� */
#define    WDT_PERIOD_8388608xTosc          0x06     /* 2^23 ��OSCCLK���� */
#define    WDT_PERIOD_16777216xTosc         0x07     /* 2^24 ��OSCCLK���� */

/******************************************************************************
ʱ��Ƶ��������,��оƬ�ͺŶ���
******************************************************************************/
//����Ƶ��������
#define    OSCCLK_MIN                    4000000
#define    OSCCLK_MAX                   16000000

//PLL�ο�Ƶ��������
#define    REFCLK_MIN                    1000000
#define    REFCLK_MAX                   40000000

//PLLѹ������Ƶ��������
#define    VCOCLK_MIN                   32000000
#define    VCOCLK_MAX                  120000000

/******************************************************************************
���Ź���λ�궨��
******************************************************************************/
#define    wdt_reset()       __RESET_WATCHDOG()

/******************************************************************************
RTI��ʱ�ṹ
******************************************************************************/
typedef struct
{
  uint16_t  RollingCounter;
  uint16_t  BackupCounter;
  uint16_t  Year;
  uint16_t  BackupYear;
  uint8_t   Month;
  uint8_t   Date;
  uint8_t   Hour;
  uint8_t   Minute;
  uint8_t   Second;
  uint8_t   LeapYear;
} RTITimingStruct;

extern volatile RTITimingStruct RealTimeClock;

#define   RTC_ROLLING_COUNTER               RealTimeClock.RollingCounter
#define   RTC_YEAR                          RealTimeClock.Year
#define   RTC_MONTH                         RealTimeClock.Month
#define   RTC_DATE                          RealTimeClock.Date
#define   RTC_HOUR                          RealTimeClock.Hour
#define   RTC_MINUTE                        RealTimeClock.Minute
#define   RTC_SECOND                        RealTimeClock.Second
#define   RTC_LEAP_YEAR                     RealTimeClock.LeapYear

/******************************************************************************
ʱ��Ĭ��ʱ��
******************************************************************************/
#define   RTC_DEFAULT_YEAR                  2020
#define   RTC_DEFAULT_MONTH                 4
#define   RTC_DEFAULT_DATE                  7
#define   RTC_DEFAULT_HOUR                  0
#define   RTC_DEFAULT_MINUTE                0
#define   RTC_DEFAULT_SECOND                0

/******************************************************************************
��������
******************************************************************************/
void WDT_Init(void);
void Clock_Init(void);
//void CRG_Enter_Stop_Mode(void);
void RTI_Init(void);
void RTI_Timing_Service(void);
uint8_t Determine_Leap_Year(uint16_t Year);
void Enter_Stop_Mode(void);
#endif