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

📄 app.c

📁 UCOS移植到atmel arm7x256上
💻 C
字号:

//===============================================================================================
//===============================================================================================

#include <app.h>
#include <board.h>

extern void SystemInitial(void);
void AT91F_DBGU_Printk(	char *buffer)
{
    while(*buffer != '\0')
    {
		while (!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
		AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU, *buffer++);
    }
}
void AT91F_DBGU_Ready(void)
{
	while (!(AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY));

}
void Send_reset(void)
{
 void(*pfct)(void) = (void (*)(void) ) 0x00000000;

    // Acknoledge the interrupt
    // Mark the End of Interrupt on the AIC
     AT91C_BASE_AIC->AIC_EOICR=0;
     AT91F_DBGU_Ready();
    // Jump in reset
     pfct();
}
int AT91F_DBGU_Get( char *val)
{
    if ((AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU)) == 0) return (FALSE);
    else
    {
	*val= AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);
        return (TRUE);
    }
}
void AT91F_DBGU_Frame(	char *buffer)
{
	unsigned char len;

	for (len =0; buffer[len] != '\0'; len++){}
	AT91F_US_SendFrame((AT91PS_USART)AT91C_BASE_DBGU, buffer,len,0,0);

}
void Init_DBGU()
{
  // Enable DBGU Clock
  //AT91F_DBGU_CfgPMC();  // DBGU is always clocked
  // Open PIO for DBGU
  AT91F_DBGU_CfgPIO();
  AT91F_US_Configure ((AT91PS_USART) AT91C_BASE_DBGU,
                      AT91C_MASTER_CLOCK,
                      AT91C_US_ASYNC_MODE,  	// mode Register to be programmed
                      AT91C_BAUDRATE_115200,	// baudrate to be programmed
                      0);                   	// timeguard to be programmed

  ((AT91PS_USART)AT91C_BASE_DBGU)->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;

  AT91F_DBGU_Printk("\n\n\r======================================\n\r");
  AT91F_DBGU_Printk("AT91SAM7X u/COS-II ver2.80 port to IAR\n\r");
  AT91F_DBGU_Printk("======================================\n\r");
  //TRACE_INFO("\n\n\r======================================\n\r");
  //TRACE_INFO("AT91SAM7X u/COS-II ver2.80 port to IAR\n\r");
  //TRACE_INFO("======================================\n\r");
}
//------------------------------------------------------------------------------------------------------
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();
    Init_DBGU();
    SystemInitial();
    SPIK=AT91C_BASE_SPI0;
	
}

//-------------------------------------------------------------------------------------------------------
//main function
//
//-------------------------------------------------------------------------------------------------------
int  main(void)
{//* start
    INT8U  err;

    OSInit();                                /* Initialize "uC/OS-II, The Real-Time Kernel"             */
	
	Init_all();
  	
  	//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);


   	err=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);

#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){

        (void)p_arg;
	for(;;){
		AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, LED2);
		OSTimeDlyHMSM(0, 0, 0, SPEED);
		AT91F_PIO_SetOutput( AT91C_BASE_PIOB, LED2 ) ;
		OSTimeDlyHMSM(0, 0, 0, SPEED);
                AT91F_DBGU_Printk("AT91SAM7X u/COS-II ver2.80 port to IAR by US0Task0\n\r");
	}
}

static void US1Task(void *p_arg){

	(void)p_arg;
	for(;;){
		AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, LED1);
		OSTimeDlyHMSM(0, 0, 0, SPEED);
		AT91F_PIO_SetOutput( AT91C_BASE_PIOB, LED1 ) ;
		OSTimeDlyHMSM(0, 0, 0, SPEED);
                AT91F_DBGU_Printk("AT91SAM7X u/COS-II ver2.80 port to IAR by US1Task1\n\r");
	}
}


⌨️ 快捷键说明

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