?? main_entry.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 + -