打印

那位大哥做过TL16C554,能给我一个初始化程序吗?

[复制链接]
3040|6
手机看帖
扫描二维码
随时随地手机跟帖
沙发
daguang72| | 2007-2-12 11:26 | 只看该作者

跟硬件连线有关系

使用特权

评论回复
板凳
hotpower| | 2007-2-12 18:23 | 只看该作者

网上很多,确实和硬件关系很大,主要看命令设置即可~~~

使用特权

评论回复
地板
qixiboy| | 2007-2-13 11:09 | 只看该作者

前段时间在大家的帮助下写了554的

用的也是TL16C554  ,初始化如下,我用了3个TL,也就是12个串口。

#define addr_5541a_base 0x8000    //1st 554的CSA的基址
#define addr_5541b_base 0x8800  //1st 554的CSB的基址
#define addr_5541c_base 0x9000    //1st 554的CSC的基址
#define addr_5541d_base 0x9800    //1st 554的CSD的基址

#define addr_5542a_base 0xa000    //2nd 554的CSA的基址
#define addr_5542b_base 0xa800    //2nd 554的CSB的基址
#define addr_5542c_base 0xb000    //2nd 554的CSC的基址
#define addr_5542d_base 0xb800    //2nd 554的CSD的基址

#define addr_5543a_base 0xc000    //3rd 554的CSA的基址
#define addr_5543b_base 0xc800    //3rd 554的CSB的基址
#define addr_5543c_base 0xd000    //3rd 554的CSC的基址
#define addr_5543d_base 0xd800     //3rd 554的CSD的基址

struct com_r{                      //offset                                       //RHR                    //THR
                uchar DLL_RHR_THR;//00     Divisor LSB latch address(Receive Holding Register,Teceive Holding Register )
                uchar DLM_IER;      //01       Divisor MSB Latch address,Interrupt Enable Register
                uchar FCR_ISR;    //02       FIFO control Register,Interrupt Status Register
                uchar LCR;        //03     Line control register 
                uchar MCR;        //04     Modem Control Register
                uchar LSR;        //05     Line Status Register
                uchar MSR;        //06     Modem Status Register
                uchar SPR;        //07     Scratch pad Register
            };

struct com_r xdata * com[12];

void getaddress(void)
{    
    com[0]  = ( struct com_r *) addr_5541a_base;     //指针转换
    com[1]  = ( struct com_r *) addr_5541b_base;     //指针转换 
    com[2]  = ( struct com_r *) addr_5541c_base;     //指针转换
    com[3]  = ( struct com_r *) addr_5541d_base;     //指针转换
    com[4]  = ( struct com_r *) addr_5542a_base;     //指针转换
    com[5]  = ( struct com_r *) addr_5542b_base;     //指针转换
    com[6]  = ( struct com_r *) addr_5542c_base;     //指针转换
    com[7]  = ( struct com_r *) addr_5542d_base;     //指针转换
    com[8]  = ( struct com_r *) addr_5543a_base;     //指针转换
    com[9]  = ( struct com_r *) addr_5543b_base;     //指针转换
    com[10] = ( struct com_r *) addr_5543c_base;     //指针转换
    com[11] = ( struct com_r *) addr_5543d_base;     //指针转换       
}

void com_init(void)
{

    uchar i = 0;
    uchar j = 0;
    getaddress();

    for(i=0;i<12;i++)
    {    
        com->LCR    = 0x80;           // enable divisor
        com->DLL_RHR_THR = 0x0c;   // 11.0592M  9600
        com->DLM_IER = 0x00;
        
        com->LCR = 0x0b;           // set 8 bit data,1 bit stop,odd parity
        com->FCR_ISR = 0x47;       // FIFO模式10001111 RXRDY/TXRDY mode 1    
        com->DLM_IER = 0x03;       // 使能接收和发送中断03
        com->MCR = 0x08;           // 使能串口中断

我也是第一次写

使用特权

评论回复
5
daguang72| | 2007-2-13 16:49 | 只看该作者

光跟人家要程序用处不大

如果不理解并转串、串转并、接收缓冲、发送缓冲。。。。机制的话还是不能用好

使用特权

评论回复
评论
zxdong0612 2013-2-25 00:27 回复TA
的确,我开始调也是按照别人的代码,也没注意收发缓冲和串并转换,后来出错了···最后还是全面了解这些东西后才调出来 
6
gyt| | 2007-2-14 16:40 | 只看该作者

不难

使用特权

评论回复
7
chen2qiao| | 2009-4-3 16:13 | 只看该作者

谢谢大家的,收益非浅!

谢谢大家的,收益非浅!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