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;
}
}
Hawk Tong:
用示波器看看,TL16C754是否有收发中断产生。如果没有看看初始化部分,如果有看数据是否正确
Felix Wei:
你可以用示波器看看单片机和芯片通讯的线路上的波形,以此作为判断