📄 main.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 + -