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

请教关于MSP430G2231uart里面通信的pintf问题

以下是我的代码,基本就是改编TI提供的例子。

    int b=1234;                     

    TimerA_UART_print("%d",b);  

这样写为什么CCS4会报错too many arguments in function call,正确的写法是什么?

 

//******************************************************************************

//  MSP430G2xx1 Demo – Timer_A, Ultra-Low Pwr UART 9600 Echo, 32kHz ACLK

//

//  Description: Use Timer_A CCR0 hardware output modes and SCCI data latch

//  to implement UART function @ 9600 baud. Software does not directly read and

//  write to RX and TX pins, instead proper use of output modes and SCCI data

//  latch are demonstrated. Use of these hardware features eliminates ISR

//  latency effects as hardware insures that output and input bit latching and

//  timing are perfectly synchronised with Timer_A regardless of other

//  software activity. In the Mainloop the UART function readies the UART to

//  receive one character and waits in LPM3 with all activity interrupt driven.

//  After a character has been received, the UART receive function forces exit

//  from LPM3 in the Mainloop which configures the port pins (P1 & P2) based

//  on the value of the received byte (i.e., if BIT0 is set, turn on P1.0).

 

//  ACLK = TACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO

//  //* An external watch crystal is required on XIN XOUT for ACLK *//  

//

//               MSP430G2xx1

//            —————–

//        /|\|              XIN|-

//         | |                 | 32kHz

//         –|RST          XOUT|-

//           |                 |

//           |   CCI0B/TXD/P1.1|——–>

//           |                 | 9600 8N1

//           |   CCI0A/RXD/P1.2|<——–

//

//  D. Dang

//  Texas Instruments Inc.

//  October 2010

//  Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10

//******************************************************************************

 

#include "msp430g2231.h"

//——————————————————————————

// Hardware-related definitions

//——————————————————————————

#define UART_TXD   0x02                     // TXD on P1.1 (Timer0_A.OUT0)

#define UART_RXD   0x04                     // RXD on P1.2 (Timer0_A.CCI1A)

//——————————————————————————

// Conditions for 9600 Baud SW UART, SMCLK = 1MHz

//——————————————————————————

#define UART_TBIT_DIV_2     (1000000 / (9600 * 2))

#define UART_TBIT           (1000000 / 9600)

 

//——————————————————————————

// Global variables used for full-duplex UART communication

//——————————————————————————

unsigned int txData;                        // UART internal variable for TX

unsigned char rxBuffer;                     // Received UART character

 

//——————————————————————————

// Function prototypes

//——————————————————————————

void TimerA_UART_init(void);

void TimerA_UART_tx(unsigned char byte);

void TimerA_UART_print(char *string);

//——————————————————————————

// main()

//——————————————————————————

void main(void)

{

// unsigned char str[30]={0};

int chCount=0;

    WDTCTL = WDTPW + WDTHOLD;               // Stop watchdog timer

    DCOCTL = 0x00;                          // Set DCOCLK to 1MHz

    BCSCTL1 = CALBC1_1MHZ;

    DCOCTL = CALDCO_1MHZ;

    P1OUT = 0x00;                           // Initialize all GPIO

    P1SEL = UART_TXD + UART_RXD;            // Timer function for TXD/RXD pins

    P1DIR = 0xFF & ~UART_RXD;               // Set all pins but RXD to output

    P2OUT = 0x00;

    P2SEL = 0x00;

    P2DIR = 0xFF;

 

    __enable_interrupt();

 

    TimerA_UART_init();   

    int b=1234;                     // Start Timer_A UART

    TimerA_UART_print("%d",b);             //"G2xx1 TimerA UART\r\n");

        //  TimerA_UART_print("READY.\r\n");

 

    for (;;)

    {   // Wait for incoming character

        __bis_SR_register(LPM0_bits);

        if(chCount<=29)

        {

        str[chCount]=rxBuffer;

        chCount++;

        }  

    }

}

