[U-Boot-Users] 16C552 parallel port initialization problems in u-boot

Sam Song samsongshu at yahoo.com.cn
Sat Mar 13 07:29:19 CET 2004


Hi,

I am working adding support of parallel port of
ST16C552 in u-boot but have some weird initialization
problems.So I list my related programs and questions
as follows for any further help.

***Problems***
1. How come board_parallel_init became invalid when I 
put it in lib_ppc/board.c board_init_f() for
debugging?

2. Why could I only get 0x00 or 0xff initialization
results for the parallel port-PD0-PD7  when I changed
par_port->pr1 in ns16552.c as different values like
0x55 or 0xAA?It seemed that the PR register only
accpected 0x00 or 0xff as it's first value.But I could
change it's value correctly by u-boot command.

3. What's meaning of "__attribute__ ((packed))" in
NS16552 structure definition?I copyed it from
ns16550.h but don't understand it's function.

***16C552 parallel port register content***
u-boot>md fa010000
fa010000: ff67e0e0 ff67e0e0 ff67e0e0 ff67e0e0    .g
fa010010: ff67e0e0 ff67e0e0 ff67e0e0 ff67e0e0    .g
u-boot>mm.b fa010000
fa010000: ff ? 55
fa010001: 67 ? 55
fa010002: e0 ? e4
fa010003: e4 ? e4
fa010004: 55 ? .
u-boot>md fa010000
fa010000: 5567e4e4 5567e4e4 5567e4e4 5567e4e4    Ug.
fa010010: 5567e4e4 5567e4e4 5567e4e4 5567e4e4    Ug.
u-boot>

When setting  'par_port->pr1 = 0xAA' ,it displayed:
fa010000: ff67e0e0 ff67e0e0 ff67e0e0 ff67e0e0

***Program***
[MYBOARD.h]
/*-------------------------------------
 *  NS16552 PRINTER PORT Configuration
 */

#define CFG_PORT_BASE           0xFA010000
#define CFG_NS16552
#define CONFIG_PARALLEL
#define CFG_NS16552_PORT        CFG_PORT_BASE

#ifdef  CONFIG_PARALLEL
#define CFG_BR6_PRELIM  0xFA010401  /* REGISTER CS6 */
#define CFG_OR6_PRELIM  0xFFFF0040  
#endif

[include/ns16552.h]

#ifdef CONFIG_PARALLEL                  /* Sam  */
struct NS16552 {
        unsigned short pr0;             /* 0 */
        unsigned short sr;              /* 1 */
        unsigned short com;             /* 2 */
} __attribute__ ((packed));
#endif

#define pr1   pr0
#define iosel sr                        /* Sam */
#define con com

void    NS16552_init (NS16552_t par_port);

[driver/ns16552.c]

#include <config.h>
#ifdef CFG_NS16552
#include <ns16552.h>

void NS16552_init (NS16552_t par_port)
{
        par_port->iosel = 0x55;
        par_port->pr1 = 0xFF;
        par_port->con = (CON_LOGIC3 | CON_LOGIC2 |
~CON_INTP | CON_INIT );
        
}
#endif

[driver/parallel.c]

#include <ns16552.h>

static NS16552_t port = (NS16552_t) CFG_NS16552_PORT;

int parallel_init (void)
{
       NS16552_init (port);
       return (0);
}

[lib_ppc/board.c]

#include <config.h>

--In board_init_r()---

#if defined(CONFIG_MYBOARD)
        board_parallel_init();
#endif

Sorry for disturbing your nice weekend by  many
questions!Thanks in advance!

Sam

_________________________________________________________
Do You Yahoo!? 
完全免费的雅虎电邮,马上注册获赠额外60兆网络存储空间
http://cn.rd.yahoo.com/mail_cn/tag/?http://cn.mail.yahoo.com




More information about the U-Boot mailing list