微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > tl16c754问题

tl16c754问题

时间:10-02 整理:3721RD 点击:

tl16c754无法接收和发送,单片机为msp430,通过cpld进行通讯,程序如下//=============================================================================

//函 数 名: Init754();//初始化754

//功    能:初始化754

//入口参数:NO

//出口参数:NO

//返 回 值:NO

//=============================================================================

void Init754()

{

 /*

 unsigned char SFRPAGE_SAVE=SFRPAGE;

 SFRPAGE=CONFIG_PAGE;

 P3MDOUT|=0X02;

 P3|=0X02;

 delayX10ms(48);

 P3&=0XFD;

 */

 unsigned char ACC;

 SetBaudRate(Chanl_B_BAUDRATE);

 WR754DAT(FCR_ADDR,0x87);                

 WR754DAT(IER_ADDR,0x03);                 //使能发送和接收中断

 WR754DAT(IIR_ADDR,0x01);

 WR754DAT(MCR_ADDR,0X08);

 flag = RD754DAT(BUF_ADDR);

   flag=1;

   while(flag)

   {

       ACC = RD754DAT(LSR_ADDR);//检查接收状态

       if(ACC & 0x01)

           {

               ACC = RD754DAT(BUF_ADDR);//读空

               flag=1;

           }

        else flag=0;

   }

}

//=============================================================================

//函 数 名: SetBaudRate(unsigned long BaudRate);//754波特率设置

//功    能:754波特率设置

//入口参数:unsigned long BaudRate

//出口参数:NO

//返 回 值:NO

//=============================================================================

void SetBaudRate(unsigned long BaudRate)

{

 unsigned int DivNum;

 unsigned char DivHi,DivLo;

 DivNum=TLC16C754_CLK/16/BaudRate;  //计算波特率值

 DivLo=(unsigned char)(DivNum);

 DivHi=(unsigned char)(DivNum>>8);

 WR754DAT(LCR_ADDR,0x83);          //进入波特率设置模式,设置通讯格式

 WR754DAT(DLL_ADDR,DivLo);         //设置低位波特率

 WR754DAT(DLH_ADDR,DivHi);         //设置高位波特率

 _NOP();

 WR754DAT(LCR_ADDR,0x03);          //退出波特率设置模式

}

void WR754DAT(unsigned char CmdAddr,unsigned char Dat)

{  

 P4OUT  =  CmdAddr;//P4OUT&0XF8 +

 _NOP();

 P2OUT = 0x0E;                                       //选择CSA

 _NOP();

 P4OUT |= BIT3;

 P4OUT &= ~BIT4;                                     //iow拉低,IOR置高,对754进行写操作

 P1DIR |= 0xFF;                                      //设置P1为输出

 //delayX10ms(1);

 P1OUT  = Dat;

 //  P2OUT |= BIT5;

 //delayX10ms(1);

 _NOP();_NOP();

 P4OUT |= BIT4;                                      //关闭写操作

 _NOP();

 P2OUT = 0x0f;                                       //关闭所有通道

}  

unsigned char RD754DAT(unsigned char CmdAddr)

{  

 P4OUT  = CmdAddr;//P4OUT&0XF8 +

 _NOP();

 P2OUT = 0x0E;                                       //选择CSA

 _NOP();

 P4OUT |= BIT4;

 P4OUT &= ~BIT3;                                     //iow拉低,IOW置高,对754进读操作

 P1DIR = 0x00;                                       //设置P1为输入

 //delayX10ms(1);

 Dat = P1IN;

 //delayX10ms(1);

 _NOP();_NOP();

 //P4OUT |= BIT3;                                      //关闭读操作

 _NOP();

 P2OUT = 0x0f;                                       //关闭所有通道

 P2OUT |= BIT4;

 //return Dat;

 return P1IN;

}

void a_send(unsigned char ch)

{

       //unsigned char ACC;//i,

       //i = RD754DAT(IIR_ADDR);

       ACC = RD754DAT(LSR_ADDR);

       if((ACC&0X20)&&(ACC&0X40))//检测lsr0的第五位是否为1,thr中是否为空

       {

           WR754DAT(BUF_ADDR,ch);

           //XBYTE[0x8000]=ch;

           flag=1;

       }

       else

       {

           flag=0;

       }

}

用示波器看看,TL16C754是否有收发中断产生。如果没有看看初始化部分,如果有看数据是否正确

你可以用示波器看看单片机和芯片通讯的线路上的波形,以此作为判断

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top