您的位置:首页 > 编程语言

S5PV210 中断编程流程 UART中断

2016-03-23 22:05 162 查看
一.需掌握知识:
怎样初始化UART中断。

二.程序效果:

今天编写interrput_uart程序,预期的实验结果是,通过中断的方式,在串口软件上输入的字符可以在串口软件上看见。

三.编程思路

1.第一步用上一篇博客的interrput初始化程序初始化中断。

2.第二步通过查看串口寄存器,初始化串口设置为中断模式。

3.第三步设置使能UART对应的中断源,设置中断服务程序等。

4.第四步从主函数中调用以上步骤所写的函数。



四.相关寄存器

UINTSP0 :查询UART中断引起的原因,需手动清零。

UINTM0  :中断掩码。

UINTP0 :查询UART中断引起的原因,可由掩码控制,需手动清零。

五.主程序和相关函数

1.//主程序

int xmain()

{
init_led();

*rGPJ2DAT = 0x00;

init_interrput();
set_uart_interrput();
init_uart_interrput();

close_buzzer();
while(1)
{
}
return 0;

}

2.//串口通讯(中断方式)

void init_uart_interrput()

{
*GPA0CON = 0x22;
*UFCON0 = 0x0;
*UMCON0 = 0x0;

*ULCON0 = (3<<0)|(0<<2)|(0<<5)|(0<<6);
*UCON0 = (1<<0)|(1<<2)|(0<<8)|(0<<9)|(0<<10);

*UBRDIV0 = 35;
*UDIVSLOT = 0x888;

}

3.//ISR的相关函数

void ISR_uart()

{
int temp = 0;
if( (*UINTP0 & 0x1) == 0x01)
{
temp = recv_uart();
send_uart(temp);
*UINTP0 = (1<<0);
*UINTSP0 = (1<<0);
}
else if((*UINTP0 & 0x3) == 0x03)
{
led_flash(1000);
*UINTP0 = (1<<2);
*UINTSP0 = (1<<2);
}
else
{
*UINTP0 = 0xf;
*UINTSP0 = 0xf;
}

}

void set_uart_interrput()

{
*UINTP0 = 0xf;
*UINTSP0 = 0xf;
*UINTM0 = 0x4;

set_ISR_itr(42,ISR_uart);
set_type_itr(42,0);
set_enable_itr(42);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  嵌入式裸机开发