#include "project_config.h"

void mpu_task(void *argv);
void mpu_ctr_init(void)
{
	stc_gpio_init_t  pstcGpioInit;
	GPIO_StructInit(&pstcGpioInit);

	pstcGpioInit.u16PinDir = PIN_DIR_OUT;
	pstcGpioInit.u16PinState = PIN_STAT_RST;
	GPIO_Init(GPIO_PORT_H, GPIO_PIN_02,&pstcGpioInit); 
	GPIO_Init(GPIO_PORT_C, GPIO_PIN_14|GPIO_PIN_15,&pstcGpioInit);  
}
#define MPU_PWR_ON  GPIO_SetPins(GPIO_PORT_H, GPIO_PIN_02)
#define MPU_PWR_OFF GPIO_ResetPins(GPIO_PORT_H, GPIO_PIN_02) 

#define MPU_KEY_ON  GPIO_SetPins(GPIO_PORT_C, GPIO_PIN_14)
#define MPU_KEY_OFF GPIO_ResetPins(GPIO_PORT_C, GPIO_PIN_14) 

#define MPU_RST_ON  GPIO_SetPins(GPIO_PORT_C, GPIO_PIN_15)
#define MPU_RST_OFF GPIO_ResetPins(GPIO_PORT_C, GPIO_PIN_15) 

//static void test(void)
//{
//	stc_gpio_init_t  pstcGpioInit1;
//	
//	GPIO_SetDebugPort(GPIO_PIN_TDI, DISABLE);
//		
//	GPIO_StructInit(&pstcGpioInit1);

//	pstcGpioInit1.u16PinDir = PIN_DIR_OUT;
//	pstcGpioInit1.u16PinState = PIN_STAT_RST;
//	GPIO_Init(GPIO_PORT_A, GPIO_PIN_15,&pstcGpioInit1); 
//	GPIO_Init(GPIO_PORT_D, GPIO_PIN_00|GPIO_PIN_01|GPIO_PIN_02,&pstcGpioInit1);  
//}

void flash_tset_func(void)
{
	uint8_t data1[50];
	uint8_t data2[50];
	
	for(int i =0;i<sizeof(data1);i++){
		data1[i] = i;		
		printf("%x ",data1[i]);
	}
	printf("write ok\n");
	
	spi_flash_write(0x00,data1,sizeof(data1));
	
	spi_flash_read(0x00,data2,sizeof(data2));
	
	for(int i =0;i<sizeof(data1);i++)
		printf("%x ",data2[i]);
	
	printf("read ok\n");
	
}


 
int main(void)
{ 	
	LL_PERIPH_WE(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_EFM | LL_PERIPH_SRAM);

	sys_clk_init();
	
/*	bsp_spi_init(); 
	
	bsp_w25qxx_init();
	
	bsp_uart2_init();
 
  bsp_can1_init();	*/
//	
//	time_pwm_out();
//		
//	adc_init();
// 
//	gpio_interrupt_init();
//	
//  sleep_config();
	
	//mup_spi_init();
	spi_mpu_init_hc();
	mpu_ctr_init();
	/************************************/
	nca9555_init();
	
	/*rtc_init();
	
	sc7a20_init();*/
	
	sy6970_init(); 

///***********************************/
// 	gpio_output_init();

	LL_PERIPH_WP(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_EFM | LL_PERIPH_SRAM);
 
 
	
	
	xTaskCreate(nca9555_task,"nca9555_task",	 512, (void *)0, 2, NULL);
#if 0
	xTaskCreate(pca8565_task,"pca8565_task",	 512, (void *)0, 2, NULL); 
	xTaskCreate(sc7a20_task,"sc7a20_task", 		 512, (void *)0, 3, NULL); 
#endif
	//xTaskCreate(power_manage,"power_manage",	 256, (void *)0, 2, NULL);

	xTaskCreate(sy6970_task,"sy6970_task", 		 512, (void *)0, 3, NULL); 
  xTaskCreate(ec600g_task,"ec600g_task", 		 512, (void *)0, 2, NULL); 
	xTaskCreate(mpu_task,"mpu_task", 				   512, (void *)0, 3, NULL); 	
	
	
//  xTaskCreate(mcu_to_mpu_task,"mcu_to_mpu_task", 512, (void *)0, 4, NULL); 
//	xTaskCreate(test_task2,"test_task2", 256, (void *)0, 2, NULL); 
//	xTaskCreate(fft_task,"fft_task", 1024, (void *)0, 2, NULL); 
//	xTaskCreate(firmware_upgrade_task,"firmware_upgrade_task", 256, (void *)0, 2, NULL); 

	vTaskStartScheduler(); 
	while(1) 
	{
		NVIC_SystemReset();
	}
}



void mpu_task(void *argv)
{
	MPU_PWR_ON;
	MPU_KEY_ON;
	vTaskDelay(1000);
	MPU_KEY_OFF;
	
	while(1) 
	{ 	
		 vTaskDelay(500);
	}
}


 
