//======================================================================
//文件名称：main.c（应用工程主函数）
//框架提供：SD-Arm（sumcu.suda.edu.cn）
//版本更新：20191108-20201106
//功能描述：见本工程的..\01_Doc\Readme.txt
//移植规则：【固定】
//======================================================================
#define GLOBLE_VAR
#include "includes.h"      //包含总头文件

//----------------------------------------------------------------------
//声明使用到的内部函数
//main.c使用的内部函数声明处

//----------------------------------------------------------------------
//主函数，一般情况下可以认为程序从此开始运行（实际上有启动过程，参见书稿）
int main(void)
{
  //（1）======启动部分（开头）
  //（1.1）声明main函数使用的局部变量
    uint32_t mMainLoopCount;  //主循环次数变量
    uint32_t mLightCount;    //灯亮暗次数变量
    uint8_t  i;               //临时变量
    uint8_t  str1[ ]="UART is OK!\r\n";
    uint8_t  str2[ ]="1234567890\r\n";	

  //（1.2）【不变】关总中断
    DISABLE_INTERRUPTS;

  //（1.3）给主函数使用的局部变量赋初值
    mMainLoopCount=0;    //主循环次数变量
    mLightCount=0;   //灯亮暗次数变量
  
  //（1.4）给全局变量赋初值

  //（1.5）用户外设模块初始化
    gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_ON);	//初始化蓝灯
    uart_init(UART_User,115200);                    //初始化串口模块   
  
  //（1.6）使能模块中断
    uart_enable_re_int(UART_User);  //使能UART_USER模块接收中断功能

  //（1.7）【不变】开总中断
    ENABLE_INTERRUPTS;
  
  //（1）======启动部分（结尾）

  //（2）======主循环部分（开头）
    for(;;)   //for(;;)（开头）
    {
      //（2.1）主循环次数变量+1
        mMainLoopCount++;
      //（2.2）未达到主循环次数设定值，继续循环
        if (mMainLoopCount<=35000000)  continue;
      //（2.3）达到主循环次数设定值，执行下列语句
      //（2.3.1）变量处理
        mMainLoopCount=0;    //循环次数变量
        mLightCount++;       //灯亮暗次数变量
      //（2.3.2）蓝灯取反
        gpio_reverse(LIGHT_BLUE);
      //（2.3.3）通过调试串口提示
        printf("金葫芦友情提示：\r\n");
        printf("蓝灯亮暗次数=%d,  关闭本窗体\r\n",mLightCount);
        printf("“工具”→“串口工具”，打开接收User串口数据观察\r\n");
        for(i=0; i<13; i++)
        {
            uart_send1(UART_User,str1[i]);
        }
        uart_send_string(UART_User,str2);       
    
    }  //for(;;)结尾	

    //（2）======主循环部分（结尾）

}   //main函数（结尾）

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




 
//=========================================================================
/*
 知识要素：
 （1）main.c是一个模板，该文件所有代码均不涉及具体的硬件和环境，通过调用构件
      实现对硬件的干预。
 （2）本文件中对宏GLOBLE_VAR进行了定义，所以在包含"includes.h"头文件时，会定
      义全局变量，在其他文件中包含"includes.h"头文件时，
      编译时会自动增加extern
 */
