ARM中断编写及UART发送

来源:互联网 发布:捷易通软件 编辑:程序博客网 时间:2024/05/22 17:40


//使用的是三星的s5pc100开发板

#include "s5pc100.h"



#define WKUP_INT0_7_CON *((int*)0xE0300E00)
#define WKUP_INT0_7_MASK *((int*)0xE0300F00)
#define WKUP_INT0_7_PEND *((int*)0xE0300F40)


#define VICADDRESS  *((int*)0xE4000F00)




void uart_init(void)  
{
GPA0.GPA0CON = 0x2222;


UART0.ULCON0 = 0x3;
UART0.UCON0 = 0x5;


UART0.UBRDIV0 = 35;
UART0.UDIVSLOT0 = 0x5555;


UART0.UINTM0 = 0xf;

}


void putc(char c)
{
while( !(UART0.UTRSTAT0 & 1<<1) );
UART0.UTXH0 = c;
}


void puts(const char *p)
{
while(*p)
{
putc(*p);
if('\n' == *p)
putc('\r');
p++;
}
}


void isr_key(void)
{
puts("key pres !\n");
WKUP_INT0_7_PEND |= 1<<1;
}


void irq_init(void)
{
GPH0.GPH0CON = 0x20;//下载沿触发


WKUP_INT0_7_CON = 0x20;//唤醒该中断位
WKUP_INT0_7_MASK = 0;  //关闭中断屏蔽


VIC0INTERRUPT.VIC0INTENABLE = 0x2;    //VIC0中断控制器使能开启

VIC0VECTADDR.VIC0VECTADDR1 = (int)isr_key;  //装入中断服务程序地址
}


void do_irq(void)
{
//who
((void (*)(void ) )VICADDRESS)();
}


int main()
{
uart_init();


irq_init();
while(1);


}
0 0
原创粉丝点击