Ejemplo n.º 1
0
void INIT NORETURN kMain(unsigned int mBootCode, multiboot_info_t * mBootInfo)
{
	//Kernel C Entry Point
	// Check boot code
	if(mBootCode != MULTIBOOT_BOOTLOADER_MAGIC)
	{
		Panic("kMain: OS must be loaded by a multiboot bootloader");
	}

	// Wipe screen
	MemSet((void *) 0xC00B8000, 0, 0xFA0);

	// Core Initialization (most other stuff depends on this)
	IntrInit();
	CpuInit();
	MemManagerInit(mBootInfo);
	MemSlabInit();

	// Other Initializations
	CpuInitLate();
	TimerInit();
	ProcInit();
	IoBlockCacheInit();
	IoDevFsInit();

	// Exit boot mode
	MemFreeInitPages();
	ProcIntSelfExit();
}
Ejemplo n.º 2
0
void main()
{
    INT8U i=0;
    INT8U search_temp = 0x06;							 // search_temp 可以增加到6 在search_temp小于3的时候 开始发送广播唤醒
    
    CpuInit();
    POWER_UP_RESET_CC1100();
    halRfWriteRfSettings();
    halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
		CC1101_Setwor();
    G_IT_ON;															// 开启单片机全局中断

    Usart_printf(&g_module_id.Sn[0],1);
    Usart_printf(&g_module_id.Sn[1],1);
    Usart_printf(&g_gateway.Sn[0],1);
    Usart_printf(&g_gateway.Sn[1],1);
    Log_printf("   ");

		
		// 上电设置网关
    // 只有外部中断没有打开,现在进行设置网关字节 地址和网管不能为全0xFFFF
    while( ( 0xFFFF == g_gateway.Sn_temp ) || ( 0xFFFF == g_module_id.Sn_temp ) )
    {
    	LED_D4 = ~LED_D4;
    	delay(50000);
    	if( 0x55 == g_rx_flag )
    	{
  			g_rx_flag = 0x00;

				// 将网关数据写入
				IapProgramByte(GATEWAY_ADDRESS,TxBuf[1]);
				IapProgramByte(GATEWAY_ADDRESS+1,TxBuf[2]);
				//g_gateway.Sn_temp = IapReadByte(GATEWAY_ADDRESS);

				// 将地址数据写入
				IapProgramByte(MODEL_SN_ADDRESS,TxBuf[3]);
				IapProgramByte(MODEL_SN_ADDRESS+1,TxBuf[4]);
				//g_module_id.Sn_temp = IapReadByte(MODEL_SN_ADDRESS);
				Log_printf("GATEWAY OK\n");
				Log_printf("MODEL_SN OK\n");
				LED_D4 = 0;
				// 读取设置数据
    		IapReadModelSn(MODEL_SN_ADDRESS,&g_module_id);
    		IapReadModelSn(GATEWAY_ADDRESS,&g_gateway);
    	}
    }

    // g_module_rpl = IapReadByte(MODEL_RPL);
    // 默认模块id的路由等级1  模块ID 最高位为0 表示路由模块
    g_module_id.Sn[0] |= ( (g_module_rpl<<4) & 0x7F );
    g_pre_src = g_module_id.Sn_temp;
    Usart_printf(&g_module_id.Sn[0],1);
    Usart_printf(&g_module_id.Sn[1],1);
    Usart_printf(&g_gateway.Sn[0],1);
    Usart_printf(&g_gateway.Sn[1],1);
   	Log_printf(" initialization ok ");

    // 地址网关设置完成
    LED_D2 = ~LED_D2;
    // 读出搜索模式 首次上电为0xFF 则进行搜索
    g_search = IapReadByte(SEARCH_MODE);
		if( 0xFF == g_search )
		{
SearchMode:
	  	while( search_temp-- != 0 )
	  	{
	  		SearchData[2] = g_rid;
	  		// 网关地址
	  		SearchData[4] = g_gateway.Sn[0];
	  		SearchData[5] = g_gateway.Sn[1];
				// 源地址(模块ID)
	  		SearchData[9]  = g_module_id.Sn[0];
	  		SearchData[10] = g_module_id.Sn[1];
				// 目的地址(网关地址)
	   		SearchData[11] = g_gateway.Sn[0];
	  		SearchData[12] = g_gateway.Sn[1];   		
	  		
	  		for( i=0;i<13;i++)
	  		{
	  			SearchData[13] += SearchData[i];
	  		}    		
	  		// 进行唤醒时,只需要把路由标识滤除即可 将路由标识高字节分出一位代表是模块还是基站
	  		// 首先发送唤醒波,而后发送数据 进行路由搜索时,使用广播唤醒
	  		if( search_temp < 3 )
	  			CC1101_Wakeupcarry(WorCarry, 2,4);
	  		halRfSendPacket(SearchData, 14);
	  		g_rid++;															// 发送完成后g_rid自增
	  		//g_wor_flag = 0x55;
	  		timer = 0; 
				Timer0_Init(10);
				TIMER0_ON;	
				//g_search = 0x55;
				g_enter_rx = 0x55;
				// 存放校验和
				SearchData[13] = 0x00;
				goto EnterRx;
	  	}	
	  	g_search = 0x00;		
		}
//		else 
//		{
//			g_search = 0x00;
//		}

  	
    while (1)
    {
    	//Log_printf("Enter wor\n");
			if( 0x55 == g_wor_flag )
			{
				CC1101_Worwakeup();
				// 将接收的数据存储到RxBuf数组中
EnterRx:
				while(g_enter_rx)
					halRfRxPacket(RfRecBuf);

				// 此处进行rf数据处理
				if( 0x55 == g_rf_rx_flag )
				{
					g_rf_rx_flag = 0x00;	
					RfRouteManage(&rf_route_data);
				}
				if( 0xFF == g_search )									// 若没有搜索到路径,则跳转回搜索路径
					goto SearchMode;
			}
			
			halSpiStrobe(CCxxx0_SWORRST);					// 复位到 事件1
			halSpiStrobe(CCxxx0_SWOR);						// 启动WOR	
			INT1_ON;															// 开外部中断
			PCON |= PD_ON;												// 从掉电模式唤醒后,程序从这行开市			
			//Log_printf("Exit pd\n");
    }	
}
Ejemplo n.º 3
0
	RamTest() : 
		m_cpuInit(CpuInit()),
		m_uart(m_frequencySys, 0, CUartSpeed)
	{
	}