S3C2440 UART中断方式

Main.c

#include "2440addr.h"

#include "mmu.h"
#include "2440lib.h"

static void __irq IRQ_ISR_UART0(void)
{
if(rSUBSRCPND & 0x1)
   {
Uart_Printf("\nHello World!\r\n");
rUTXH0 = rURXH0;
ClearSubPending(BIT_SUB_RXD0);
}
   ClearPending(BIT_UART0);
}

void Uart0INT_init(void)
{
  Uart_Init(0,115200);
  Uart_Select(0);

  rPRIORITY = 0x00000000;     
  rINTMOD = 0x00000000;       

  ClearSubPending(BIT_SUB_RXD0);   
  ClearPending(BIT_UART0);
  pISR_UART0 = (U32)IRQ_ISR_UART0; 
  
  EnableIrq(BIT_UART0);
  EnableSubIrq(BIT_SUB_RXD0);
}

int Main()
{
    MMU_Init();  
    rGPHCON |= 0xa0;
    rGPHUP = 0x0;
    Uart0INT_init();
    while(1);

}

2440lib.c

//***************************[ UART ]******************************
static int whichUart=0;

void Uart_Init(int pclk,int baud)
{
    int i;
    if(pclk == 0)
    pclk    = PCLK;
    rUFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable
    rUFCON1 = 0x0;   //UART channel 1 FIFO control register, FIFO disable
    rUFCON2 = 0x0;   //UART channel 2 FIFO control register, FIFO disable
    rUMCON0 = 0x0;   //UART chaneel 0 MODEM control register, AFC disable
    rUMCON1 = 0x0;   //UART chaneel 1 MODEM control register, AFC disable
  //UART0
    rULCON0 = 0x3;   //Line control register : Normal,No parity,1 stop,8 bits
     //    [10]       [9]     [8]        [7]        [6]      [5]         [4]           [3:2]        [1:0]
     // Clock Sel,  Tx Int,  Rx Int, Rx Time Out, Rx err, Loop-back, Send break,  Transmit Mode, Receive Mode
     //     0          1       0    ,     0          1        0           0     ,       01          01
     //   PCLK       Level    Pulse    Disable    Generate  Normal      Normal        Interrupt or Polling
    rUCON0  = 0x245;   // Control register
    rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );   //Baud rate divisior register 0
//UART1
    rULCON1 = 0x3;
    rUCON1  = 0x245;
    rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 );
//UART2
    rULCON2 = 0x3;
    rUCON2  = 0x245;
    rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 );    


    for(i=0;i<100;i++);
}


void Uart_Select(int ch)
{
    whichUart = ch;
}


void Uart_Printf(char *fmt,...)
{
    va_list ap;
    char string[256];


    va_start(ap,fmt);
    vsprintf(string,fmt,ap);
    Uart_SendString(string);
    va_end(ap);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值