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

📄 main_entry.c

📁 ucosii在9200上的移植ADS版本.rar
💻 C
字号:
/***********************************************************************/

#include "AT91RM9200.h"
#include "ucos_ii.h"
/***********************************************************************/

#define	N_TASKS			5	        // Number of tasks
#define	TASK_STK_SIZE	1024		// Stack size, in sizeof OS_STK, or int 32bit
OS_STK	TaskStk[N_TASKS][TASK_STK_SIZE];	// Tasks stacks
/***********************************************************************/
extern void Enable_CPU_Inter(void);
extern void OSTickISR(void);
extern void AT91F_DBGU_Printk(char *buffer);
extern unsigned int AT91F_AIC_ConfigureIt(AT91PS_AIC pAic,unsigned int irq_id,     
       unsigned int priority,unsigned int src_type,void (*newHandler) (void) ); 
extern void AT91F_AIC_EnableIt(AT91PS_AIC pAic, unsigned int irq_id ); 

void TC1_Enable(void);
void timer1_c_irq_handler(void);
void AT91F_LED_Open(void);
void AT91F_LED_Close(void);

/**************************************************************************/
void Task1(void * pParam)
{
	TC1_Enable();
	while(1)	
	{
	
        AT91F_DBGU_Printk("\n\r\n\r");
	    AT91F_DBGU_Printk("                         ((                        \n\r");
        AT91F_DBGU_Printk("                          ))                       \n\r");
        AT91F_DBGU_Printk("                       (     )                     \n\r");
        AT91F_DBGU_Printk("                      (  ^  ^ )                    \n\r");
        AT91F_DBGU_Printk("                     (   ╰╯  )                   \n\r");
        OSTimeDly(20);
	}

}


/**************************************************************************/

void Task2(void * pParam)
{   
    while(1)
    {   
      
	    AT91F_DBGU_Printk("\n\r\n\r");
	    AT91F_DBGU_Printk("                     .*.   .*.                    \n\r");
        AT91F_DBGU_Printk("                    *.  *.*  .*                   \n\r");
        AT91F_DBGU_Printk("                    *.       .*                   \n\r"); 
        AT91F_DBGU_Printk("                     *.     .*                    \n\r"); 
        AT91F_DBGU_Printk("                       *. .*                      \n\r"); 
        AT91F_DBGU_Printk("                         *                        \n\r"); 
		
		OSTimeDly(15);
		
	}
}
/**************************************************************************/
void Task3(void * pParam)
{   
    while(1)
    {   
        
	   AT91F_DBGU_Printk("\n\r\n\r");
       AT91F_DBGU_Printk("                        //                        \n\r");
       AT91F_DBGU_Printk("                     oOOoOOo.                     \n\r");
       AT91F_DBGU_Printk("                    OOOOOOOOO                     \n\r");
       AT91F_DBGU_Printk("                    `OOOOOOO'                     \n\r");
       AT91F_DBGU_Printk("                    ` OOOOO'                      \n\r");
		
	   OSTimeDly(10);
	}
}
/**************************************************************************/
void Task4(void * pParam)
{   
    while(1)
    {   
        
	   AT91F_DBGU_Printk("\n\r\n\r");
       AT91F_DBGU_Printk("                     ∧ ∧︵                       \n\r");                 
       AT91F_DBGU_Printk("               ミ^ō^ミ灬)~                   \n\r");
       AT91F_DBGU_Printk("                (灬 灬                        \n\r"); 
		
	   OSTimeDly(7);
	}
}
/**************************************************************************/
void Task5(void * pParam)
{
     BOOLEAN led_state;
     TC1_Enable();
     led_state = FALSE;
     AT91F_LED_Open();
     while(1)
     {
       OSTimeDly(10);
       if(led_state == FALSE)
       { 
         led_state = TRUE;
         AT91F_LED_Close();
       }
       else
       {
       led_state = FALSE;
       AT91F_LED_Open();
       }
       
     }
        
}


/********************************************************************************/

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   */
}

/**************************************************************************/
void extern C_Entry(void)
{
	
	int	task_1 = 0;
	int	task_2 = 1;
	int task_3 = 2;
	int task_4 = 3;
	int task_5 = 4;

	
	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);				
    
	OSTaskCreate(Task1, &task_1, &TaskStk[0][TASK_STK_SIZE-1], 0);
	OSTaskCreate(Task2, &task_2, &TaskStk[1][TASK_STK_SIZE-1], 1);
	OSTaskCreate(Task3, &task_3, &TaskStk[2][TASK_STK_SIZE-1], 2);
	OSTaskCreate(Task4, &task_4, &TaskStk[3][TASK_STK_SIZE-1], 3);
	OSTaskCreate(Task5, &task_5, &TaskStk[4][TASK_STK_SIZE-1], 4);
	
	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=0xb71a;                                           /*Timer tick=10Hz*/
    *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<<AT91C_ID_TC1);                      /*Clear the TC1 interrupt*/
     Enable_CPU_Inter();
     AT91F_DBGU_Printk("This is the  time interrupt\n\r");
     dummy=*AT91C_TC1_SR;                                    /*Read TC1 Status Register to clear it */
     
     OSTimeTick();       
	 
}


void AT91F_LED_Open(void)
{
     *(AT91C_PIOC_PER)=(unsigned int)(1<<14)|(unsigned int)(1<<15);
     *(AT91C_PIOC_OER)=(unsigned int)(1<<14)|(unsigned int)(1<<15);
     *(AT91C_PIOC_OWER)=(unsigned int)(1<<14)|(unsigned int)(1<<15);
     *(AT91C_PIOC_SODR)=(unsigned int)(1<<14)|(unsigned int)(1<<15);
 }

void AT91F_LED_Close(void)
{ 
     *(AT91C_PIOC_PER)=(unsigned int)(1<<14)|(unsigned int)(1<<15);
     *(AT91C_PIOC_OER)=(unsigned int)(1<<14)|(unsigned int)(1<<15);
     *(AT91C_PIOC_OWER)=(unsigned int)(1<<14)|(unsigned int)(1<<15);
     *(AT91C_PIOC_CODR)=(unsigned int)(1<<14)|(unsigned int)(1<<15);
}

⌨️ 快捷键说明

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