Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1566145
  • 博文数量: 354
  • 博客积分: 8137
  • 博客等级: 中将
  • 技术积分: 5137
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-26 15:40
文章分类

全部博文(354)

文章存档

2010年(300)

2009年(54)

分类: 嵌入式

2010-06-19 08:04:07

#include "config.h"

void DelayNS(uint32 dly)
{
    uint32 i;

    for(; dly > 0; dly--)
        for(i = 0; i < 50000; i ++);
}

#define UART_BPS 115200

void UART0_Init(void)
{
    uint16 Fdiv;

    U0LCR = 0x83; //决定发送和接收的数据字符格式, 0x1000 0011 8位字符长度,1个停止位,禁止奇偶校验

    Fdiv = (Fpclk / 16) / UART_BPS;
    U0DLM = Fdiv /256;
    U0DLL = Fdiv % 256;
    U0LCR = 0x03; //设制好波特率后,再关闭不让设制。

}

uint8 UART0_GetByte(void)
{
    uint8 rcv_dat;

    while((U0LSR & 0x01) == 0);//U0LSR 线状态寄存器,提供UART Rx,Tx模块的状态信息;这里是判断是否接收数据就绪。

    rcv_dat = U0RBR;//接收缓存寄存器


    return(rcv_dat);
}

void UART0_GetStr(uint8 *s,uint32 n)
{
    for(;n > 0;n --)
    {
        *s++ = UART0_GetByte();
    }
}

void UART0_SendByte(uint8 dat)
{
    U0THR = dat; //U0THR 发送保持寄存器

    while((U0LSR & 0x40) == 0); //发送器空,等U0THR为空。也就是等它发送完成。

}

void UART0_SendStr(uint8 const *str)
{
    while(1)
    {
        if(*str == '\0') break;
        UART0_SendByte(*str++);
    }
}


int main()
{
    uint8 snd[32];
    PINSEL0 = 0x00000005;
    UART0_Init();

    while(1)
    {
    UART0_GetStr(snd,18);
    DelayNS(10);
    UART0_SendStr(snd);
    DelayNS(10);
    }
    
    return 0;
}


阅读(1064) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~