⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loadkernel.c

📁 msLinux v1.0 可以在arm ads 下仿真运行的linux
💻 C
字号:
/* MShowTec - www.mshowtec.com
** msLinux loadkernel.c ver1.0
** 20051221 lmjx create limiao@mshowtec.com
** 
*/

#define MSLINUX_LOADKERNEL_C

#include "cpu_reg.h"
#include "kernel.h"

void start_kernel(void);

void set_cs_cfg(void)
{	
 
}

void set_timer_cfg(void)
{
	*IRQEnableClear = ~0;      // Clear/disable all interrupts

  	*Timer1Control = 0;        // Disable counters by clearing the control bytes
  	*Timer2Control = 0;

	*Timer1Clear = 0 ;         // Clear counter/timer interrupts by writing to
  	*Timer2Clear = 0 ;         // The clear register - any data will work

  	*Timer1Load = 0x4000;        // Load counter values 
  	*Timer2Load = 0xffff;    

	*Timer1Control = (TimerEnable   |   // Enable the Timer                  
					TimerPeriodic |   // Periodic Timer producing interrupt
					TimerPrescale8 ); // Set Maximum Prescale - 8 bits                
                      
  	*Timer2Control = (TimerDisable);   // Disable the Timer   
}

void set_uart_cfg(void)
{

}


void set_sys_cfg(void)
{

}

void set_int_cfg(void)
{
	*IRQEnableSet = (IRQTimer1 | IRQTimer2 | IRQProgrammed); // Enable interrupts
}



void init_memorry()
{

 unsigned char *psrc,*pdst;
 unsigned long sz,i;
  /* INITIALISED DATA from ESRAM region */
  psrc = (unsigned char*)&Load$$ESRAM$$Base;
  pdst = (unsigned char*)&Image$$ESRAM$$Base;
  sz = (unsigned long)&Image$$ESRAM$$Length;
  for(i=0;i<sz;i++)
  	*pdst++ =*psrc++;
  	
 pdst = (unsigned char*)&Image$$ESRAM$$ZI$$Base;
 sz = (unsigned long)&Image$$ESRAM$$ZI$$Length;
 for(i=0;i<sz;i++)
 	*pdst++ = 0;
 	
  /* INITIALISED DATA from MEMORY region */
  psrc = (unsigned char*)&Load$$MEMORY$$Base;
  pdst = (unsigned char*)&Image$$MEMORY$$Base;
  sz = (unsigned long)&Image$$MEMORY$$Length;
  for(i=0;i<sz;i++)
  	*pdst++ =*psrc++;
  	
 pdst = (unsigned char*)&Image$$MEMORY$$ZI$$Base;
 sz = (unsigned long)&Image$$MEMORY$$ZI$$Length;
 for(i=0;i<sz;i++)
 	*pdst++ = 0;
 
}

void load_kernel()
{  
	set_cs_cfg();
	set_sys_cfg();
	set_timer_cfg();
	set_uart_cfg();
	set_int_cfg();

	init_memorry();
	
	start_kernel();
		
	printk("can not run to here\r\n");
	for(;;);
	
	return;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -