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:
很高兴您能解决这个问题
TI中文支持网




