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

📄 main.c

📁 DESCRIPTION =========== This example project shows how to use the IAR Embedded Workbench for ARM
💻 C
字号:
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2006
 *
 *    File name   : main.c
 *    Description : Define main module
 *
 *    History :
 *    1. Data        : March, 30 2006
 *       Author      : Stanimir Bonev
 *       Description : Create
 *
 *  This example project shows how to use the IAR Embedded Workbench
 * for ARM to develop code for the Atmel AT91SAM9261 evaluation boards.
 * It shows basic use of parallel I/O, timer and the interrupt controller.
 *
 *  It starts by showing different patterns on the LED's separated by
 * half second.
 *
 * Jumplers:
 *  Set     J12   (VDDCORE)
 *  Set     J8    (VDDOSC VDDPLL)
 *  Set     J13   (FORCE POWER ON)
 *  Remove  J4    (BOOT MODE SELECT)
 *  Set     J21 on 1-2 position
 *
 *    $Revision: 1.1.2.1 $
 **************************************************************************/
#include <inarm.h>
#include <stdio.h>
#include <string.h>

#include "AT91SAM9261_init.h"

#define USR_LED1_ON()         AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, USR_LED1)
#define USR_LED1_OFF()        AT91F_PIO_SetOutput(AT91C_BASE_PIOA, USR_LED1)

#define USR_LED2_ON()         AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, USR_LED2)
#define USR_LED2_OFF()        AT91F_PIO_SetOutput(AT91C_BASE_PIOA, USR_LED2)

typedef void (*VoidFpnt_t)(void);

//* system timer counter
volatile unsigned int StTick;


/*************************************************************************
 * Function Name: AT91F_SysHandler
 * Parameters: none
 *
 * Return: none
 *
 * Description: Periodic Timer Interrup Handler
 *
 *************************************************************************/
__irq __arm void AT91F_SysHandler(void)
{
volatile int StStatus;
	// Read the system timer status register
  if(AT91F_PITGetStatus(AT91C_BASE_PITC))
  {
    AT91F_PITGetPIVR(AT91C_BASE_PITC);
	  StTick++;
  }
  AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
}

/*************************************************************************
 * Function Name: main
 * Parameters: none
 *
 * Return: none
 *
 * Description: Main subroutine
 *
 *************************************************************************/
void main(void)
{
volatile int StStatus;
unsigned int i;

  // Init IO ports
  AT91F_PIOA_CfgPMC();
  AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,USR_LED1 | USR_LED2);
  AT91F_PIO_SetOutput(AT91C_BASE_PIOA,USR_LED1 | USR_LED2);
  	
  // Init AIC controller
  // Reset all source vector and source mode registers
 	for (i = 0; i < 32; ++i)
  {
		AT91F_AIC_DisableIt(AT91C_BASE_AIC, i);
		AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
		                      i,
		                      AT91C_AIC_PRIOR_LOWEST,
		                      AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,
		                      NULL);
	}

  // Clear AIC stack
  for(i = 0; i < 8; i++)
  {
    AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
  }

  AT91C_BASE_AIC->AIC_SPU = (unsigned int) AT91F_SpuriousHandler;
	AT91C_BASE_AIC->AIC_DCR = 1;

  // Init System timer 1ms (PIT)
  AT91F_PITC_CfgPMC();
  AT91F_PITInit(AT91C_BASE_PITC,SYS_TMR_PER,(Fmclk/1000000));
  AT91F_PITEnableInt(AT91C_BASE_PITC);

  // Read the system timer status register
  AT91F_PITGetPIVR(AT91C_BASE_PITC);

  StTick = 0;
	AT91F_AIC_ConfigureIt (	AT91C_BASE_AIC,                         // AIC base address
							            AT91C_ID_SYS,                           // System peripheral ID
							            AT91C_AIC_PRIOR_HIGHEST,                // Max priority
							            AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,  // Level sensitive
							            (VoidFpnt_t)AT91F_SysHandler );						
	AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);

  // Enable interrupts.
  __enable_interrupt();

  while(1)
  {
    // ~ Tick 0.5 sec BLINK User LED1
    if((StTick & 0x100) == 0)
    {
      USR_LED1_OFF();
    }
    else
    {
      USR_LED1_ON();
    }
    // ~ Tick 1 sec BLINK User LED1
    if((StTick & 0x200) == 0)
    {
      USR_LED2_OFF();
    }
    else
    {
      USR_LED2_ON();
    }
  }	
}

⌨️ 快捷键说明

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