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

📄 blinky.c

📁 这是关于atmel处理器的源程序
💻 C
字号:
/*----------------------------------------------------------------------------
 *      A R T X   K e r n e l   E x a m p l e
 *----------------------------------------------------------------------------
 *      Name:    BLINKY.C
 *      Purpose: Advanced RTX example program
 *      Rev.:    V2.00 / 19-oct-2005
 *----------------------------------------------------------------------------
 *      This code is part of the ARTX-ARM kernel package of Keil Software.
 *      Copyright (c) 2004-2005 Keil Software. All rights reserved. 
 *---------------------------------------------------------------------------*/

#include <ARTX.h>
#include <AT91SAM7S64.H>                    /* AT91SAMT7S64 definitions */
#include "..\Board.h"


OS_TID t_phaseA;                        /* assigned task id of task: phase_a */
OS_TID t_phaseB;                        /* assigned task id of task: phase_b */
OS_TID t_phaseC;                        /* assigned task id of task: phase_c */
OS_TID t_phaseD;                        /* assigned task id of task: phase_d */

#define LED_A   0x010000
#define LED_B   0x020000
#define LED_C   0x040000
#define LED_D   0x080000


/*----------------------------------------------------------------------------
 *        Function 'signal_func' called from multiple tasks
 *---------------------------------------------------------------------------*/
void signal_func (OS_TID task)  {
  os_dly_wait (100);                     /* delay 100 clock ticks            */
  os_evt_set (0x0001, task);             /* send event to task 'task'        */
  os_dly_wait (100);                     /* delay 100 clock ticks            */
}

/*----------------------------------------------------------------------------
 *        Task 1 'phaseA': Phase A output
 *---------------------------------------------------------------------------*/
void phaseA (void) __task {
  for (;;) {
    os_evt_wait_and (0x0001, 0xffff);    /* wait for an event flag 0x0001    */
    *AT91C_PIOA_CODR = LED1;
    signal_func (t_phaseB);              /* call common signal function      */
    *AT91C_PIOA_SODR = LED1;
  }
}

/*----------------------------------------------------------------------------
 *        Task 2 'phaseB': Phase B output
 *---------------------------------------------------------------------------*/
void phaseB (void) __task {
  for (;;) {
    os_evt_wait_and (0x0001, 0xffff);    /* wait for an event flag 0x0001    */
    *AT91C_PIOA_CODR = LED2;
    signal_func (t_phaseC);              /* call common signal function      */
    *AT91C_PIOA_SODR = LED2;
  }
}

/*----------------------------------------------------------------------------
 *        Task 3 'phaseC': Phase C output
 *---------------------------------------------------------------------------*/
void phaseC (void) __task {
  for (;;) {
    os_evt_wait_and (0x0001, 0xffff);    /* wait for an event flag 0x0001    */
    *AT91C_PIOA_CODR = LED3;
    signal_func (t_phaseD);              /* call common signal function      */
    *AT91C_PIOA_SODR = LED3;
  }
}

/*----------------------------------------------------------------------------
 *        Task 4 'phaseD': Phase D output
 *---------------------------------------------------------------------------*/
void phaseD (void) __task {
  for (;;) {
    os_evt_wait_and (0x0001, 0xffff);    /* wait for an event flag 0x0001    */
    *AT91C_PIOA_CODR = LED4;
    signal_func (t_phaseA);              /* call common signal function      */
    *AT91C_PIOA_SODR = LED4;
  }
}

/*----------------------------------------------------------------------------
 *        Task 5 'init': Initialize
 *---------------------------------------------------------------------------*/
void init (void) __task {

  *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA);   /* Enable Clock for PIO    */

  *AT91C_PIOA_PER  = LED_MASK;              /* Enable PIO for LED1..4  */
  *AT91C_PIOA_OER  = LED_MASK;              /* LED1..4 are Outputs     */
  *AT91C_PIOA_SODR = LED_MASK;              /* Turn off LED's ("1")    */

  t_phaseA = os_tsk_create (phaseA, 0);  /* start task phaseA                */
  t_phaseB = os_tsk_create (phaseB, 0);  /* start task phaseB                */
  t_phaseC = os_tsk_create (phaseC, 0);  /* start task phaseC                */
  t_phaseD = os_tsk_create (phaseD, 0);  /* start task phaseD                */
  os_evt_set (0x0001, t_phaseA);         /* send signal event to task phaseA */
  os_tsk_delete_self ();
}

/*----------------------------------------------------------------------------
 *        Main: Initialize and start ARTX Kernel
 *---------------------------------------------------------------------------*/
void main (void) {
  os_sys_init (init);                    /* Initialize ARTX and start init   */
}

/*----------------------------------------------------------------------------
 * end of file
 *---------------------------------------------------------------------------*/

⌨️ 快捷键说明

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