在线时间206 小时
UID3328169
注册时间2016-11-13
NXP金币220
TA的每日心情 | 开心 2020-1-31 22:07 |
---|
签到天数: 29 天 连续签到: 1 天 [LV.4]偶尔看看III
版主
  
- 积分
- 2090
- 最后登录
- 2020-7-1
|
团队名称:1209Lab
学校:济南大学
开发板:LPC824 Lite
一、使用UART的中断步骤:
1.初始化UART0
2.选择中断源(lpc824的UART有12个中断事件,即12个中断源)
3.在中断控制器中使能UART0中断
4.构建中断服务函数UART0_IRQHandler(void),(每个中断对应的服务函数名可在启动文件中找到)
二、主要涉及到的寄存器
1.LPC_USART0->INTENSET:
UART0的中断允许读取和设置寄存器。可以过设置里面的bit来实现对中断事件的选择,bit 0 为RXRDYEN,写1,使能,RXDAT读取寄存器接收到一个字节时产生中断。
2.NVIC->ISER:
这是一个中断使能寄存器组,ISER[0]的bit0到bit31分别对应了不同外设的中断,其中bit3代表UART0的中断,对其置1,表示使能。
3.LPC_USART0->STAT:
UART的状态寄存器。各种状态可以通过读取里面的bit标志位来了解,bit 0为RXRDY标志位,如果一个字节数据就绪,可以读取了,这个标志位就会硬件置1.
- /******************** Copyright(C) 2016, Lab1209 of UJN **********************
- * 文件名 :main.c
- * 描述 :串口接收中断实验
- * 软件平台 :Keil5.14
- * 硬件平台 :LPC824
- * 作者 :lab1209
- * 修改时间 :2016/11/17
- * 补充 :单片机接收PC端串口助手的字符,并把字符返回到PC端
- ******************************************************************************/
- #include "peri_driver.h"
- /**************************************************************
- ** 名称 : UART_init(void)
- ** 描述 : UART初始化
- ** 参数 :
- **
- ** 返回值 : 无
- ***************************************************************/
- void UART_init()
- {
- LPC_SYSCTL->SYSAHBCLKCTRL |= (1<<7);//使能开关矩阵时钟
- LPC_SWM->PINASSIGN[0] &= 0xffffff04 ; // bit0~7写入0x04,设置 P0.4 为UART0的Txd
- LPC_SWM->PINASSIGN[0] &= 0xffff00ff; // bit8~15写入0x00,设置 P0.0 为UART0的Rxd
- LPC_SYSCTL->SYSAHBCLKCTRL &= ~(1<<7);//关闭开关矩阵时钟,降低功耗
- Chip_UART_Init(LPC_USART0); //使能串口时钟
- Chip_Clock_SetUARTClockDiv(1);//设置UART时钟分频器,1即是主系统时钟不分频
- Chip_UART_ConfigData(LPC_USART0, UART_CFG_DATALEN_8 | UART_CFG_PARITY_NONE | UART_CFG_STOPLEN_1);//8数据位,无奇偶校验,1停止位
- Chip_UART_SetBaud(LPC_USART0, 115200); //波特率115200
- Chip_UART_Enable(LPC_USART0); //使能串口
- }
- /**************************************************************
- ** 名称 : UART0_IRQHandler(void)
- ** 描述 : UART0中断服务函数
- ** 参数 :
- **
- ** 返回值 : 无
- ***************************************************************/
- /*寄存器操作*/
- void UART0_IRQHandler(void)
- {
- if(LPC_USART0->STAT & 0x01)
- {
- LPC_USART0->TXDATA = LPC_USART0->RXDATA;
-
- }
- }
- /**************************************************************
- ** 名称 : main(void)
- ** 描述 : mian函数
- ** 参数 :
- **
- ** 返回值 : 无
- ***************************************************************/
- int main(void)
- {
- UART_init();
-
- /*寄存器操作*/
- LPC_USART0->INTENSET = 0x01; //选择接收寄存器中断源
- NVIC->ISER[0U]=0x08; //在中断控制器中使能UART的中断
-
- }
复制代码
库函数操作
UART_isr.zip
(219.64 KB, 下载次数: 39)
|
|