#include //GPIO definitions #define CSBdefinition P1SEL1 |= BIT4 // Configure UCA0STE (slave select) #define CLKdefinition P1SEL1 |= BIT5 // Configure UCA0CLK #define SIMOdefinition P2SEL0 |= BIT0 // Configure UCA0SIMO/TXD //Output configuration #define DDRP1 P1DIR = 0x78; // 0111 1000 #define DDRP2 P1DIR |= BIT0; ///////////////////////////////////////// #define RST_0 P1OUT &= ~BIT3 #define RST_1 P1OUT |= BIT3 #define CSB_0 P1OUT &= ~BIT4 #define CSB_1 P1OUT |= BIT4 #define RS_0 P1OUT &= ~BIT6 #define RS_1 P1OUT |= BIT6 #define SI_0 P2OUT &= ~BIT0 #define SI_1 P2OUT |= BIT0 // Global variables unsigned char text1[] = {"Hi :D "}; unsigned char text2[] = {"It's done! "}; unsigned int position; //************************** // MSP430F59xx Demo - eUSCI_A0, SPI 4-Wire Master // // Description: SPI master send data to SPI slave using 4-wire mode. // ACLK = 32.768kHz, MCLK = SMCLK = DCO ~1MHz. BRCLK = ACLK/2 // // // MSP430FR6989 // ----------------- // /|\| XIN|- // | | | 32KHz Crystal // --|RST XOUT|- // | | // | P2.0|-> Data Out (UCA0SIMO) // | | // | P1.3|-> RST LCD // | P1.6|-> RS LCD // | P1.5|-> Serial Clock Out (UCA0CLK) // | P1.4|-> Slave Select (UCA0STE) // | | // // William Goh // Texas Instruments Inc. // April 2014 // Built with IAR Embedded Workbench V5.60 & Code Composer Studio V6.0 //************************** /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function initialization void initLCD(); void initSPI(); void display(); void wData(unsigned char d); void wCommand(unsigned char c); volatile unsigned char TXData; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode to activate /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Pin configuration CSBdefinition; // Configure UCA0STE (slave select) CLKdefinition; // Configure UCA0CLK SIMOdefinition; // Configure UCA0SIMO/TXD PJSEL0 |= BIT4 | BIT5; // For XT1 DDRP1; DDRP2; initSPI(); initLCD(); __delay_cycles(50); display(); __delay_cycles(50); while(1){ } }//main /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void initSPI(void){ // Configure USCI_A0 for SPI operation UCA0CTLW0 = UCSWRST; // **Put state machine in reset** UCA0CTLW0 |= UCSSEL__SMCLK; // Choose SMLCK (1MHz) UCA0BR0 = 0x04;//4 // Set prescaler to 8 to get SCLK=125kHz UCA0BR1 = 0; UCA0MCTLW = 0; // By default -> 4-pin, 8-bit SPI master UCA0CTLW0 |= UCMST; // Master mode UCA0CTLW0 |= UCSYNC; // Synchronous mode UCA0CTLW0 |= UCCKPL; // Clock polarity high UCA0CTLW0 |= UCMSB; // MSB first (Most Significant Bit) UCA0CTLW0 |= UCMODE_2; // 4-pin SPI with UCxSTE active high UCA0CTLW0 |= UCSTEM; // Generate the enable signal for a 4-wire slave UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine** UCA0IE |= UCTXIE; // Enable USCI_A0 TX interrupt UCA0IFG &= ~UCTXIFG; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Initialize the LCD void initLCD(){ RST_0; //reset __delay_cycles(2); RST_1; //end reset __delay_cycles(20); wCommand(0x30); //wake up __delay_cycles(2); wCommand(0x30); //wake up wCommand(0x30); //wake up wCommand(0x39); //function set wCommand(0x14); //internal osc frequency wCommand(0x56); //power control wCommand(0x6D); //follower control wCommand(0x70); //contrast wCommand(0x0C); //display on wCommand(0x06); //entry mode wCommand(0x01); //clear __delay_cycles(100); } void wCommand(unsigned char c){ CSB_0; //CSB active RS_0; //Command/Instruction UCA0TXBUF = c; CSB_1; //CSB disabled __delay_cycles(200); } void wData(unsigned char d){ CSB_0; //CSB active RS_1; //Data UCA0TXBUF = d; CSB_1; //CSB disabled } void display(){ int a; wCommand(0x80); for(a=0; a<16; a++){ wData(text1[a]); } wCommand(0xC0); for(a=0; a<16; a++){ wData(text2[a]); } }