#include <stdarg.h>
#include "yc11xx.h"
#include "yc11xx_wdt.h"
#include "ycdef.h"
#include "yc11xx_uart.h"
#include "yc11xx_gpio.h"

void LED_Run(void)
{
	static uint32_t times = 0;
	times++;

	if(times>0x5000)
	{
		times = 0;
		GPIO_CONFIG(2) = (GPIO_CONFIG(2)==GPCFG_OUTPUT_HIGH)? GPCFG_OUTPUT_LOW: GPCFG_OUTPUT_HIGH;
	} 
}

void delay(uint32_t t)
{
	while(t-- > 0)
	{
	
	}
}

#define IO_TXA  8
#define IO_RXA  9
#define IO_TXB  6
#define IO_RXB  14
#define UARTBUFSIZE 128

void UartxInit(USART_TypeDef UARTx)
{
	USART_InitTypeDef USART_InitStruct ;
	
	USART_InitStruct.USART_BaudRate = UARTE_BAUDRATE_BAUDRATE_Baud115200;
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;	
	USART_InitStruct.USART_StopBits = USART_StopBits_1;
	USART_InitStruct.USART_Mode =USART_Mode_duplex;
	USART_InitStruct.USART_Parity = USART_Parity_Even ;
	USART_InitStruct.USART_RXLen = UARTBUFSIZE;
	USART_InitStruct.USART_TXLen = UARTBUFSIZE;

	if(UARTA == UARTx){
	GPIO_SetGpioMultFunction(IO_TXA,GPCFG_UART_TXD);
	GPIO_SetGpioMultFunction(IO_RXA,GPCFG_UART_RXD);
	}else if (UARTB == UARTx){
	GPIO_SetGpioMultFunction(IO_TXB,GPCFG_UARTB_TXD);
	GPIO_SetGpioMultFunction(IO_RXB,GPCFG_UARTB_RXD);
	}

	USART_Init(UARTx,&USART_InitStruct);
}


int main(void)
{
	//GPIO_CONFIG(20) =  GPCFG_JTAG_SWCLK;
	//GPIO_CONFIG(21) =  GPCFG_JTAG_SWDAT;
	UartxInit(UARTB);

	int i = 0x40000;
	while(i--);

	USART_SendData(UARTB,0xAA);
	USART_SendData(UARTB,0xA5);

	i=3;
	while(i--)
	{
		GPIO_CONFIG(23) = GPCFG_OUTPUT_HIGH;
		delay(1000000);
		GPIO_CONFIG(23) = GPCFG_OUTPUT_LOW;
		delay(1000000);
	}

	USART_SendData(UARTB,*((volatile byte*)(0x10008043)));
	WDT_Enable();

	//	  uint8_t config = *((volatile byte*)(0x10008043)); 
	//	  config |= (1 << 2);
	//	 *((volatile byte*)(0x10008043)) = config;
	//	 *((volatile byte*)(0x10008004)) = 0x2;

	USART_SendData(UARTB,*((volatile byte*)(0x10008043)));
	while(1)
	{    
		//				 WDT_Kick();
		GPIO_CONFIG(23) = GPCFG_OUTPUT_HIGH;
		delay(100000);
		GPIO_CONFIG(23) = GPCFG_OUTPUT_LOW;
		delay(100000);
		//				WDT_Disable();
	}
}