Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1229104
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: 嵌入式

2009-10-14 20:44:24

U-Boot for PXA270




终端串口

PXA270有3个串口,都可以作为终端,如果根据需要修改,可以修改主板主文件,在其中通过default_serial_console()函数设置即可。

struct serial_device *default_serial_console (void)
{
        //return &serial_ffuart_device;
        return &serial_btuart_device; //abing
}

        上述就是将原来的终端从全功能串口FFUART设置为蓝牙串口BTUART。


修正了416MHz下输入大量数据时候串口丢失数据的问题,原来是因为串口接收程序内嵌了喂狗操作,一旦喂狗操作时间加长,就会导致串口丢失数据,去掉了串口读取数据时候的喂狗才做,现象消失。

【cpu/pxa/serial.c】文件中,串口接收数据的实现代码:

    218 int pxa_getc_dev (unsigned int uart_index)

    219 {

    220     switch (uart_index) {

    221         case FFUART_INDEX:

    222             while (!(FFLSR & LSR_DR));

    223 //          WATCHDOG_RESET ();  /* Reset HW Watchdog, if needed */

    224             return (char) FFRBR & 0xff;

    225

    226         case BTUART_INDEX:

    227             while (!(BTLSR & LSR_DR));

    228 //          WATCHDOG_RESET ();  /* Reset HW Watchdog, if needed */

    229             return (char) BTRBR & 0xff;

    230         case STUART_INDEX:

    231             while (!(STLSR & LSR_DR));

    232 //          WATCHDOG_RESET ();  /* Reset HW Watchdog, if needed */

    233             return (char) STRBR & 0xff;

    234     }

    235     return -1;

    236 }

红色代码原本为:

   while (!(STLSR & LSR_DR))

      WATCHDOG_RESET ();  /* Reset HW Watchdog, if needed */

    现在改为忽略喂狗操作。


喂狗操作在【board/trizepsiv/conxs.c】文件中实现:

    242 #ifdef CONFIG_HW_WATCHDOG

    243 void hw_watchdog_reset(void)

    244 {

    245     int temp;

    246         GPSR0 = 1 << 14;

    247

    248         temp  = GPLR0;

    249     if (temp & (1<<9)) {

    250         GPCR0 = 1<<9;

    251         GPSR0 = 1<<10;

    252     } else {

    253         GPSR0 = 1<<9;

    254         GPCR0 = 1<<10;

    255     }

    256 //  for (i=100; i>0; i--);

    257 //      udelay(100);

    258         GPCR0 = 1 << 14;

    259 }

    260 #endif


由于加入了对LED的闪烁控制,导致喂狗时间加长,从而引发了串口出错。所以干脆在串口读取数据的时候去掉了喂狗操作。
还是存在丢失的情况,只是没有以前严重!
阅读(1256) | 评论(0) | 转发(0) |
0

上一篇:Qte 编程

下一篇:U-Boot for EPCM-8960

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