Quantcast
Channel: Wireless Connectivity
Viewing all articles
Browse latest Browse all 116964

Forum Post: CC2533 SPI UART0 / UART1 porting code of MSP430

$
0
0
I want to port a SPI code from MSP430 to the newly CC2533
The MSP430  SPI code is like this:
//  MSP430 Port 1: P1.4, P1.5, p1.6 (unnamed), p1.7
#define CSB_PIN BIT4
#define MOSI_PIN BIT7
#define SCLK_PIN BIT5
#define CSB_LOW P1OUT &= ~CSB_PIN
#define CSB_HIGH P1OUT |= CSB_PIN
#define SCLK_LOW P1OUT &= ~SCLK_PIN
#define SCLK_HIGH P1OUT |= SCLK_PIN
//#define RESB_LOW P1OUT &= ~RESB_PIN
//#define RESB_HIGH P1OUT |= RESB_PIN
#define MOSI_LOW P1OUT &= ~MOSI_PIN
#define MOSI_HIGH P1OUT |= MOSI_PIN
#define DELAY __delay_cycles(10000)
// Uses bitbanging if no USCI
#ifdef UCB0CTL0_
// Support for  USCI_B0
void SPISetup(void)
{
    // Reset (not necessary when HW reset is on board)
    //P1DIR |= RESB_PIN;
    //P1OUT &= ~(RESB_PIN);
    DELAY;
    //P1OUT |= RESB_PIN;
    DELAY;
    P1OUT |= CSB_PIN;
    P1DIR |= CSB_PIN;                                                           // /CS disable
    UCB0CTL1 |= UCSWRST;                                                 // Disable USCI state machine
    UCB0CTL0 |= UCMST+UCCKPH+UCMSB+UCSYNC;    // 3-pin, 8-bit SPI master
    UCB0CTL1 |= UCSSEL_2;                                                // SMCLK
    UCB0BR0 = 0x02;                                                             // UCLK/2
    UCB0BR1 = 0; 
    P1SEL  |= MOSI_PIN | BIT6 | SCLK_PIN;   
    P1SEL2 |= MOSI_PIN | BIT6 | SCLK_PIN;
    // SPI option select
    P1DIR |= MOSI_PIN | SCLK_PIN;
    // SPI TXD out direction
    UCB0CTL1 &= ~UCSWRST;                                             // Initialize USCI state machine
}
// HW SPI write
void SPIWrite(char addr, char value)
{
    char first = (addr << 7) | (value >> 1);
    char second = (value << 7);
    P1OUT &= ~CSB_PIN;                          // /CS enable
    while (!(IFG2&UCB0TXIFG));                // Wait for TXBUF ready
    UCB0TXBUF = first;                              // Send address
    while (!(IFG2&UCB0TXIFG));                // Wait for TXBUF ready
    UCB0TXBUF = second;                        // Send data
    while (UCB0STAT & UCBUSY);            // Wait for TX to complete
    P1OUT |= CSB_PIN;                             // /CS disable
}
#else
// Bit banging setup code
#warning Bitbanging SPI use
void SPISetup(void)
{
    P1OUT |= CSB_PIN |  MOSI_PIN | SCLK_PIN; 
    P1DIR |= CSB_PIN |  MOSI_PIN | SCLK_PIN;         // /CS disable
    P1OUT &= ~( CSB_PIN | SCLK_PIN);
    DELAY;
    DELAY;
}
// Bitbanging code
void SPIWrite(char conf, char value)
{
    CSB_LOW;        // /CS enable
    if (conf) {
        P1OUT &= ~SCLK_PIN;
        P1OUT |= MOSI_PIN;
    }
    else {
        P1OUT &= ~(SCLK_PIN | MOSI_PIN);
    }
    P1OUT |= SCLK_PIN;
    int mask = 0x0080;
    while((mask & 0xFF)) {
        if(value & mask) {
            P1OUT &= ~SCLK_PIN;
            P1OUT |= MOSI_PIN;
        } else {
            P1OUT &= ~(SCLK_PIN | MOSI_PIN);
        }
        P1OUT |= SCLK_PIN;
        mask >>= 1;
    }
    CSB_HIGH;         // /CS disable
}
#endif
 
Thanks!

Viewing all articles
Browse latest Browse all 116964

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>