新闻中心

EEPW首页>嵌入式系统>设计应用> 三 ARM9(S3C2440)的串口UART——程序实例讲解

三 ARM9(S3C2440)的串口UART——程序实例讲解

作者: 时间:2016-11-27 来源:网络 收藏

下面是利用中断的串口通信程序


#include"2440addr.h"
void __irq UART0RX_isr()
{
char buf,i;
rINTMSK=0xffffffff;
ClearPending(BIT_UART0);

if(rUTRSTAT0 & 0X01)//接收是否完毕 =1结束
{
ClearSubPending(BIT_SUB_RXD0);
buf=rURXH0;//读取数据
while(!(rUTRSTAT0 & 0X04));//是否允许发送 =1允许

rUTXH0=buf;
if(buf==1)
i=1;
else if(buf==2)
i=2;
else if(buf==3)
i=3;
else if(buf==4)
i=4;
switch(i){

case 1:
rGPBDAT^=(1<<5);
i=0;//将i清零防止下次收到其他数据时干扰
break;
case 2:
rGPBDAT^=(1<<6);
i=0;
break;
case 3:
rGPBDAT^=(1<<8);
i=0;
break;
case 4:
rGPBDAT^=(1<<10);
i=0;
break;
default:break;
}

}
EnableIrq(BIT_UART0);
EnableSubIrq(BIT_SUB_RXD0);
EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
}
static void __irq Key_ISR()
{
char key;//用来标识是哪一个按键按下

//EnterCritical(&r);
rINTMSK=0xffffffff;
if(rINTPND==BIT_EINT0) {
ClearPending(BIT_EINT0);
key=1;
}
else if(rINTPND==BIT_EINT2) {
ClearPending(BIT_EINT2);
key=2;
}
else if(rINTPND==BIT_EINT3) {
ClearPending(BIT_EINT3);
key=3;
}
else if(rINTPND==BIT_EINT4_7){
rEINTPEND=(1<<4);
ClearPending(BIT_EINT4_7);
key=4;
}
switch(key){
case 1:
rGPBDAT^=(1<<5);
break;
case 2:
rGPBDAT^=(1<<6);
break;
case 3:
rGPBDAT^=(1<<8);
break;
case 4:
rGPBDAT^=(1<<10);
break;
}

//ExitCritical(&r);
EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
EnableIrq(BIT_UART0);
EnableSubIrq(BIT_SUB_RXD0);



}
int TSmain()
{


rULCON0 &=0XFFFFFF00;
rULCON0 |=0X03;//1位起始位,8位数据位
rUCON0=0x05;//0X0805;//串口时钟PCLK,查询方式 东:PCLK为50M
rUBRDIV0 =325;//0X1A;//波特率115200****325时设置为9600
rGPHUP=0x1ff;//H口上拉禁止
rGPHCON&=0x3c0000;
rGPHCON|=0x2faaa;
rGPBCON = 0x1dd7fc;//GPB5,6,8,10设置为输出
rGPBDAT|=0x560;//4个LED全灭
rGPFCON &=~((3<<0)|(3<<4)|(3<<6)|(3<<8)) ;
rGPFCON |= ((2<<0)|(2<<4)|(2<<6)|(2<<8)) ;//GPF0,GPF2,GPF3,GPF4工作在第二功能状态,即中断
rEINTPEND=(1<<4);
ClearPending(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
ClearSubPending(BIT_SUB_RXD0);
ClearPending(BIT_UART0);
pISR_EINT0= pISR_EINT2 =pISR_EINT3 = pISR_EINT4_7=(int)Key_ISR;
EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
EnableIrq(BIT_UART0);
EnableSubIrq(BIT_SUB_RXD0);
rEINTMASK=~(1<<4);
pISR_UART0=(unsigned) UART0RX_isr;

while(1)
{

}

return 0;
}


上一页 1 2 下一页

关键词:ARM9S3C2440串口UAR

评论


技术专区

关闭