📄 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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -