www.pudn.com > uCOS_II_uart.rar > app.c


 
//=============================================================================================== 
//=============================================================================================== 
#define ext 
 
#include "data.h" 
#include "board.h" 
 
#include "app.h" 
#define	TIMER_TYPE_PIT			0 
#define	TIMER_TYPE_TC			1 
#define	TIMER_TYPE				TIMER_TYPE_PIT 
//------------------------------------------------------------------------------------------------------ 
void Init_all() 
{ 
    AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;    	// First, enable the clock of the PIO 
 
	SPEED=250; 
	pRxdt=RXDT; 
    AT91C_USAR_BAUD = 115200; 
    BSP_Init(); 
    SPIK=AT91C_BASE_SPI0; 
	 
} 
 
static void __SetupHardware(void) 
{ 
	//* 有可能出现异常情况(预取指或数据终止,未定义指令等),使得系统进入异常处理函数ExceptionHandler(), 
	//* 导致系统复位重新运行,这时定时器中断仍处于打开状态,系统在尚未完成初始化之前有可能会被再次打断,因而在 
	//* 这里必须先禁止中断 
#if	TIMER_TYPE == TIMER_TYPE_TC 
	AT91C_BASE_TC0->TC_IDR = AT91C_TC_CPCS; 
#else 
	AT91C_BASE_PITC->PITC_PIMR = 0x00000000; 
#endif 
	 
	AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF; 
	 
	//* 在系统出现异常或者仿真器连接时,系统有可能还没有正常结束中断,这样会导致系统无法再次中断,为了避免 
	//* 此情况的发生,在这里写EOICR寄存器以结束被异常情况打断的中断 
	//AT91C_BASE_AIC->AIC_EOICR = at91_tc_get_status(&TC0_DESC); 
	 
	//* 使能外围时钟,PIOA、PIOB、EMAC 
	AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA); 
	AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB); 
	AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_EMAC);	 
} 
 
//------------------------------------------------------------------------------------------------------- 
//main function 
// 
//------------------------------------------------------------------------------------------------------- 
int  main(void) 
{//* start 
    INT8U  err; 
    __SetupHardware(); 
    Init_all(); 
    OSInit();                                /* Initialize "uC/OS-II, The Real-Time Kernel"             */ 
	US0_init(); 
	 
  	 
  	//first task 
   	err=OSTaskCreateExt(US0Task,  
                    (void *)0,  
                    (OS_STK *)&US0TaskStk[TASKUS0_STK_SIZE-1],  
                    TASK_US0_PRIO,  
                    TASK_US0_PRIO, 
                    (OS_STK *)&US0TaskStk[0], 
                    TASKUS0_STK_SIZE, 
                    (void *)0, 
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
                     
                           
#if OS_TASK_NAME_SIZE > 11                     
    OSTaskNameSet(TASK_US0_PRIO, "Start Task", &err); 
#endif 
 
#if OS_TASK_NAME_SIZE > 14                     
    OSTaskNameSet(OS_IDLE_PRIO, "uC/OS-II Idle", &err); 
#endif 
 
#if (OS_TASK_NAME_SIZE > 14) && (OS_TASK_STAT_EN > 0)                     
    OSTaskNameSet(OS_STAT_PRIO, "uC/OS-II Stat", &err); 
#endif                       
    OSStart();                              /* Start multitasking (i.e. give control to uC/OS-II)      */ 
 
}//* end 
 
static void US0Task(void *p_arg) 
{ 
 
		 
	int k; 
	k = 1; 
	 
	(void)p_arg; 
	 
	ConsoleSem  = OSSemCreate(1); 
	lwip_input  = OSSemCreate(0); 
	next	    = OSSemCreate(1); 
	lwip_output = OSSemCreate(1); 
	Sem1 = OSSemCreate(0);	 
	 
	pri_info(); 
	 
	//Entrance to the lwip stack. 
	//LWIP_main(p_arg); 
	 
	//SeMbox  = OSMboxCreate((void *)0); 
	//AckMbox = OSMboxCreate((void *)0); 
	 
	OSTaskCreateExt(US1Task,  
                   (void *)0,  
                   (OS_STK *)&US1TaskStk[TASKUS1_STK_SIZE-1],  
                   TASK_US1_PRIO, 
                   TASK_US1_PRIO, 
                   (OS_STK *)&US1TaskStk[0], 
                   TASKUS1_STK_SIZE, 
                   (void *)0, 
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
 
	//This tells us that the system is still alive. 
	 
	for(;;) 
	{ 
		 
	    OSSemPend(Sem1,0,&err);		 
		AT91F_PIO_ClearOutput( AT91D_BASE_PIO_LED, led_mask[0]); 
		OSTimeDlyHMSM(0, 0, 0, SPEED); 
		AT91F_PIO_SetOutput( AT91D_BASE_PIO_LED, led_mask[0] ) ; 
		OSTimeDlyHMSM(0, 0, 0, SPEED); 
		 
		 
	} 
	 
	 
} 
 
/*-----------------------------------------*/ 
void US1Task(void *p_arg){ 
    
for(;;){ 
         
        AT91F_PIO_ClearOutput( AT91D_BASE_PIO_LED, led_mask[1]); 
		OSTimeDlyHMSM(0, 0, 0, SPEED); 
		AT91F_PIO_SetOutput( AT91D_BASE_PIO_LED, led_mask[1] ) ; 
		OSTimeDlyHMSM(0, 0, 0, SPEED); 
		OSSemPost(Sem1); 
		OSTimeDlyHMSM(0, 0, 0, SPEED); 
		//OSMboxPost(SeMbox,(void *)1); 
		//OSMboxPend(AckMbox,0,&err); 
		 
       } 
}