www.pudn.com > ucos_lwip_at91rm9200.rar > main_entry.c


/***********************************************************************/ 
 
#include "AT91RM9200.h" 
#include "lib_AT91RM9200.h" 
#include "includes.h" 
#include "HostStack.h"   
/**************************** 常量及宏定义 *****************************/ 
#define	T_START_PRIOR				2 
#define	T_LWIPENTRY_PRIOR			10 
 
#define	T_START_STKSIZE				64 
#define	T_LWIPENTRY_STKSIZE			1024 
 
OS_STK T_START_STK[T_START_STKSIZE]; 
OS_STK T_LWIPENTRY_STK[T_LWIPENTRY_STKSIZE]; 
 
#define	TaskUSBStkLengh	256 
OS_STK	TaskStk_Host[TaskUSBStkLengh];	 
void Task_USB_Host_Serve(void *pdata); 
 
/***********************************************************************/ 
extern void Enable_CPU_Inter(void); 
extern void OSTickISR(void); 
extern void irqEMACISR(void); 
extern void irqUHPISR(void); 
extern void AT91F_DBGU_Printk(char *buffer); 
 
 
void TC1_Enable(void); 
void timer1_c_irq_handler(void); 
 
/********************************************************************************/ 
 
//void  BSP_InitIntCtrl (void) 
//{ 
//    *AT91C_AIC_IDCR = 0xFFFFFFFF;                                 /* Disable ALL interrupts                              */ 
 
//                                                             /* 0xE51FFF20L is opcode of (ldr pc,[pc,#-0xf20])      */ 
//    *(volatile unsigned int *)0x00000018 = 0xE51FFF20;       /* IRQ exception vector - install redirection to AIC   */ 
//} 
 
 
//*------------------------------------------------------------------------------------------------ 
//* 函数名称 : __TaskStart 
//* 功能描述 : 建立任务并打开TC0中断 
//* 入口参数 : [in] 保留参数,这里不用 
//* 出口参数 : 无 
//*------------------------------------------------------------------------------------------------ 
void TaskStart(void *pReserved) 
{	 
	extern void T_LwIPEntry(void * pvArg); 
 
	TC1_Enable(); 
	 
	Sys_Hc_Ini();											// 系统主机初始化,配置地址及控制引脚 
	USB_Host_Stack_Initialize();							// USB主机栈初始化函数 
	OSTaskCreate(Task_USB_Host_Serve,(void *)0,&TaskStk_Host[TaskUSBStkLengh-1],3); // 建立USB主机服务任务,USB主机服务任优先级就高于其它使用USB主机操作任务 
	               
	OSTaskCreate(T_LwIPEntry, NULL, &T_LWIPENTRY_STK[T_LWIPENTRY_STKSIZE-1], T_LWIPENTRY_PRIOR); 
	 
	while(TRUE) 
	{ 
	   AT91F_DBGU_Printk("This is the  start task\n\r"); 
	   OSTimeDly(300); 
	} 
	//OSTaskDel(OS_PRIO_SELF); 
} 
 
/**************************************************************************/ 
void extern C_Entry(void) 
{ 
	 
	 
	AT91F_DBGU_Printk("start kernel ok!\n\r" ); 
	 
	/* enable peripheral clock */ 
 	 *AT91C_PMC_PCER = 1 << AT91C_ID_TC1;   
    *AT91C_AIC_IDCR = 0xffffffff; 
     
    /* 若需编译成二进制文件,请注释掉下面两行 */ 
 //   *AT91C_MC_RCR = 1;                                
   // BSP_InitIntCtrl(); 
     
    OSInit(); 
     
    /* install TC1 interrupt handler */ 
    AT91F_AIC_ConfigureIt ( 
							AT91C_BASE_AIC,                        // AIC base address 
							AT91C_ID_TC1,                          // System peripheral ID 
							0x6,                                   // Priority 
							AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,   // Level sensitive 
							OSTickISR);		 
							 
												 
	/* install EMAC interrupt handler */	 
   AT91F_AIC_ConfigureIt ( 
							AT91C_BASE_AIC,                        // AIC base address 
							AT91C_ID_EMAC,                          // System peripheral ID 
							0x7,                  // Priority 
							AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,   // Level sensitive 
							irqEMACISR); 
												 
	/* install UHP interrupt handler */ 
	AT91F_AIC_ConfigureIt ( 
							AT91C_BASE_AIC,                        // AIC base address 
							AT91C_ID_UHP,                          // System peripheral ID 
							0x7,                  // Priority 
							AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,   // Level sensitive 
							irqUHPISR);							 
     
	 //* 借用LWIP_TASK_STK数组的最后一个内存区作为启动任务的堆栈,这样可以节约内存 
    OSTaskCreate(TaskStart, NULL, &T_START_STK[T_START_STKSIZE-1], T_START_PRIOR); 
    		 
	OSStart(); 
} 
	 
 
/*******************************************************************************/ 
 
void TC1_Enable (void) 
{ 
    unsigned int dummy; 
     
    *AT91C_TC1_CCR = AT91C_TC_CLKDIS;                                 /*Disable the Clock Counter*/  
    *AT91C_TC1_IDR = 0xFFFFFFFF; 
    dummy = *AT91C_TC1_SR; 
    *AT91C_TC1_CMR = AT91C_TC_TIMER_DIV4_CLOCK|AT91C_TC_CPCTRG;       /*SLOW CLOCK*/ 
    *AT91C_TC1_CCR = AT91C_TC_CLKEN;                                  /*Enable the Clock Counter*/ 
    *AT91C_TC1_IER = AT91C_TC_CPCS;                                   /*Validate the RC compare interrupt*/ 
    *AT91C_TC1_RC = 0x124f;		                                  /*Timer tick=100Hz*/ 
    *AT91C_TC1_CCR = AT91C_TC_SWTRG; 
	 
	/* Enable TC1 interrupt  */    
    AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_TC1); 
    
} 
 
/*****************************************************************************/ 
 
void timer1_c_irq_handler(void) 
 
{ 
     unsigned int dummy; 
        
     *AT91C_AIC_ICCR = (1<