Hello,
I am trying to interface a MSP430F169 to an Atmel AT45DB021B flash. As a first
attempt, I am trying to read the status register, which contains a
part-specific bit string for size determination, as well as a busy indicator.
I have the data lines on USART1, and /CS on P3.0. I have tried the following
code to read from the part and output the register on P1, but have been
unsuccessful thus far. This is my first MSP430 project. What am I doing wrong,
and how can I fix it?
#include <msp430x16x.h>
#include <stdlib.h>
#include <signal.h>
#include <io.h>
#define nCS_LOW { P3OUT &= ~BIT0; }
#define nCS_HIGH { P3OUT |= BIT0; }
#define WRITE_BYTE(b) { while ((IFG1 & UTXIFG1) == 1); TXBUF1 = b; }
int main(void);
void setup(void);
unsigned char read_status_reg(void);
int main(void)
{
setup();
nCS_HIGH;
while(1)
{
P1OUT = read_status_reg();
}
}
unsigned char read_status_reg(void)
{
unsigned char x;
nCS_LOW;
while((IFG1 & UTXIFG1));
TXBUF1 = 0x57; // read status reg
x = RXBUF1;
nCS_HIGH;
return x;
}
void setup(void)
{
WDTCTL = WDTPW|WDTHOLD; // disable watchdog
P1DIR = 0xFF;
P1OUT = 0xFF;
ME2 = USPIE1;
UTCTL1 = SSEL1|SSEL0|STC;
UCTL1 = CHAR|SYNC|MM;
UBR01 = 0x02;
UBR11 = 0x00;
UMCTL1 = 0x00;
P5SEL |= BIT1|BIT2|BIT3; // SPI 5.1-5.3
P3OUT |= BIT0; // nCS output;
}