TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f5438模拟串口接收功能不工作

程序从F249上移植过来的,发送正常,但是接收不正常。RX脚有波形,但是进不了TimerA中断

#include "SimuUartRS485.h"

#define Bitime 27#define Bitime_5 12 /*1200bps*/

#define TXD BIT0#define RXD BIT1

#define RS485RD(level) P10OUT = ((unsigned int)level) ? (P10OUT|BIT0) : (P10OUT&~BIT0)

/***********************************
//
// ClrA8RxBuf
//
***********************************/
void ClrA8RxBuf(void)
{
memset(RxA8Buf ,0,RXA8LEN);
RxA8BufCount = 0;
}
/***********************************
//
// ClrA8TxBuf
//
***********************************/
void ClrA8TxBuf(void)
{
memset(TxA8Buf ,0,RXA8LEN);
}
/***********************************
//
// TXD_Byte
//
***********************************/
void TXD_Byte(void)
{
unsigned int j;

_EINT();
Uart8BitCnt = 0x0A; TA0CCR0 = TA0R; TA0CCR0 += Bitime; RXTXData |= 0x0100; RXTXData = RXTXData << 1; TA0CCTL0 = OUTMOD0+CCIE; j=0; while ( TA0CCTL0 & CCIE )
{
if(j++>20000) break;
}
}
/***********************************
//
// InitRXD
//
***********************************/
void InitRXD(void)
{
Uart8BitCnt = 0x08; TA0CCTL0 = SCS+CCIS_1+OUTMOD_1+CM_2+CAP+CCIE;}
/**********************************
//功能: 485串口初始化
//输入:无
//返回: 无
**********************************/
void UartA8Init_485(void)
{
P10DIR |= BIT0;
RS485RD(0);
P1SEL |= RXD;
P1DIR &= ~RXD;
P8SEL |= TXD;
P8DIR |= TXD;
TA0CTL = TASSEL_1 + MC_2 + TACLR; InitRXD();
}
/**********************************
//功能: 485串口发送数据//输入:Len 数据长度 *pBuf 数据内容
//返回: 无**********************************/
void UartA8Send_485(unsigned int Len, unsigned char *pBuf)
{ unsigned int i;
RS485RD(1);
Delay_ms(3);
for(i=0;i<Len;i++)
{
RXTXData = *pBuf++;
TXD_Byte();
}
Delay_ms(3);
InitRXD();
RS485RD(0);
}

/**************************************
***功能:串口中断程序 ***
***入口:无 ***
***出口:无 ***
**************************************/
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TA0_ISR (void)
{
TA0CCR0 += Bitime;
// RX
if (TA0CCTL0 & CCIS0)
{
if( TA0CCTL0 & CAP )
{
TA0CCTL0 &= ~ CAP; TA0CCR0 += Bitime_5;
}
else
{
RXTXData = RXTXData >> 1; if(TA0CCTL0 & SCCI) RXTXData |= 0x80; Uart8BitCnt–;
if(Uart8BitCnt == 0)
{
InitRXD();
if(RxA8BufCount==0)
{
RxA8Buf[RxA8BufCount++]=RXTXData;
UartA8Start=1;
}
else RxA8Buf[RxA8BufCount++]=RXTXData;
if(RxA8BufCount>RXA8LEN-2)
RxA8BufCount=0;
UartA8Time=0;
}
}
}
// TX
else {
if(Uart8BitCnt == 0)
TA0CCTL0 &= ~CCIE; else
{
TA0CCTL0 |= OUTMOD2; if(RXTXData & 0x01) TA0CCTL0 &= ~OUTMOD2; RXTXData = RXTXData >> 1;
Uart8BitCnt–;
}
}
}

xyz549040622:

如果是移植过来的话,注重检查寄存器或者初始化的配置,没理由一个可以,一个不可以的,和你的框架没有关系。

赞(0)
未经允许不得转载:TI中文支持网 » msp430f5438模拟串口接收功能不工作
分享到: 更多 (0)