
文章目录
前言
文章参考官方各类书籍,以及网络知识,如有侵权,请联系我立马删帖道歉!!!谢谢各位的关注,大家的关注才是我不断更新的动力!前段时间更新了串口的使用,但是忘了更新串口中断的使用,特此补充!有关串口的具体知识欢迎大家去浏览以前的文章!
一、串口中断是什么?
串口中断从大体上来讲,就是当串口数据寄存器接受到数据(串口正在工作中),这时候就会进入串口中断源,执行串口中断程序中的任务,并不影响串口程序正常工作。
注:龙芯1B嵌入式开发板是没有中断优先级,这一点于stm32的不同。
二、开发步骤
1.龙芯1B串口驱动函数(内置)
源代码:ls1x‐drv/uart/ns16550.c
头文件:ls1x‐drv/include/ns16550.h
#define BSP_USE_UART4 // Console_Port 控制台串口
#define BSP_USE_UART5 // Console_Port 控制台串口
需要使用哪一个串口就打开哪个串口(bsp.h)
以下是内部函数对串口的初始化设置(参数可自行修改):
#ifdef BSP_USE_UART4 static NS16550_t ls1b_UART4 = { .BusClock = 0, .BaudRate = 115200, .CtrlPort = LS1B_UART4_BASE, .DataPort = LS1B_UART4_BASE, .bFlowCtrl = false, .ModemCtrl = 0, .bIntrrupt = true, .IntrNum = LS1B_UART4_IRQ, .IntrCtrl = LS1B_INTC0_BASE, .IntrMask = INTC0_UART4_BIT, .dev_name = "uart4", }; // to do initialize // 总线频率,初始化时填充 // 默认速率 // 串口寄存器基址 // by user needed // 使用中断方式 // 系统中断号 // 中断寄存器 // 中断屏蔽位 // 设备名称
2.串口中断示例代码
代码如下:
/* * uart_utp.c * * created: 2022/8/10 * author: */ #include "ns16550.h" #include "ls1b_gpio.h" char buff[256]; void UART4_test(void)//执行任务 { ls1x_uart_read(devUART4,buff,255,NULL); printk("%x==%x==%x\r\n",buff[0],buff[1],buff[2]); } void uart4_interrupt(int vector, void * param) { UART4_test(); } /* devUART1---rx=gpio_50 devUART2---rx=gpio_54 devUART3---rx=gpio_56 devUART4---rx=gpio_58 devUART5---rx=gpio_60 */ void uart_utp_init(void) { ls1x_uart_init(devUART4,NULL); //初始化串口 ls1x_uart_open(devUART4,NULL); //打开串口 ls1x_disable_gpio_interrupt(58); ls1x_install_gpio_isr(58,INT_TRIG_EDGE_UP,uart4_interrupt,NULL);//中断初始化 ls1x_enable_gpio_interrupt(58); }
3.代码示例图
总结
主函数代码就不贴了,初始化串口之后,满足条件则串口中断直接运行!如下有整个工程的示例程序,需要自取!
有需要联系工作号,vx:bulidupup
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73667.html