/*******************************************************************************

********************************************************************************/
#include "AD18F06A.h"
#include <stdio.h>
#include "common.h"
#include "usart.h"

/******************************************************************************

*
******************************************************************************/

__CONFIG(1,_FINTOSC_DIV1_1L   & _LVREN_ON_1L       & _LVR24V_1L                                                                                          );
__CONFIG(2,_FLASH_CP7_OFF_2L  & _FLASH_CP6_OFF_2L  & _FLASH_CP5_OFF_2L   & _FLASH_CP4_OFF_2L   & _FLASH_CP3_OFF_2L
         & _FLASH_CP2_OFF_2L  & _FLASH_CP1_OFF_2L  & _FLASH_CP0_OFF_2L   & _CRYLEN_OFF_2L      & _CRYHEN_OFF_2L
  	     & _IDIS_ON_2L        & _CKSUM_OFF_2L      & _CBP_OFF_2L         & _RESETE_OFF_2L      & _RSEL_LOW_2L     & _STV_ON_2L              	         );
__CONFIG(3,_DBG_OFF_3L        & _PSUT_8_3L         & _FCPU_4T_3L         & _WDTEN_OFF_3L       & _TWDT_111_3L                                            );
__CONFIG(4,_OSCM_HIRC_16M_4L  &_ENVDDL_OFF_4L      & _EEDIS_OFF_4L       & _FLDIS_OFF_4L       & _FCMEN_OFF_4L    & _IESO_OFF_4L&  _DBGS_IOSEL_1_4L      );


volatile unsigned short flag_sec;
volatile unsigned char  flag,ERROR;
volatile unsigned char  Temp1,Temp2,Count_Value;
/*
//TIEMR0计数功能，PA3作为信号输入口，通过PB2串口打印 波特率：9600
*/
void main (void)
{
	GPIO_Init();    //IO初始化

	PA3PD = 0;
	TRISA3 = 1;		//T0CKI_PA3输入模式
	TRISC2 = 0;		//PC2输出模式

	usart0_init();		//串口初始化
    timer0_Init();  //初始化timer0,计数模式
	timer1_Init();  //初始化timer1,定时2.5ms
	printf("AD18F06 TIMER0 COUNT TEST!\r\n");
	GIE = 1;		//开总中断
	while(1)
	{
		if(flag == 1)
		{
            Temp2 = TMR0;
            GIE = 0;                            //暂时关闭中断
            flag = 0;
            if(ERROR)
            {
                printf("ERROR_max!!\r\n");               //输入频率超过最大值
            }
            else
            {
                Count_Value = Temp2;
                printf("Count_Value= %d\r\n",Count_Value);//串口打印数据
            }
            TMR0  = 0;                                   //清除，为下次计数做准备
            ERROR = 0;
            GIE = 1;                                    //开启总中断
	  }
	}
}

//高优先级中断服务函数

void interrupt ISR_h (void)
{
//进入中断后系统自动关闭中断
	if((TMR0IE == 1)&&(TMR0IF == 1))     //每0.2s计数值大于255，则进入此中断服务函数
	{
		TMR0IF = 0;                      //清楚中断标志
		TMR0 = 0;                        //清零计数值，为下次计数做准备
		ERROR = 1;                        //标志置1
		PC2 =~ PC2;
	}

	if(TMR1IE == 1 && TMR1IF == 1)        //2.5MS产生1次中断
	{
   	  TMR1IF = 0;                         //清除Timer1中断标志位
	  if(++flag_sec>=80)
	  {
	    flag_sec = 0;
		flag=1;
	  }
	}
}

//低优先级中断服务函数
void interrupt low_priority ISR_l (void)
{
//进入中断后系统自动关闭中断
}

