S5PV210 中断编程流程 UART中断

一.需掌握知识:
怎样初始化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);
}

你可能感兴趣的:(arm裸机开发)