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

📄 main.c

📁 学习ARM中断最好的例程
💻 C
字号:
#include "s3c4510b.h"
#include "console.h"

#define MAXHNDLRS 21

void IRQHandler(void);
void ISR_Timer0(void);
void (*InterruptHandlers[MAXHNDLRS])(void);

static void DummyIsr(void){}

void InitIntHandlerTable(void)
{
	int i;
	for (i=0;i<MAXHNDLRS;i++)
    	InterruptHandlers[i]=DummyIsr;
}

void SysSetInterrupt(int vector,void (*handler)())
{
	INTMSK&=(~(1<<vector));
	InterruptHandlers[vector]=handler;
}

void IRQ_Init(void)
{	
	INTPND=0x1fffff;
	INTMOD=0x0; 
	INTMSK&=(~(1<<INT_GLOBAL));
	InitIntHandlerTable();	
	SysSetInterrupt(INT_TIMER0, ISR_Timer0);
}

void ISR_Timer0(void)
{
	puts("In Timer0 ISR\n");
	IOPDATA=~IOPDATA;
}

void IRQHandler(void)
{
	int num=0;
	num=(INTOFFSET>>2);
	INTPND=(1<<num);
	puts("In IrqHandler\n");
	(*InterruptHandlers[num])();
}

void timer_init(void)
{
	TDATA0=0x2FAF080;	//50000000,fout=fMCLK/(2*TDATA0)
	TMOD|=0x07; //触发模式,使能定时器0
}

void port_init(void)
{
	IOPMOD=0x0003FFFF;	//P0和P1设置为输出
	IOPCON=0xC0000000;
	IOPDATA=0x0003FFFF;
}

int Main(void)
{
	port_init();
	timer_init();
	IRQ_Init();
	console_init();
	puts("Starting...\n");
	for(;;)
	{
		int i;
		for(i=0;i<10;i++);
	}
	return 0;
}

⌨️ 快捷键说明

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