I added a short code at the end. The code is based on TI's example code for MSP430F6x series to output data on an UART
port. I use MSP430F6736
.
That code works fine on Code Composer Studio v6 with TI's or GNUC compilers. What I mean fine is that the MCU output the correct data when it is run. I can verify that the data is output by using an oscilloscope and UART
is connected to a Linux device that receives data correctly.
I use IAR Workbench for MSP430 IDE v6.10.7
, common components v7.0.5.3137
. When I run the below code on IAR, it executes the code but does not output any signal at the UART port, so that I don't see any data on the Linux end device does either. I use the same settings on both IAR or CCS usage. Could you please tell me why the code does not work on the IAR or if I need some special definition or library for code to work on IAR?
I am using one of TI's EVM based on MSP430F6736. I am connected it on JTAG connector via one of TI's debugger MSP-FET430UIF.
Here is the build output
Building configuration: j - Debug
Updating build tree...
4 file(s) deleted.
Updating build tree...
main.c
Warning[Pe111]: statement is unreachable C:\Users\user\Desktop\main.c 36
Linking
Total number of errors: 0
Total number of warnings: 1
Here is the code
#include <msp430.h> void mUART_init(void){ WDTCTL = WDTPW + WDTHOLD; // Stop WDT // Setup P1.2 UCA0RXD, P1.3 UCA0TXD P1SEL |= BIT2 | BIT3; // Set P1.2, P1.3 to non-IO P1DIR |= BIT2 | BIT3; // Enable UCA0RXD, UCA0TXD UCA0CTLW0 |= UCSWRST; // **Put state machine in reset** UCA0CTLW0 |= UCSSEL_2; // SMCLK UCA0BRW_L = 6; // 1MHz 9600 (see User's Guide) UCA0BRW_H = 0; // 1MHz 96000 UCA0MCTLW = UCBRF_13 | UCOS16; // Modln UCBRSx=0, UCBRFx=0x13, // over sampling UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine** } void mUART_send(uint32_t send){ uint8_t MYtx[4]; MYtx[0] = send; MYtx[1] = (send >>8); MYtx[2] = (send >>16); MYtx[3] = (send >>24); int i; for(i=0; i<4; i++){ while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready? UCA0TXBUF = MYtx[i]; // TX -> RXed character } } int main(void){ mUART_init(); while(1) mUART_send(0xFEAB); return 0; }
Project > options: MSP430F6736 is selected, code model is large, data model is small, no optimization is selected. Normal DLIB is selected