sample and play see http://mbed.org/users/okini3939/notebook/I2S_TLV320AIC23B/

Dependencies:   I2SSlave TLV320 mbed

Fork of i2s_audio_echo by Suga koubou

PRAM.cpp

Committer:
okini3939
Date:
2012-12-11
Revision:
1:2aeba027f61e

File content as of revision 1:2aeba027f61e:

#include "mbed.h"
#include "PRAM.h"


PRAM::PRAM (SPI &spi, PinName cs) : _spi(spi), _cs(cs) {
    int i;

    _cs = 1;
    _spi.frequency(16000000);
    wait_ms(10);
    
    _cs = 0;
    _spi.write(CMD_RDID);
    printf("RAM Manufacturer ID : %02x\r\n", spi.write(0));
    i = (spi.write(0) << 8) | spi.write(0);
    printf("RAM Device ID : %04x\r\n", i);
    _cs = 1;
}

PRAM::PRAM (PinName mosi, PinName miso, PinName sclk, PinName cs) : _spi(mosi, miso, sclk), _cs(cs) {
}

int PRAM::status () {
    int r;

    _cs = 0;
    _spi.write(CMD_RDSR);
    r = _spi.write(0);
    _cs = 1;
    return r;
}

int PRAM::write (int addr, char *buf, int len) {
    int i;

    while (status() & 1) {
        // write in progress
        wait_us(1);
    }

    _cs = 0;
    _spi.write(CMD_WREN);
    _cs = 1;
    wait_us(1);

    _cs = 0;
    _spi.write(CMD_PP_BA);
    _spi.write((addr >> 16) & 0xff);
    _spi.write((addr >> 8) & 0xff);
    _spi.write(addr & 0xff);

    len = len - (addr & 0x3f);
    for (i = 0; i < len; i ++) {
        _spi.write(buf[i]);
    }
    _cs = 1;
    return i;
}

int PRAM::read (int addr, char *buf, int len) {
    int i;

    while (status() & 1) {
        // write in progress
        wait_us(1);
    }

    _cs = 0;
    _spi.write(CMD_READ);
    _spi.write((addr >> 16) & 0xff);
    _spi.write((addr >> 8) & 0xff);
    _spi.write(addr & 0xff);

    for (i = 0; i < len; i ++) {
        buf[i] = _spi.write(0);
    }
    _cs = 1;
    return i;
}