📄 loadkernel.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 + -