#include <msp430fr6989.h>
|
|
|
|
//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]);
|
|
}
|
|
}
|