コード例 #1
0
ファイル: test.c プロジェクト: Mr-lin/project
void main()
{
	u16 i;
	u8 dir=0,height=0,cmd=0;
	u8 color=0,light=0;
	u8 temp;
	u8 d,h;
	Timer0Init();
	Timer1Init();
	usart_init(9600);
	//SendString("mcu is working!\n");
	
	while(1)
	{	
	/*获取地址*/
	block=P2&0x0f;
	pole=(P3&0xf0)>>4;
	
	/*串口接收处理*/
	if(USART_RX_STA==STA_OK)
	{
		for(i=0;i<USART_REC_LEN;i++)//返回数据
		{
		SendData(USART_RX_BUF[i]);
		}
		
		if(USART_RX_BUF[0]==0)//群发数据
		{
			cmd = USART_RX_BUF[1];
			switch(cmd)
			{
				case 1:Display_ALL();break;//同步
				case 2:OFF_ALL();break;//复位
				case 3:break;//呼吸灯
				case 4:color = USART_RX_BUF[2];
					   light = USART_RX_BUF[3];
					   LED_ALL_ON(color,light);break;//跑马灯
				case 5:check_led();break;//检测
				case 6:WriteData(IAP_ADDRESS,480,EEPROM_TEMP);break;//将缓存区数据存入EEPORM
				case 7:ReadRGB_EEPORM_ByID(IAP_ADDRESS,1);break;
				case 8:for(i=0;i<ONE_SECTOR;i++)
						{
						temp = IAP_ReafByte(IAP_ADDRESS+i);
						SendData(temp);
						}break;//读取EEPROM数据
				case 9:ET0=0;
					   SendData(block);//返回目标地址
					   SendData(pole);break;
				case 10:ET0=1;break;
			}
			SendData(cmd);//返回命令字
		}
		
		else if(USART_RX_BUF[0]>0)//单个目标数据
		{
			if(USART_RX_BUF[0]==block&&USART_RX_BUF[1]==pole)//是否为目标地址
			{
				RGB_DATA.dir    = USART_RX_BUF[2];//获取方向值
				RGB_DATA.height = USART_RX_BUF[3];//获取高度值
				RGB_DATA.rgb[0] = USART_RX_BUF[4];//获取数据值
				RGB_DATA.rgb[1] = USART_RX_BUF[5];
				RGB_DATA.rgb[2] = USART_RX_BUF[6];
				RGB_DATA.id     = USART_RX_BUF[7];//获得帧ID
//				rgb =&USART_RX_BUF[4];//获取数据值
//				
//				SetRGB(dir,height,rgb);//设置数据值
				WriteRGB_EEPROMTemp(EEPROM_TEMP,RGB_DATA);
//				SendData(block);//返回目标地址
//				SendData(pole);
			}
		}				
		USART_RX_STA=STA0;
		USART_REC_LEN=0;
	}
	for(d=1;d<=4;d++)
	for(h=1;h<=4;h++)
	BreathingLight(d,h,1,60);
	}
}
コード例 #2
0
ファイル: BootMode.c プロジェクト: emuikernel/OBM
//////////////////////////////////////////////////////////////////////
// This function mainly loads ALL the images available in the TIM 
// (except TIM, DUALTIM, and OBM) and validates them. 
// It essentially returns the next image that we will transfer the 
// control to. 
//
// Inputs: Current TIM pointer, BootMode(SINGLE or DUAL)
// Outputs: Returns the next image that we will transfer the control to.
//////////////////////////////////////////////////////////////////////
pIMAGE_INFO_3_4_0 LoadAllImages( pTIM pTIM_h)
{
	UINT_T Retval = NoError;
    UINT_T ImageID = 0;									// Initialize it as an invalid image
	UINT_T ImageIndex, ImageSize, decompressLength, start, end, start_read, end_read;
	pIMAGE_INFO_3_4_0 pImageInfo = NULL;
	pIMAGE_INFO_3_4_0 pNextImageToTransferTo = NULL;	// Used for storing the next image we want to transfer control to
														// after loading all the available images.


	flash_test();
	
	#if ZIMI_PB05
	extern PowerUPType_t powerup;
	extern int isInNormalSys;
	isInNormalSys = 1;   //set Normal sys flag
	if(powerup != PowerUP_USB)
	{
		#if ZIMI_LAST_LED_MODE
		if(powerup == PowerUP_ONKEY)
		{
			zimi_blink_led();
		}
		else if(powerup == PowerUP_Reset)
		{
			LED_ALL_ON();
		}
		#else
		LED_WIFI_G_ON();
		LED_BAT_G_ON();
		LED_LTE_G_ON();
		#endif
	}
	else  //xyl USB mode, we light BAT led only according to VBAT
	{
		#if 0
		UINT16_T vbat_mv;


		GetBatInstantVolt(&vbat_mv,USB_NotConnect);
		UINT8_T m_temp = IIC_read(0x07) & 0xff;

		if(3500<vbat_mv && vbat_mv<4050)
		{
			 m_temp |= 0x20;
		 	IIC_write(0x07,m_temp);
		 	Delay_us(300*1000);
			//GetBatInstantVolt(&vbat_mv,USB_NotConnect);
			ReadBatVolt(&vbat_mv);
		 	m_temp &= ~0x20;
		 	IIC_write(0x07,m_temp);
		}
		else
		{
			//GetBatInstantVolt(&vbat_mv,USB_NotConnect);
			ReadBatVolt(&vbat_mv);
		}

		
		serial_outstr("zimi# last vbat\n");
		serial_outnum(vbat_mv);
		serial_outstr("\n");

		*(VUINT_T *)ZIMI_BATVOL_INIT_FLAG_ADDR = vbat_mv;

		if(vbat_mv<3600)
		{
			serial_outstr("zimi# bat led low\n");
			LED_BAT_R_ON();
		}
		else if(vbat_mv<3750)
		{
			serial_outstr("zimi# bat led middle\n");
			LED_BAT_R_ON();
			LED_BAT_G_ON();
		}
		else
		{
			serial_outstr("zimi# bat led high\n");
			LED_BAT_G_ON();
		}
		#endif
	}
	#endif


#if LWG_LTG_SUPPORT
	VUINT_T LWGLTGFlag = PlatformCheckLTGLWGFlag();
	pWTP_RESERVED_AREA_HEADER pWRAH = NULL;
	pLTG_LWG_Select pLL = NULL;
	UINT_T choice = 0;
#endif

#if DECOMPRESS_SUPPORT
	OBM_MPUCache_Init();
	MPUFlag = 1;
#endif

	// Depending on the version of the TIM, determine the size of each image in bytes. 
	// We will use this size to iterate through the TIM binary from image to image. 
	if (pTIM_h->pConsTIM->VersionBind.Version >= TIM_3_4_00)
		ImageSize = sizeof(IMAGE_INFO_3_4_0);
	else
		ImageSize = sizeof(IMAGE_INFO_3_2_0);

	// This is the very initial TIM image! Assumes that the TIM image is located at the top of the 
	// TIM file. Otherwise, we would skip images. 
	pImageInfo = pTIM_h->pImg;

#if LWG_LTG_SUPPORT
	serial_outstr("LWG/LTG switch flag\n");
	serial_outnum(LWGLTGFlag);
	serial_outstr("\n");

	if ((LWGLTGFlag != PLATFORM_5MODE_LTG_VER) &&
		(LWGLTGFlag != PLATFORM_5MODE_LWG_VER) &&
		(LWGLTGFlag != PLATFORM_3MODE_LTG_VER) &&
		(LWGLTGFlag != PLATFORM_3MODE_LWG_VER))
	{
		pWRAH = FindPackageInReserved(&Retval, pTIM_h, LTGLWGSELECTID);
		if ((pWRAH == NULL) || (Retval != NoError))
		{
			PlatformSetLTGLWGFlag(PLATFORM_3MODE_LTG_VER);
			LWGLTGFlag = PLATFORM_3MODE_LTG_VER;
			serial_outstr("LTG/LWG select package not found, default to 3Mode LTG\n");
		}
		else
		{
			pLL = (pLTG_LWG_Select) pWRAH;
			choice	= pLL->Choice;
			switch (choice)
			{
				case 0: // 5Mdoe LTG
					PlatformSetLTGLWGFlag(PLATFORM_5MODE_LTG_VER);
					LWGLTGFlag = PLATFORM_5MODE_LTG_VER;
					serial_outstr("Select to 5Mode LTG\n");
					break;
					
				case 1: // 5Mode LWG
					PlatformSetLTGLWGFlag(PLATFORM_5MODE_LWG_VER);
					LWGLTGFlag = PLATFORM_5MODE_LWG_VER;
					serial_outstr("Select to 5Mode LWG\n");
					break;
					
				case 2: // 3Mode LTG
					PlatformSetLTGLWGFlag(PLATFORM_3MODE_LTG_VER);
					LWGLTGFlag = PLATFORM_3MODE_LTG_VER;
					serial_outstr("Select to 3Mode LTG\n");
					break;
					
				case 3: // 3Mode LWG
					PlatformSetLTGLWGFlag(PLATFORM_3MODE_LWG_VER);
					LWGLTGFlag = PLATFORM_3MODE_LWG_VER;
					serial_outstr("Select to 3Mode LWG\n");
					break;
					
				default:
					PlatformSetLTGLWGFlag(PLATFORM_3MODE_LTG_VER);
					LWGLTGFlag = PLATFORM_3MODE_LTG_VER;
					serial_outstr("Wrong package setting found, default to 3Mode LTG\n");
					break;
			}
		}
	}
#endif

	// Read in the number of images from the TIM and iterate through each of these images. 
	// We load them and we validate them. 
	for( ImageIndex = 0; ImageIndex < pTIM_h->pConsTIM->NumImages; ImageIndex++ )
    {
		// We skip the TIM, DUALTIM, and OBM images. We load/validate all the others. 
    	if( (pImageInfo->ImageID != TIMIDENTIFIER) && 
            (pImageInfo->ImageID != OBMIDENTIFIER) &&  
            (pImageInfo->ImageID != OBM2IDENTIFIER) &&
			(pImageInfo->LoadAddr != 0xFFFFFFFF)
          )	
		{
		#if I2C
			//battery_process_step3();
		#endif

		#if BACKUP_IMAGE
		if (pImageInfo->ImageID == SBOOT_ID)
		{
			serial_outstr("skip to load backup CP\n");
			pImageInfo = (IMAGE_INFO_3_4_0*)((unsigned char*)pImageInfo + ImageSize);
			continue;
		}
		#endif

		#if SBOOT
		if ((sboot_flag == 0x55) && (pImageInfo->ImageID == SBOOT_ID))
		{
			serial_outstr("skip to load sboot\n");
			pImageInfo = (IMAGE_INFO_3_4_0*)((unsigned char*)pImageInfo + ImageSize);
			continue;
		}
		#else
		if (pImageInfo->ImageID == SBOOT_ID)
		{
			serial_outstr("skip to load sboot\n");
			pImageInfo = (IMAGE_INFO_3_4_0*)((unsigned char*)pImageInfo + ImageSize);
			continue;
		}
		#endif

		#if LWG_LTG_SUPPORT
		if ((LWGLTGFlag == PLATFORM_5MODE_LWG_VER) || 
			(LWGLTGFlag == PLATFORM_3MODE_LWG_VER))
		{
			if ( (pImageInfo->ImageID == LTGOSLOADERID) || 
	            (pImageInfo->ImageID == LTGRELIABLEID) ||  
	            (pImageInfo->ImageID == LTGDSPID) ||
				(pImageInfo->ImageID == LTGSKYLARKID) ||
				(pImageInfo->ImageID == LTGRESERVED1ID) ||
				(pImageInfo->ImageID == LTGRESERVED2ID) ||
				(pImageInfo->ImageID == LTGRESERVED3ID)
	          )
			{
				serial_outstr("Skip to load LTG image flash address\n");
				serial_outnum(pImageInfo->FlashEntryAddr);
				serial_outstr("\n");
				pImageInfo = (IMAGE_INFO_3_4_0*)((unsigned char*)pImageInfo + ImageSize);
				continue;
			}
		}
		else if ((LWGLTGFlag == PLATFORM_5MODE_LTG_VER) || 
				(LWGLTGFlag == PLATFORM_3MODE_LTG_VER))
		{
			if ( (pImageInfo->ImageID == OSLOADERID) || 
	            (pImageInfo->ImageID == RELIABLEID) ||  
	            (pImageInfo->ImageID == LWGDSPID) ||
				(pImageInfo->ImageID == LWGSKYLARKID) ||
				(pImageInfo->ImageID == LWGRESERVED1ID) ||
				(pImageInfo->ImageID == LWGRESERVED2ID) ||
				(pImageInfo->ImageID == LWGRESERVED3ID)
	          )
	        {
				serial_outstr("Skip to load LWG image flash address\n");
				serial_outnum(pImageInfo->FlashEntryAddr);
				serial_outstr("\n");
				pImageInfo = (IMAGE_INFO_3_4_0*)((unsigned char*)pImageInfo + ImageSize);
				continue;
			}
		}
		#endif
		
			// Store a pointer to the OSLO image because we will transfer control to it!		    
			// If this image is not found in the TIM, then we return NULL and 
			// we will fail in BootLoaderMain.
		#if LWG_LTG_SUPPORT
			if (((LWGLTGFlag == PLATFORM_5MODE_LTG_VER) || 
				(LWGLTGFlag == PLATFORM_3MODE_LTG_VER)) && 
				(pImageInfo->ImageID == LTGOSLOADERID))
			{
				#if USE_SERIAL_DEBUG
				serial_outstr("LTG uboot\n");
				#endif
			    pNextImageToTransferTo = pImageInfo;
			}

			if (((LWGLTGFlag == PLATFORM_5MODE_LWG_VER) || 
				(LWGLTGFlag == PLATFORM_3MODE_LWG_VER)) && 
				(pImageInfo->ImageID == OSLOADERID))
			{
				#if USE_SERIAL_DEBUG
				serial_outstr("LWG uboot\n");
				#endif
		    	pNextImageToTransferTo = pImageInfo;
			}
		#elif SBOOT
			if ((pImageInfo->ImageID == OSLOADERID) && (sboot_flag == 0x55))
			{
				#if USE_SERIAL_DEBUG
				serial_outstr("uboot\n");
				#endif
			    pNextImageToTransferTo = pImageInfo;
			}

			if ((sboot_flag == 0xaa) && (pImageInfo->ImageID == SBOOT_ID))
			{
				#if USE_SERIAL_DEBUG
				serial_outstr("Sboot\n");
				#endif
			    pNextImageToTransferTo = pImageInfo;
			}
		#else
			if (pImageInfo->ImageID == OSLOADERID)
			{
				#if USE_SERIAL_DEBUG
				serial_outstr("uboot\n");
				#endif
			    pNextImageToTransferTo = pImageInfo;
			}
		#endif

	        // We read images from the flash and load them into the LOAD ADDRESS specified in the TIM for each image. 
	        // For now, we do NOT care if there is a conflict when an image needs to load where we are currently running from.
			// We assume that this will not happen. 
	        #if MMC_CODE
			if((pTIM_h->pConsTIM->VersionBind.Version) >= TIM_3_2_00)
            {
				SetPartition(pImageInfo->PartitionNumber, BOOT_FLASH);
			}
			#endif

		#if DECOMPRESS_SUPPORT
			if ((pImageInfo->ImageID != RELIABLEID) && 
					(pImageInfo->ImageID != LTGRELIABLEID) &&
					(pImageInfo->ImageID != LWGRESERVED1ID) &&
					(pImageInfo->ImageID != LTGRESERVED1ID))
			{
			#if SBOOT
				if (pImageInfo->ImageID != SBOOT_ID)
			#endif
				{
					CacheInvalidateMemory(DECOMPRESS_TEMP_ADDR, DECOMPRESS_LENGTH);
					start_read= GetOSCR0();
					start_read = GetOSCR0();
			        Retval = ReadFlash(pImageInfo->FlashEntryAddr, DECOMPRESS_TEMP_ADDR, pImageInfo->ImageSize, BOOT_FLASH);
					end_read= GetOSCR0();
					serial_outstr("read time\n");
					if (end_read > start_read)
						serial_outnum(OSCR0IntervalInMilli(start_read, end_read));
					else
						serial_outnum(OSCR0IntervalInMilli(end_read, start_read));
					serial_outstr("\n");
					// If ReadFlash function fails, then we fail and return NULL. 
			        if (Retval != NoError)
					{
						zimi_force_minisys(Retval);
						FatalError(Retval);
					}

					decompressLength = DECOMPRESS_LENGTH;

					#if ZIMI_PB05
					#if ZIMI_LED_MODE
					UINT8_T onkey_long_flag =0;
					onkey_long_flag = UsticaBaseRead(USTICA_STATUS);
					onkey_long_flag = UsticaBaseRead(USTICA_STATUS);//xyl:re-read for bug,f**k marvell
					if ((onkey_long_flag & USTICA_ONKEY_STATUS) == USTICA_ONKEY_STATUS)  //when onkey pressed > 3s, we need to tell CP
					{
						serial_outstr("onkey long press detected\n");
						*(VUINT_T *)ZIMI_ONKEY_LONG_PRESS_FLAG_ADDR= 0x4C4F4E47;//LONG
						LED_WIFI_G_ON();
					}
					#endif
					#endif
					
					start = GetOSCR0();
					start = GetOSCR0();
					#if QPRESS
					Retval = quickLZ_decompress(DECOMPRESS_TEMP_ADDR, (UINT8_T *)pImageInfo->LoadAddr);
					#else
					Retval = LZMA_Decompress((UINT_T *)pImageInfo->LoadAddr, &decompressLength, (UINT_T *)DECOMPRESS_TEMP_ADDR, pImageInfo->ImageSize);
					#endif
					end = GetOSCR0();

					if (pImageInfo->ImageID == OSLOADERID)
						nextImageSize = decompressLength;
					
					serial_outstr("Retval\n");
					serial_outnum(Retval);
					serial_outstr("\n");
					serial_outstr("time\n");
					if (end > start)
						serial_outnum(OSCR0IntervalInMilli(start, end));
					else
						serial_outnum(OSCR0IntervalInMilli(end, start));
					serial_outstr("\n");

					//CacheInvalidateMemory(DECOMPRESS_TEMP_ADDR, DECOMPRESS_LENGTH);
					
					if (Retval != NoError)
					{
						zimi_force_minisys(Retval);
						FatalError(Retval);
					}
				}
			#if SBOOT
				else
				{
					Retval = ReadFlash(pImageInfo->FlashEntryAddr, pImageInfo->LoadAddr, pImageInfo->ImageSize, BOOT_FLASH);
					if (Retval != NoError)
					{
						zimi_force_minisys(Retval);
						FatalError(Retval);
					}
				}
			#endif
			}
			else
			{
			#if MRD_CHECK
				PlatformSetMRDAddr(pImageInfo->FlashEntryAddr, pImageInfo->ImageID);
				
				Retval = ReadFlash(pImageInfo->FlashEntryAddr, pImageInfo->LoadAddr, pImageInfo->ImageSize, BOOT_FLASH);
				if (Retval != NoError)
				{
					zimi_force_minisys(Retval);
					FatalError(Retval);
				}

				CheckMRD(pImageInfo);
			
			#else
				Retval = ReadFlash(pImageInfo->FlashEntryAddr, pImageInfo->LoadAddr, pImageInfo->ImageSize, BOOT_FLASH);
				if (Retval != NoError)
				{
					zimi_force_minisys(Retval);
					FatalError(Retval);
				}
			#endif
			}
		#else
			#if MRD_CHECK
				if ((pImageInfo->ImageID != RELIABLEID) && 
					(pImageInfo->ImageID != LTGRELIABLEID) &&
					(pImageInfo->ImageID != LWGRESERVED1ID) &&
					(pImageInfo->ImageID != LTGRESERVED1ID))
				{
					//start = GetOSCR0();
					Retval = ReadFlash(pImageInfo->FlashEntryAddr, pImageInfo->LoadAddr, pImageInfo->ImageSize, BOOT_FLASH);
					//end = GetOSCR0();
					//serial_outstr("read singal image\n");
					//if (end > start)
					//	serial_outnum(OSCR0IntervalInMilli(start, end));
					//else
					//	serial_outnum(OSCR0IntervalInMilli(end, start));
					//serial_outstr("\n");
					if (Retval != NoError)
					{
						zimi_force_minisys(Retval);
						FatalError(Retval);
					}
				}
				else 
				{
					PlatformSetMRDAddr(pImageInfo->FlashEntryAddr, pImageInfo->ImageID);
									
					Retval = ReadFlash(pImageInfo->FlashEntryAddr, pImageInfo->LoadAddr, pImageInfo->ImageSize, BOOT_FLASH);
					if (Retval != NoError)
					{
						zimi_force_minisys(Retval);
						FatalError(Retval);
					}

					CheckMRD(pImageInfo);
				}
			#else
				Retval = ReadFlash(pImageInfo->FlashEntryAddr, pImageInfo->LoadAddr, pImageInfo->ImageSize, BOOT_FLASH);
				if (Retval != NoError)
				{
					zimi_force_minisys(Retval);
					FatalError(Retval);
				}
			#endif

		#endif
			
		}

		// Get a pointer to the next image we will load. 
		// For the last iteration (e.g. after the last image), we won't find an image.
		// However, this is OK because pImageInfo is not used again.   
		pImageInfo = (IMAGE_INFO_3_4_0*)((unsigned char*)pImageInfo + ImageSize);
    }

#if MRD_CHECK
#if SBOOT
	if ((pMRD_valid == NULL) && (sboot_flag != 0xaa))
	{
		zimi_force_minisys(NOVALIDMRD);
		FatalError(NOVALIDMRD);
	}
#else
	if (pMRD_valid == NULL)
	{
		zimi_force_minisys(NOVALIDMRD);
		FatalError(NOVALIDMRD);
	}
#endif

	FinalizeMRD();
#endif

#if DECOMPRESS_SUPPORT
	OBM_Flush();
	OBM_MPUCache_Disable();
#endif

#if SPI_CODE
	Giga_Disable4BytesMode();
#endif

   	return pNextImageToTransferTo;
}
コード例 #3
0
ファイル: balancin.c プロジェクト: linuxesdios/PFC_balancin
int main(void) {

    //***************************************************************************************//
    //*****************ARRANCAMOS LA CONFIGURACION DEL PIC **********************************//
    //***************************************************************************************//
    Init_Hw();
    Delay1msT1(0); //Configuramos el puertos y quitamos analogicos
    Init_Pll();
    Delay1msT1(0); //configuramos el pll que abiasmos arracamos sin él
    Init_PWM();
    Delay1msT1(0); //configuramos el PWM
    init_interr_extern();
    Delay1msT1(0); //configuramos las interrupciones externas
    Init_Bluetooh();
    Delay1msT1(0); //Configuramos el serial-Bluetooth
    cargar_datos_ajuste();
    Init_I2C();
    Delay1msT1(0); //incializamos el I2c
    set_inicial();
    Delay1msT1(0); //Configuramos la incialicacion de sensor
    getAngle_init();
    Delay1msT1(0); //Incializamos el filtro kalman
    set_inicial();
    Delay1msT1(0); //Incializamos el acelerometro
    LED_ALL_ON();
    for (i = 0; i < 2500; i++) Delay_Nop(2000);
    LED_ALL_OFF();



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

    //*****************CALIBRAMOS EL ACELEROMETRO Y GIROSCOPO *******************************//
   // get_calibrado_acelerometro(5, 50); //cojemos los valres por defecto del  giroscopo y aceletometro
    LED_ALL_OFF();
    //***************************************************************************************//

    //*****************INICIALIZAMOS EL PID  Y LAS VARIABLES ********************************//

    //     pid_dsp_configuracion();

    //***************************************************************************************//
LED_ALL_OFF();

    //*****************ARRANCAMOS INTERRUPCION  DEL BUCLE PRINCIPAL *************************//

        SetupT3ForXmsPID(Tsample); //configuramos  la interrupcion principal
        SetupT4For20msPID(); //configuramos  la interrupcion principal
        StartInterrup4(); //incializamos la interrupcion

      StartInterrup3(); //incializamos la interrupcion


    enviar_mensaje("------------------------------------------------------");
    //***************************************************************************************//
    while (1) {

    }

}