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

📄 app.c

📁 ADS下基于AT91SAM7X256-EK的可以运行的uCOS-II源码
💻 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);
		
       }
}

⌨️ 快捷键说明

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