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);
}
怎样初始化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);
}
相关文章推荐
- S5PV210 中断编程流程 按键中断
- S5PV210 sys_clock编程流程 系统时钟功能模块操作
- S5PV210 led_key编程流程 GPIO类功能模块操作
- S5PV210 一些模块编程常用寄存器
- S5PV210加文件头
- 6.时钟
- 虚拟机linux配置NFS
- 阅读笔记--java编程思想第四版 --接口嵌套
- Java虚拟机体系结构与类加载器委托机制
- java中的equals方法与"=="运算符解说
- 我理解的--java 单例模式
- eclipse + sakai
- C# 委托 事件 匿名函数 Lambda表达式
- java 标准输入System.in
- x264代码剖析(十五):核心算法之宏块编码中的变换编码
- JAVA学习笔记04
- Python基础——初探“类”
- x264代码剖析(十五):核心算法之宏块编码中的变换编码
- c++的一些规范
- 如何把VC工程.vcproj转化为Qt工程.pro