LPC1768怎么设置中断(IRQEnable ();)怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LPC1768怎么设置中断(IRQEnable ();)怎么写相关的知识,希望对你有一定的参考价值。
/*EXTMODE、EXTPOLAR 这两个寄存器一个管理选择电平触发还是边沿触
发,一个选择上升沿和下降沿或者高低电平触发。
在外部中断配置中我们还需要在PINSEL4 中将相应的管脚配置成外
部中断模式。*/
主程序如下: keil MDK
#include "lpc17xx.h"
void EINT0_IRQHandler () //外部中断0 中断函数
LPC_SC->EXTINT|=1; //清零标志位
LPC_GPIO2->FIOPIN=0x000000fe; //LED 显示
void EINT1_IRQHandler ()
LPC_SC->EXTINT|=2;
LPC_GPIO2->FIOPIN=0x000000fd;
void EINT2_IRQHandler ()
LPC_SC->EXTINT|=4;
LPC_GPIO2->FIOPIN=0x000000fb;
void ext_init(void) //外部中断初始化
LPC_PINCON->PINSEL4=0x01500000; //配置管脚,选择外部中断功能
LPC_SC->EXTMODE=0x07; //配置成脉冲触发
LPC_SC->EXTPOLAR=0x00; //配置成下降沿触发
NVIC_EnableIRQ(EINT0_IRQn); //使能外部中断0
NVIC_EnableIRQ(EINT1_IRQn);
NVIC_EnableIRQ(EINT2_IRQn);
LPC_SC->EXTINT=7; //所有使用的外部中断标准位清零
int main(void)
SystemInit(); //系统初始化
ext_init(); //中断初始化
LPC_GPIO2->FIODIR=0x000000ff; //端口方向配置
LPC_GPIO2->FIOPIN=0x000000ff; //端口电平配置
while(1);
参考技术A lpc是什么呀呀追问NXP的LPC1768 ARM Cortex M3单片机
ARM7LPC2138做串口中断实验的时候,发送中断一直进不去。接收中断一切正常,代码改了n遍了,求解释啊
代码如下,看哪里错了,或者有没有调试成功的发送中断程序啊,麻烦发下,谢谢了
void delay(uint z)
uint i,j;
for(i=1000;i>0;i--)
for(j=z;j>0;j--);
__irq void uart0()
uint dat;
dat=U0IIR; //读取U0IIR,清除中断
VICVectAddr=0; //中断结束
void uart0_init()
PINSEL0=0x05;
U0LCR=0x83; //设置波特率。DALB置一
U0DLL=0x5a; //设置波特率9600,Fosc/4*5=Fpclk,初值=Fpclk/16/bauad
U0DLM=0x00;
U0LCR=0x03; //设置八位数据,无奇偶校验
U0IER=0x02; //使能THRE中断
U0FCR=0x05;
int main(void)
//uint i;
uart0_init();
U0THR=0X0F;
VICIntSelect=0; //选择IRQ中断
VICIntEnable=(1<<6); //使能UART0中断
VICVectAddr0=(uint)uart0; //设置中断地址
VICVectCntl0=0x26; //最高优先级
while(1)
U0THR=0x0a;
delay(8);
//U0FCR=0X05;
这句没使能接收中断吧,接收中断正常吗?
首先要知道,串口0只有一个中断入口,中断发生后,需要对中断标识寄存器进行判断以确定中断类型再进行相应处理。
如:
__irq void uart0()
if((U0IIR&0x0F)==0x02)
发送数据; //发送中断
if((U0IIR&0x0F)==0x04)
接收数据; //接收中断
.
.
.
VICVectAddr=0; //中断结束
另外,实时性要求不是特别高的情况下,一般发送用查询方式即可。
/*
*********************************************************************************************************
** 函数名称 :IRQ_UART0()
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_UART0 (void)
uint8 i;
if ((U0IIR & 0x0F) == 0x04)
rcv_new = 1; // 设置接收到新的数据标志
for (i=0; i<8; i++)
rcv_buf[i] = U0RBR; // 读取FIFO的数据,并清除中断
VICVectAddr = 0x00; // 中断处理结束
/*
*********************************************************************************************************
** 函数名称 :UART0_SendByte()
** 函数功能 :向串口0发送1字节数据
** 入口参数 :dat 要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendByte (uint8 dat)
U0THR = dat; // 要发送的数据
/*
*********************************************************************************************************
** 函数名称 :UART0_SendBuf()
** 函数功能 :向串口发送8字节数据
** 入口参数 :dat 要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendBuf (void)
uint8 i;
for (i=0; i<8; i++)
UART0_SendByte(rcv_buf[i]);
while ((U0LSR & 0x20) == 0); // 等待数据发送完毕
追问
接收中断正常呢,呵呵,现在不玩arm7了,在学arm9的应用层了、、
参考技术B 接收中断可以进去就可以了,发送数据没有必要非要进中断处理!!
以上是关于LPC1768怎么设置中断(IRQEnable ();)怎么写的主要内容,如果未能解决你的问题,请参考以下文章
用LPC1768+DP83848实现网口通信,DP83848的PHY ADDRESS和ID是怎么确定的?
为 mbed LPC1768 arm-none-eabi-g++ 构建 protobuf-c、libprotobuf-c