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

MSP430F2418: 关于USCIA0和USCIA1同时作为串口模式的问题

Part Number:MSP430F2418

void main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	Uart0_Init();
	Uart1_Init();


	__bis_SR_register(GIE);


	while(1)
	{

	}
	
}

同时初始化USCIA0和USCIA1,先初始化的一个将会不能使用,这是怎么回事?

初始化代码如下,USCIA0:

void Uart0_Init(void)
{BCSCTL1 &= ~XT2OFF;BCSCTL2 |= SELM_2 + SELS;P3SEL = 0x30;// P3.4,5 = USCI_A0 TXD/RXDUCA0CTL1 |= UCSSEL_2;// SMCLKUCA0BR0 = 0x45;// 8MHz 115200UCA0BR1 = 0x00;// 8MHz 115200UCA0MCTL = 4;// Modulation UCBRSx = 4UCA0CTL1 &= ~UCSWRST;// **Initialize USCI state machine**IE2 |= UCA0RXIE;// Enable USCI_A0 RX interrupt
}

USCIA1:

void Uart1_Init(void)
{BCSCTL1 &= ~XT2OFF;BCSCTL2 |= SELM_2 + SELS;P3SEL = 0xC0;// P3.6,7 = USCI_A1 TXD/RXDUCA1CTL1 |= UCSSEL_2;// CLK = SMCLKUCA1BR0 = 0x45;// 8MHz 115200UCA1BR1 = 0x00;// 8MHz 115200UCA1MCTL = 4;// Modulation UCBRSx = 4UCA1CTL1 &= ~UCSWRST;// **Initialize USCI state machine**UC1IE |= UCA1RXIE;// Enable USCI_A1 RX interrupt
}

时钟源选择XT2,8M时钟,两个USCI模块的时钟源都为SMCLK,1分频。

Susan Yang:

建议让每个 USCI 通信单独工作,然后合并源代码。

user6616820 说:先初始化的一个将会不能使用

是指不能进入对应的中断服务程序?若是可以的话,请详细说明下现在的使用情况,谢谢

,

user6616820:

是的,不能进入中断服务程序。

我目前两个USCI都是回环状态,如果我只初始化USCI0,那么电脑的串口工具发送数据,MCU可以把数据返回回来。

如果我初始化USCI0,再初始化USCI1,那么USCI0的回环就没有相应,而USCI1的回环有响应

,

Susan Yang:

单独测试USCI1呢?理论上两者的初始化并不会影响中断

,

user6616820:

单独测试USCI1,可以进入中断。但是回环的数据仿佛像是波特率不对一样的乱码。我寄存器的配置和USCI0是一样,单独测试0,中断正常,回环数据正常;单独测试1,中断正常,回环数据乱码。

,

user6616820:

您好,乱码的问题刚刚解决了,硬件上的问题。现在就是单独测试0或1的时候,中断正常,回环正常如果同时测试0和1,那么前一个初始化的中断进不去

,

Susan Yang:

user6616820 说:您好,乱码的问题刚刚解决了,硬件上的问题。

谢谢反馈

user6616820 说:如果同时测试0和1,那么前一个初始化的中断进不去

看起来是P3SEL的问题,第2个初始化的,会把之前设置的P3SEL覆盖掉,建议使用其他的引脚测试或者使用P3SEL |= 

,

user6616820:

您好,我刚刚也看到了,因为我是直接复制的例程的代码段,没注意到这个小细节,谢谢

,

Susan Yang:

很高兴您能解决这个问题

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F2418: 关于USCIA0和USCIA1同时作为串口模式的问题
分享到: 更多 (0)