1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/******************************************************************************
文 件 名: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