//======================================================================
//文件名称：main.c
//功能概要：应用工程主函数及部分子函数
//版权所有：苏大arm技术中心(sumcu.suda.edu.cn)
//版本更新：2017.08:1.0, 2019.1:A.10
//功能描述：说明见工程文件夹下的Doc文件夹内Readme.txt文件
//======================================================================
#define GLOBLE_VAR
#include "includes.h"      //包含总头文件

//----------------------------------------------------------------------
//----------------------------------------------------------------------
//【根据实际需要增删】声明使用到的内部函数
//main.c使用的内部函数声明处

//----------------------------------------------------------------------
//主函数，一般情况下可以认为程序从此开始运行（实际上有启动过程见书稿）
int main(void)
 {
	//（1）启动部分（开头）======
	//（1.1）声明main函数使用的局部变量
	uint_64 mMainLoopCount;  //主循环使用的记录主循环次数变量
    uint_64 mTime;           //主循环使用的临时时间变量



	//（1.3）【不变】BIOS中API接口表首地址、用户中断处理程序名初始化
    bios_fun_point=svc1_init();  //获取BIOS中API接口表首地址
    Int_Handler_init();    //用户中断处理程序名初始化
    gTimeSec=1548950401;         //默认2019-02-01 00:00:01
    sysTimeSet(gTimeSec);        //设置系统时间初值
    mTime=sysTimeGet();          //获得当前系统时间（s）
	//（1.2）【不变】关总中断
	DISABLE_INTERRUPTS;

    mMainLoopCount = 0;     //主循环使用的记录主循环次数变量

    //（1.4）用户外设模块初始化
    light_init(LIGHT_RED,LIGHT_OFF);//初始化红灯
    uart_init(UART_USER2,9600);


	//（1.5）使能模块中断
    uart_enable_re_int(UART_USER2);

	//（1.6）【不变】开总中断
    ENABLE_INTERRUPTS;

    //（1）启动部分（结尾）======

    //（2）主循环部分（开头）======
    for(;;)
    {
    	mMainLoopCount++;     //主循环使用的记录主循环次数变量
        //1秒到达之后进行的操作
        mTime=sysTimeGet();    //获得当前系统时间（s)
        if (mTime!=gTimeSec)   //1秒到
        {
            gTimeSec=mTime;   //当前时间保存到全局变量gTimeSec中
            timeChange(gTimeSec,gTimeString);  //时间戳转为字符串
            printf(gTimeString);               //输出到PC机
            printf("  \n");
            light_change(LIGHT_RED);    //切换红灯（这样红灯每秒闪一次）
        }
    }
    //（2）主循环部分（结尾）======
}

//======以下为主函数调用的子函数======

/*
 知识要素：
 1.main.c是一个具体的实例，执行相关程序流程不会涉及任何环境，芯片问题。
 该文件所有代码均不会涉及具体的硬件和环境，它通过调用相关构件来实现与硬件
 系统的交互。
 2.本文件共有两类代码，一类为【根据实际需要增删】，此类代码根据具体
 项目需求进行更改；另一类为【不变】，此类代码与具体项目无关，是通用的，
 无需根据具体项目进行更改。
 3.本文件对宏GLOBLE_VAR进行了定义， 所以在包含"includes.h"头文件时
 会定义全局变量，在其他文件中包含"includes.h"头文件时，仅声明该头文件中
 的全局变量。
 */
