Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // http://arduino.cc/forum/index.php/topic,45579.0.html
- #include <SPI.h>
- int CS_pin = 9;
- int DREQ_pin = 3;
- byte received;
- void setup()
- {
- Serial.begin(9600);
- pinMode(CS_pin, OUTPUT);
- pinMode(DREQ_pin, INPUT);
- SPI.begin();
- SPI.setBitOrder(MSBFIRST);
- //CPOL = 0, CPHA = 1
- //see en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Mode_Numbers
- //and decoder chip datasheet
- SPI.setDataMode(SPI_MODE1);
- //max SDI clock freq = CLKI/7 and (datasheet) CLKI = 36.864, hence max clock = 5MHz
- //SPI clock arduino = 16MHz. 16/ 4 = 4MHz -- ok!
- SPI.setClockDivider(SPI_CLOCK_DIV4);
- }
- void loop()
- {
- digitalWrite(CS_pin, HIGH);
- delay(5);
- // CHIP Write
- // sets sci_mode register, SM_SDINEW, SM_SDISHARE, SM_TESTS. pg 25, 26
- byte aux;
- digitalWrite(CS_pin, LOW);
- delay(1);
- SPI.transfer(0x02); //write command
- SPI.transfer(0x00); //SDI_MODE register
- //extract and send higher byte of data
- aux = 0x0c20 >> 8;
- SPI.transfer(aux);
- //extract and send lower byte of data
- aux = 0x0c20 & 0b11111111;
- SPI.transfer(aux);
- //wait for the chip to finish executing command
- while (!DREQ_pin){};
- digitalWrite(CS_pin, HIGH);
- delay(1);
- Serial.println("starting sine test");
- // Start SINE test
- digitalWrite(CS_pin, HIGH);
- delay(1);
- SPI.transfer(0x53);
- SPI.transfer(0xEF);
- SPI.transfer(0x6E);
- SPI.transfer(0xAA); // 44100 Hz test tone frequency (pg 35)
- SPI.transfer(0);
- SPI.transfer(0);
- SPI.transfer(0);
- SPI.transfer(0);
- delay(200);
- // EXIT SINE test
- digitalWrite(CS_pin, HIGH);
- delay(1);
- SPI.transfer(0x45);
- SPI.transfer(0x78);
- SPI.transfer(0x69);
- SPI.transfer(0x74);
- SPI.transfer(0);
- SPI.transfer(0);
- SPI.transfer(0);
- SPI.transfer(0);
- Serial.println("exited sine test");
- delay(200);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement