Chinaunix首页 | 论坛 | 博客
  • 博客访问: 452006
  • 博文数量: 72
  • 博客积分: 3186
  • 博客等级: 中校
  • 技术积分: 1039
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-07 16:53
文章分类

全部博文(72)

文章存档

2012年(1)

2011年(5)

2010年(10)

2009年(56)

我的朋友

分类: 嵌入式

2009-11-18 15:55:28

cpu/arm920t/s3c24x0/serial.c


#ifdef CONFIG_SERIAL1
#define UART_NR S3C24X0_UART0

int serial_init (void)
{
    return serial_init_dev(UART_NR);
}

这里使用uart0



static int serial_init_dev(const int dev_index)
{
    S3C24X0_UART * const uart = S3C24X0_GetBase_UART(dev_index);

    /* FIFO enable, Tx/Rx FIFO clear */
    uart->UFCON = 0x07;
    uart->UMCON = 0x0;

    /* Normal,No parity,1 stop,8 bit */
    uart->ULCON = 0x3;
    /*
     * tx=level,rx=edge,disable timeout int.,enable rx error int.,
     * normal,interrupt or polling
     */

    uart->UCON = 0x245;

    _serial_setbrg(dev_index); //设置波特率


    return (0);
}


这里与vivi中的设置不同,vivi中的串口始终没有开FIFO,而这里开了。
    uart->UFCON = 0x07; -> FIFO enable, Rx FIFO reset, Tx FIFO reset
    uart->UMCON = 0x0;  -> disable modem

    uart->ULCON = 0x3; -> 8bit, one stop bit pre frame, no parity, normal mode  operation

    uart->UCON = 0x245;
[3:2] transmit mode: 01 = interrupt request or polling mode
[1:0] receive mode : 01 = interrupt request or polling mode

[4] send break signal :0 = normal transmit

[5] lookback mode : 0 = normal transmit
[6] Rx Error Status Interrupt Enables : 1 = generate receive error status interrupt
[7] Rx time out enable :0 = disable
[8] Rx interrupt type : 0 = pulse
[9] Tx interrupt type : 1 = level




void _serial_setbrg(const int dev_index)
{
    S3C24X0_UART * const uart = S3C24X0_GetBase_UART(dev_index);
    unsigned int reg = 0;
    int i;

    /* value is calculated so : (int)(PCLK/16./baudrate) -1 */
    reg = get_PCLK() / (16 * gd->baudrate) - 1;

    uart->UBRDIV = reg;
    for (i = 0; i < 100; i++);
}

骤3中获得的波特率baudrate,现在将这个值写入UBRDIV寄存器中。
计算公式见2410数据手册



好了,现在设置好串口了,那么之后的信息可以通过串口向pc机上的minicom打印出来了。
阅读(2651) | 评论(0) | 转发(0) |
0

上一篇:4. init_baudrate

下一篇:6. console_init_f

给主人留下些什么吧!~~