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<