Martin Smith
/
SPI_Investigation
main.cpp
- Committer:
- ms523
- Date:
- 2012-01-15
- Revision:
- 0:7953b8ea1d53
- Child:
- 1:e4104703c457
File content as of revision 0:7953b8ea1d53:
#include "mbed.h" SPI my_spi(p5, p6, p7); Serial pc(USBTX,USBRX); #define TNF 0x02 #define TNE 0x01 #define RNE 0x04 /*** My method to write to FeRAM ***/ void spi_write (unsigned char data) { // First don't write to the FIFO buffer if it is full while (!(LPC_SSP1->SR & TNF)) // While TNF-Bit = 0 (FIFO full)... ; // Wait LPC_SSP1->DR = data; // Write to FIFO buffer } /*** Write a byte to FeRAM ***/ void write_byte (int address, unsigned char data) { spi_write(0x02); // Send write command spi_write(address >> 16); // Send top address byte to write to spi_write((address >> 8) & 0xFF); // Send Middle address byte to write to spi_write(address & 0xFF); // Send Bottom address byte to write to spi_write(data); // Send data to be write // Now I need to check that the FIFO transmit buffer is empty exiting the method while (!(LPC_SSP1->SR & TNE)) // While TNE-Bit = 0 (FIFO not empty)... ; // Wait } /*** Read a byte from FeRAM ***/ unsigned char read_byte (int address) { unsigned char my_val = 0; // Variable to store the read data spi_write(0x03); // Send read command spi_write(address >> 16); // Send top address byte to read from spi_write((address >> 8) & 0xFF); // Send Middle address byte to read from spi_write(address & 0xFF); // Send Bottom address byte to read from // Now the buffer is empty send out a dummy byte and read the buffer spi_write(0x00); // Send the dummy byte // Now I need to empty the FIFO receive buffer... while (LPC_SSP1->SR & RNE) // While RNE-Bit = 1 (FIFO receive buffer not empty)... my_val = LPC_SSP1->DR; // Read the byte in the buffer return (my_val); // Return the last byte read } int main() { // Set up the SPI port... my_spi.frequency(32000000); // 32MHz is the fastest mbed frequency supported by the FeRAM my_spi.format(8,3); // Set for mode 3 LPC_PINCON->PINSEL0 |= 0x00002000; // Set up SSEL1 wait(0.001); // Must wait 1ms after power on before using FeRAM my_spi.write(0x06); // Send WREN command to write enable // Thought I would wait a bit to get a cleaner scope trace wait_us(2); // Write the byte... write_byte (100, 0x4C); // Thought I would wait a bit again wait_us(2); // read the byte and display on TeraTerm int my_val = read_byte (100); pc.printf(" Value = 0x%X",my_val); }