/******************** (C) COPYRIGHT 2018 SONiX *******************************
* COMPANY:		SONiX
* DATE:				2018/10
* AUTHOR:			SA1
* IC:					SN32F760/750
*____________________________________________________________________________
*	REVISION	Date				User		Description
*	1.0				2013/12/17	SA1			1. First release
*	2.0				2015/05/29	SA1			1. Compatible to CMSIS DFP Architecture in Keil MDK v5.X (http://www.keil.com/dd2/pack/)
*																2. Run HexConvert to generate bin file and show checksum after building.
*	3.0				2018/02/02	SA1			1. Add NotPinOut_GPIO_init to set the status of the GPIO which are NOT pin-out to input pull-up.
*																2. Add SN32F760_CodeOption.s to modify Code option, please modify with Configuration Wizard, 
*																	 and Strongly recommend to keep CS0 for debugging with SN-LINK.
*	3.1				2018/10/05	SA1			1. Remove CodeOption_SN32F760.s, please contact SONiX FAE if needed.
*____________________________________________________________________________
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS TIME TO MARKET.
* SONiX SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL 
* DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF SUCH SOFTWARE
* AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN 
* IN CONNECTION WITH THEIR PRODUCTS.
*****************************************************************************/

/*_____ I N C L U D E S ____________________________________________________*/
#include <SN32F760.h>
#include <SN32F700_Def.h>
#include ".\Interface\ADC\ADC.h"
#include ".\Utility\Utility.h"		


/*_____ D E C L A R A T I O N S ____________________________________________*/
void	PFPA_Init(void);
void	NotPinOut_GPIO_init(void);

uint16_t	hwADC_Value;   


/*_____ D E F I N I T I O N S ______________________________________________*/
#ifndef	SN32F769					//Do NOT Remove or Modify!!!
	#error Please install SONiX.SN32F7_DFP.1.4.3.pack or version >= 1.4.3
#endif
#define	PKG						SN32F769				//User SHALL modify the package on demand (SN32F769, SN32F768, SN32F767, SN32F766, SN32F765, SN32F759, SN32F758, SN32F757, SN32F756, SN32F755) 


/*_____ M A C R O S ________________________________________________________*/


/*_____ F U N C T I O N S __________________________________________________*/

/*****************************************************************************
* Function		: main
* Description	: Demo code of ADC measuring 
* Input			: None
* Output		: None
* Return		: None
* Note			: None
*****************************************************************************/
int	main (void)
{
	//User can configure System Clock with Configuration Wizard in system_SN32F760.c
	SystemInit();
	SystemCoreClockUpdate();

	PFPA_Init();													//User shall set PFPA if used, do NOT remove!!!

	//1. User SHALL define PKG on demand.
	//2. User SHALL set the status of the GPIO which are NOT pin-out to input pull-up.
	NotPinOut_GPIO_init();

	//--------------------------------------------------------------------------
	//User Code starts HERE!!!

	//System Interface Init
	ADC_Init();
	
	hwADC_Value = 0;

	bADC_StartConv = 0;

	while(1)
	{
		bADC_StartConv = 1;

		SN_ADC->ADM_b.ADS = ADC_ADS_START;			//Start to execute ADC converting	

		while(bADC_StartConv == 1);	

		hwADC_Value = ADC_Read();
	}
}


/*****************************************************************************
* Function		: NotPinOut_GPIO_init
* Description	: Set the status of the GPIO which are NOT pin-out to input pull-up. 
* Input				: None
* Output			: None
* Return			: None
* Note				: 1. User SHALL define PKG on demand.
*****************************************************************************/
void	NotPinOut_GPIO_init(void)
{
#if (PKG == SN32F768) || (PKG == SN32F758)
	//set P0.10~P0.13 to input pull-up
	SN_GPIO0->CFG = 0xA00AAAAA;
	//set P2.7~P2.9 to input pull-up
	SN_GPIO2->CFG = 0xAAA02AAA;
#elif (PKG == SN32F767) || (PKG == SN32F757)
	//set P0.6~P0.7, P0.10~P0.15 to input pull-up
	SN_GPIO0->CFG = 0x000A0AAA;
	//set P1.5, P1.8~P1.9, P1.14~P1.15 to input pull-up
	SN_GPIO1->CFG = 0x0AA0A2AA;
	//set P2.8~P2.13 to input pull-up
	SN_GPIO2->CFG = 0xA000AAAA;
	//set P3.4, P3.7~P3.8 to input pull-up
	SN_GPIO3->CFG = 0xAAA828AA;
#elif (PKG == SN32F766) || (PKG == SN32F756)
	//set P0.5~P0.7, P0.10~P0.15 to input pull-up
	SN_GPIO0->CFG = 0x000A02AA;
	//set P1.5, P1.8~P1.9, P1.14~P1.15 to input pull-up
	SN_GPIO1->CFG = 0x0AA0A2AA;
	//set P2.7~P2.13 to input pull-up
	SN_GPIO2->CFG = 0xA0002AAA;
	//set P3.6~P3.8 to input pull-up
	SN_GPIO3->CFG = 0xAAA80AAA;
#elif (PKG == SN32F765) || (PKG == SN32F755)
	//set P0.3~P0.7, P0.10~P0.15 to input pull-up
	SN_GPIO0->CFG = 0x000A002A;
	//set P1.3~P1.9, P1.12~P1.15 to input pull-up
	SN_GPIO1->CFG = 0x00A0002A;
	//set P2.3~P2.6, P2.8~P2.13 to input pull-up
	SN_GPIO2->CFG = 0xA000802A;
	//set P3.0~P3.1, P3.4~P3.5, P3.7~P3.8 to input pull-up
	SN_GPIO3->CFG = 0xAAA820A0;
#endif
}

/*****************************************************************************
* Function		: HardFault_Handler
* Description	: ISR of Hard fault interrupt
* Input			: None
* Output		: None
* Return		: None
* Note			: None
*****************************************************************************/
__irq void HardFault_Handler(void)
{
	NVIC_SystemReset();
}

