system
6
void erase()
{
digitalWrite(SLAVESELECT, LOW);
delay(WAIT_TIME);
spi_transfer(ERASE);// erase
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT, HIGH);
delay(WAIT_TIME2);
Serial.println("erase end");
}
void eraseAll()
{
digitalWrite(SLAVESELECT, LOW);
delay(WAIT_TIME);
spi_transfer(G_ERASE);// g_erase
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT, HIGH);
delay(WAIT_TIME2);
Serial.println("erase all end");
}
void fwd()
{
digitalWrite(SLAVESELECT, LOW);
delay(WAIT_TIME);
spi_transfer(FWD); // forward
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT, HIGH);
delay(WAIT_TIME2);
Serial.println("forward end");
}
void ready_play_wait()
{
byte byte1;
byte byte2;
byte byte3;
while(byte3 << 7 != 128)
{
digitalWrite(SLAVESELECT, LOW);
delay(WAIT_TIME);
byte1 = spi_transfer(RD_STATUS); // clear interupt and eom bit
byte2 = spi_transfer(0x00); // data byte
byte3 = spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT, HIGH);
delay(WAIT_TIME2);
}
delay(100);
Serial.println("play end");
}
void ready_rec_check()
{
byte byte1;
byte byte2;
byte byte3;
while(byte3 << 7 == 128)
{
digitalWrite(SLAVESELECT, LOW);
delay(WAIT_TIME);
byte1 = spi_transfer(RD_STATUS); // clear interupt and eom bit
byte2 = spi_transfer(0x00); // data byte
byte3 = spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT, HIGH);
delay(WAIT_TIME2);
}
delay(100);
Serial.println("rec start");
}
char spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1 << SPIF))) // Wait for the end of the transmission
{
};
return SPDR; // return the received byte
}
//flag : false=analog in/true=mic in
//flag2 : false=no monitor on recording / true=monitor on recording
//vol : volume max=7 min=0
void write_apc(boolean flag, boolean flag2, int vol)
{
uint16_t d[12];
for(int i = 0; i < 12; i++)
{
d = 0x00;
}
if(flag == true)
d[6] = 0x01;
if(flag2 == true)
d[3] = 0x01;
int vv = 7 - vol;
d[0] = vv & 0x01;
d[1] = vv & 0x02;
d[2] = vv & 0x04;
uint16_t apc = (d[0] | d[1] << 1 | d[2] << 2 | d[3] << 3 | d[4] << 4 | d[5] << 5 | d[6] << 6 | d[7] << 7 | d[8] << 8 | d[9] << 9 | d[10] << 10 | d[11] << 11);
digitalWrite(SLAVESELECT, LOW);
delay(WAIT_TIME);
spi_transfer(WR_APC2); // write apc register 2
spi_transfer(apc & 0xFF); // data byte start
spi_transfer(apc >> ; // data byte last 3 bits
digitalWrite(SLAVESELECT, HIGH);
delay(WAIT_TIME2);
Serial.println("write apc end");
}
uint16_t read_apc()
{
uint16_t apc;
uint8_t data[4] = {0xFF,0xFF,0xFF,0xFF};
digitalWrite(SLAVESELECT, LOW);
delay(WAIT_TIME);
data[0] = spi_transfer(RD_APC); // read apc register
data[1] = spi_transfer(0);
data[2] = spi_transfer(0);
data[3] = spi_transfer(0);
digitalWrite(SLAVESELECT, HIGH);
delay(WAIT_TIME2);
apc = word(data[3], data[2]);
Serial.println("read apc end");
return apc;
}
uint16_t read_status(void)
{
uint16_t sr1;
uint8_t data[3] = {0xFF,0xFF,0xFF};
digitalWrite(SLAVESELECT, LOW);
delay(WAIT_TIME);
data[0] = spi_transfer(RD_STATUS); // read status register
data[1] = spi_transfer(0);
data[2] = spi_transfer(0);
digitalWrite(SLAVESELECT, HIGH);
delay(WAIT_TIME2);
sr1 = word(data[2], 0xFF);
return sr1;
}