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

cc430串口程序

请教大家一个问题:我在利尔达的ez430-RF5137-433板子运行串口例程,可是不能收发数据,程序如下:

void main(void)
{

 WDTCTL = WDTPW + WDTHOLD; // Stop WDT

PMAPPWD = 0x02D52; // Get write-access to port mapping regs P1MAP5 = PM_UCA0RXD; // Map UCA0RXD output to P2.6 P1MAP6 = PM_UCA0TXD; // Map UCA0TXD output to P2.7 PMAPPWD = 0; // Lock port mapping registers P1DIR |= BIT6; // Set P2.7 as TX output
P1SEL |= BIT5 + BIT6; // Select P2.6 & P2.7 to UART function
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 9; // 1MHz 115200 (see User's Guide)
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 – no interrupt
case 2: // Vector 2 – RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 – TXIFG
default: break;
}
}

Peter_Zheng:

//******************************************************************************// CC430F513x Demo – USCI_A0, 115200 UART Echo ISR, DCO SMCLK//// Description: Echo a received character, RX ISR used. Normal mode is LPM0.// USCI_A0 RX interrupt triggers TX Echo.// Baud rate divider with 1048576hz = 1048576/115200 = ~9.1 (009h|01h)// ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz// See User Guide for baud rate divider table//// CC430F5137// —————–// /|\| |// | | |// –|RST |// | |// | P2.7/UCA0TXD|————>// | | 115200 – 8N1// | P2.6/UCA0RXD|<————//// M Morales// Texas Instruments Inc.// April 2009// Built with CCE Version: 3.2.2 and IAR Embedded Workbench Version: 4.11B//******************************************************************************

#include "cc430x513x.h"

void main(void){ WDTCTL = WDTPW + WDTHOLD; // Stop WDT

PMAPPWD = 0x02D52; // Get write-access to port mapping regs P2MAP6 = PM_UCA0RXD; // Map UCA0RXD output to P2.6 P2MAP7 = PM_UCA0TXD; // Map UCA0TXD output to P2.7 PMAPPWD = 0; // Lock port mapping registers P2DIR |= BIT7; // Set P2.7 as TX output P2SEL |= BIT6 + BIT7; // Select P2.6 & P2.7 to UART function UCA0CTL1 |= UCSWRST; // **Put state machine in reset** UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 9; // 1MHz 115200 (see User's Guide) UCA0BR1 = 0; // 1MHz 115200 UCA0MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled __no_operation(); // For debugger}

// Echo back RXed character, confirm TX buffer is ready first#pragma vector=USCI_A0_VECTOR__interrupt void USCI_A0_ISR(void){ switch(__even_in_range(UCA0IV,4)) { case 0:break; // Vector 0 – no interrupt case 2: // Vector 2 – RXIFG while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready? UCA0TXBUF = UCA0RXBUF; // TX -> RXed character break; case 4:break; // Vector 4 – TXIFG default: break; }}

请对照官方例程。

du yz:

回复 Peter_Zheng:

非常感谢您的指点,不过利尔达的板子上串口收发脚分别是P1.5和P1.6,请问怎样配置呢,刚开始接触430,还请多指教。

Lina Lian:

回复 du yz:

du yz,

我发现你的程序和Peter提供的例程的不同点就在UART的TX和RX使用的管脚不同,其他都是相同的。应该是可以使用的。请问你是如何得知不能收发数据的?

这段例程的作用是RX收到数据后,TX将受到的数据再发送出去。故为了验证其可以工作,需要先以115200 baud, LSB first, 8bit 数据,1bit stop位向板子发送数据,然后看看版则他和TX是否发送出了相同的数据。

Zhiyuan Yin:

回复 Lina Lian:

您好,如果您是TI的工程师,我可以很荣幸的告诉您,利尔达提供的开发板ez430调试器上的串口除了9600baud其他都不能使用,但是当用户自己制板并使用max3232芯片进行转换后,就可以解决问题

赞(0)
未经允许不得转载:TI中文支持网 » cc430串口程序
分享到: 更多 (0)