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

📄 ex9b_main.c

📁 GCC arm startup example2 for LPC series
💻 C
字号:
/* ex9b_main.c
 *
 * Software generated EINT[0:3] example
 */
#include "led.h"

/* ----------------------------------------------------------------
 * LPC2138 registers
 * ----------------------------------------------------------------
 */
#define VICIntSelect    (*((volatile unsigned long *) 0xFFFFF00C))
#define VICIntEnable    (*((volatile unsigned long *) 0xFFFFF010))
#define VICSoftInt      (*((volatile unsigned long *) 0xFFFFF018))
#define VICSoftIntClear (*((volatile unsigned long *) 0xFFFFF01C))
#define VICVectAddr     (*((volatile unsigned long *) 0xFFFFF030))
#define VICDefVectAddr  (*((volatile unsigned long *) 0xFFFFF034))
#define VICVectAddr0    (*((volatile unsigned long *) 0xFFFFF100))
#define VICVectAddr1    (*((volatile unsigned long *) 0xFFFFF104))
#define VICVectAddr2    (*((volatile unsigned long *) 0xFFFFF108))
#define VICVectAddr3    (*((volatile unsigned long *) 0xFFFFF10C))
#define VICVectCntl0    (*((volatile unsigned long *) 0xFFFFF200))
#define VICVectCntl1    (*((volatile unsigned long *) 0xFFFFF204))
#define VICVectCntl2    (*((volatile unsigned long *) 0xFFFFF208))
#define VICVectCntl3    (*((volatile unsigned long *) 0xFFFFF20C))

/* ----------------------------------------------------------------
 * Function declarations and globals
 * ----------------------------------------------------------------
 */
void irq_init();
void eint0_handler(void) __attribute__((interrupt("IRQ")));
void eint1_handler(void) __attribute__((interrupt("IRQ")));
void eint2_handler(void) __attribute__((interrupt("IRQ")));
void eint3_handler(void) __attribute__((interrupt("IRQ")));
void fiq_handler(void)   __attribute__((interrupt("FIQ")));

/* ----------------------------------------------------------------
 * Function definitions
 * ----------------------------------------------------------------
 */

/* Setup the IRQ interrupts */
void irq_init(void)
{
  /* Setup the VIC to have EINT[0:3] generate IRQs */
  VICIntSelect   = 0;                           /* Select IRQ      */
  VICVectAddr0   = (unsigned long)eint0_handler;/* Vector 0        */
  VICVectAddr1   = (unsigned long)eint1_handler;/* Vector 1        */
  VICVectAddr2   = (unsigned long)eint2_handler;/* Vector 2        */
  VICVectAddr3   = (unsigned long)eint3_handler;/* Vector 3        */
  VICVectCntl0   = 0x20 | 14;                   /* EINT0 Interrupt */
  VICVectCntl1   = 0x20 | 15;                   /* EINT1 Interrupt */
  VICVectCntl2   = 0x20 | 16;                   /* EINT2 Interrupt */
  VICVectCntl3   = 0x20 | 17;                   /* EINT3 Interrupt */
  VICIntEnable   = (0xF << 14);                 /* Enable          */
}

void eint0_handler(void)
{
	led_clr(1);
	VICSoftIntClear = (1 << 14);
	VICVectAddr = 0;
}

void eint1_handler(void)
{
	/* Trigger EINT0 */
	led_set(1);
	VICSoftInt = (1 << 14);

	/* Process EINT1 */
	led_clr(2);
	VICSoftIntClear = (1 << 15);
	VICVectAddr = 0;
}

void eint2_handler(void)
{
	/* Trigger EINT1 */
	led_set(2);
	VICSoftInt = (2 << 14);

	/* Process EINT2 */
	led_clr(4);
	VICSoftIntClear = (1 << 16);
	VICVectAddr = 0;
}

void eint3_handler(void)
{
	/* Trigger EINT2 */
	led_set(4);
	VICSoftInt = (4 << 14);

	/* Process EINT3 */
	led_clr(8);
	VICSoftIntClear = (1 << 17);
	VICVectAddr = 0;
}

/* Empty handler (since the startup code references it) */
void fiq_handler(void)
{
	return;
}

/* ----------------------------------------------------------------
 * Application
 * ----------------------------------------------------------------
 */
int main (void)
{
	led_init();
	/* Start low */
	led(0);
	irq_init();
	while(1) {
		/* Trigger EINT3 */
		led_set(8);
		VICSoftInt = (8 << 14);
	}
	return 0;
}

⌨️ 快捷键说明

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