S3C2440之UART操作(FIFO中断模式)

来源:互联网 发布:java项目开发技术难点 编辑:程序博客网 时间:2024/06/07 02:27

关于串口的知识

 

3个独立的串口,每一个都可以利用DMA


和中断方式操作。每个包含264字节FIFO,一个接,一个发。

 

FIFO模式相当于FIFO模式的一个寄存器缓冲模式。

 

每一个UART7种状态,overrun错误,校验错误,帧错误,断点,接收缓冲区准备好,发送缓冲区为空,发送移位寄存器为空。

 

当接收移位寄存器中的数据传给FIFO的时候,且接收的数据触发了Rx FIFO的阀值,Rx中断产生了

 

发送器中FIFO的还未发得数据到达TxFIFO阀值的时候,Tx中断产生了。(我觉得应该理解为:发送器中FIFO发送结束,即为空的时候产生中断。)

 

 


 

功能:在串口上输入16字节,包括回车,然后会把输入的字符回显在串口终端上。

 

 

程序代码:

 

//函数声明

void Uart_init(void);

void int_init(void);

void __irq Uart0(void);

void Main(void);


//缓存

static unsigned char mywords[100] ={0,0};

static int data_is_ready = 0; 

//初始化uart

void Uart_init(void)

{

//初始化引脚

rGPHCON =0x00faaa;//把引脚设置为TXD0,和RXD0模式

rGPHUP  = 0x7ff; //不加上拉电阻

//初始化UART

rULCON0 = 0x03;//每次发送8位数据,一个停止位,无校验,普通模式

rUCON0 = (0x05) |(1<<9);//设置接收和发送都是用中断的方式

rUFCON0 = (0x3<<6)| (0x2<<4) |(0x01<<0);//使能FIFO,发送48字节,接收16字节

rUMCON0 = 0;

//设置时钟频率

rUBRDIV0 = 26;

 }

 //初始化中断

void int_init(void)

{

rINTMOD=0x0;//中断模式寄存器

    pISR_UART0= (int)Uart0;//设中断服务函数地址

    rINTSUBMSK= ~(0x3);   //打开UART0发送和接收中断屏蔽

rINTMSK =~(0x1<<28);  //打开UART0中断屏蔽

//rSUBSRCPND=(BIT_SUB_TXD0); 

}



void Main(void)

{

MMU_Init();

int_init();

Uart_init();

while(1);

}


//中断处理函数

void __irq Uart0(void)

{

unsigned char *ps = mywords;

int i;

if(rSUBSRCPND & BIT_SUB_RXD0) //接收中断

{

rINTSUBMSK |= BIT_SUB_RXD0; 

while(((rUFSTAT0&0x1f)>0)) 

          *ps++ = rURXH0;  

      

       data_is_ready = 1;      

       rSUBSRCPND = BIT_SUB_RXD0; 

}

//发送中断

else if(rSUBSRCPND &BIT_SUB_TXD0) 

{

rINTSUBMSK |= BIT_SUB_TXD0;   

        

      while((!(rUFSTAT0&(1<<14)))&& (*ps != '\r')) 

      

         rUTXH0 = *ps++;        

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

       }    

        

  

       data_is_ready = 0; 

  

       rSUBSRCPND = BIT_SUB_TXD0; 

   

    rSRCPND =BIT_UART0;  

    rINTPND =BIT_UART0;  

   if(data_is_ready)  

       rINTSUBMSK &=~(BIT_SUB_TXD0);    

    else 

       rINTSUBMSK &=~(BIT_SUB_RXD0); 

       //rINTSUBMSK&= ~(BIT_SUB_TXD0);

}

 

经测试可以完成功能。

S3C2440之UART操作(FIFO中断模式)

0 0