//——————————————————————————

// Function configures Timer_A for full-duplex UART operation

//——————————————————————————

void TimerA_UART_init(void)

{

    TACCTL0 = OUT;                          // Set TXD Idle as Mark = '1'

    TACCTL1 = SCS + CM1 + CAP + CCIE;       // Sync, Neg Edge, Capture, Int

    TACTL = TASSEL_2 + MC_2;                // SMCLK, start in continuous mode

}

//——————————————————————————

// Outputs one byte using the Timer_A UART

//——————————————————————————

void TimerA_UART_tx(unsigned char byte)

{

    while (TACCTL0 & CCIE);                 // Ensure last char got TX'd

    TACCR0 = TAR;                           // Current state of TA counter

    TACCR0 += UART_TBIT;                    // One bit time till first bit

    TACCTL0 = OUTMOD0 + CCIE;               // Set TXD on EQU0, Int

    txData = byte;                          // Load global variable

    txData |= 0x100;                        // Add mark stop bit to TXData

    txData <<= 1;                           // Add space start bit

}

 

//——————————————————————————

// Prints a string over using the Timer_A UART

//——————————————————————————

void TimerA_UART_print(char *string)

{

    while (*string) 

    {

        TimerA_UART_tx(*string++);

    }

}

//——————————————————————————

// Timer_A UART – Transmit Interrupt Handler

//——————————————————————————

#pragma vector = TIMERA0_VECTOR

__interrupt void Timer_A0_ISR(void)

{

    static unsigned char txBitCnt = 10;

 

    TACCR0 += UART_TBIT;                    // Add Offset to CCRx

    if (txBitCnt == 0) {                    // All bits TXed?

        TACCTL0 &= ~CCIE;                   // All bits TXed, disable interrupt

        txBitCnt = 10;                      // Re-load bit counter

    }

    else {

        if (txData & 0x01) {

          TACCTL0 &= ~OUTMOD2;              // TX Mark '1'

        }

        else {

          TACCTL0 |= OUTMOD2;               // TX Space '0'

        }

        txData >>= 1;

        txBitCnt–;

    }

}      

//——————————————————————————

// Timer_A UART – Receive Interrupt Handler

//——————————————————————————

#pragma vector = TIMERA1_VECTOR

__interrupt void Timer_A1_ISR(void)

{

    static unsigned char rxBitCnt = 8;

    static unsigned char rxData = 0;

 

    switch (__even_in_range(TAIV, TAIV_TAIFG)) { // Use calculated branching

        case TAIV_TACCR1:                        // TACCR1 CCIFG – UART RX

            TACCR1 += UART_TBIT;                 // Add Offset to CCRx

            if (TACCTL1 & CAP) {                 // Capture mode = start bit edge

                TACCTL1 &= ~CAP;                 // Switch capture to compare mode

                TACCR1 += UART_TBIT_DIV_2;       // Point CCRx to middle of D0

            }

            else {

                rxData >>= 1;

                if (TACCTL1 & SCCI) {            // Get bit waiting in receive latch

                    rxData |= 0x80;

                }

                rxBitCnt–;

                if (rxBitCnt == 0) {             // All bits RXed?

                    rxBuffer = rxData;           // Store in global variable

                    rxBitCnt = 8;                // Re-load bit counter

                    TACCTL1 |= CAP;              // Switch compare to capture mode

                    __bic_SR_register_on_exit(LPM0_bits);  // Clear LPM0 bits from 0(SR)

                }

            }

            break;

    }

}

//——————————————————————————

Young Hu:

Bo Zhang,

您好!秋之初说的对!

找个函数不是stdio.h中的那个printf函数。以后在调用函数的时候要注意查看函数的定义。

赞(0)
未经允许不得转载:TI中文支持网 » 请教关于MSP430G2231uart里面通信的pintf问题
分享到: 更多 (0)