hey Ioannis,
here is my code that I have working. I am using my own RFEFX board which includes an RF. If you have any questions please don't hesitate to ask. after i cleaned up some of Jim's code, as I have a different platform, the lights kinda just went off in my head and it all became real easy. For Video Click Here (9MB File takes a min to load)
Code:'**************************************************************** '* Name : ISD17XX.BAS '* Authors : Jerson,Brenon,Jim,Gary '**************************************************************** define OSC 20 Time1 var word 'these variables used for the Erase flash Time2 var byte 'LEDS when the device is erased 'used in Label - FlashLED: time1 = 5000 time2 = 50 '******************** DEFINE VARIABLES *********************** temp_bit VAR BIT temp VAR BYTE spi_cnt var byte ' counter for SPI transfer bSPI var byte ' the byte being transferred on SPI s_addr VAR WORD ' Start Address e_addr VAR WORD ' End Address ISD_Data var byte[7] ' This array contains data to/from ISD SR0a var ISD_Data[0] SR0b var ISD_Data[1] SR1 var ISD_Data[2] ' only valid after ReadStatus isCmdErr var SR0a.0 ' 1=previous command failed/ignored isFull var SR0a.1 ' 1=memory full isPU var SR0a.2 ' 1=ISD powered up isEOM VAR SR0a.3 ' 1=EOM detected (clear by CLR_INT command) isINT var SR0a.4 ' 1=current operation completed (clear by CLR_INT command) isReady var SR1.0 ' 1=Ready to receive SPI command (only valid after ReadStatus) ' Some SPI commands can still be sent when isReady=0 '******************** PIN ASSIGNMENTS ************************ Symbol miso = PORTC.5 'ISD1760 SPI MISO Symbol LED1 = PORTA.5 ' Symbol LED2 = PORTA.0 ' Symbol ss = PORTC.7 'ISD1760 SLAVE SELECT Symbol sclk = PORTC.4 'ISD1760 SPI CLOCK Symbol mosi = PORTC.6 'ISD1760 SPI MOSI '******************** INITIALIZATION ************************* initialize: ' Im using a PIC 16F876A with an external 20 MHZ clock ' there is really little setup. HIGH ss 'start with Slave Select HIGH HIGH sclk 'start with SPI Clock HIGH LOW MOSI 'start with MOSI LOW LOW LED1 LOW led2 start: 'Initialize the ISD GoSub isd_pu PAUSE 50 '50 mS Power Up Delay (per datasheet) 'I removed the APC because it doesn't work on my Audio Board PAUSE 10 GoSub isd_clr_int 'clear interrupt and EOM gosub erase 'this will erase the ISD chip whenever 'I reprogram my PIC '********************* MAIN PROGRAM ************************** main_loop: '(MAIN PROGRAM LOOP) PAUSE 2000 RecordLoop: 'Here is my board waiting for me to if portc.3 = 1 then Record 'push the record button goto recordLoop Record: high led1 'a record LED if portc.3 = 1 then record 'it will not continue until i 'release the button s_addr = $010 'a 1 second clip takes approx 16 rows of e_addr = $01f 'memory space $010-$01F = 16 GOSUB isd_set_rec 'this Set_rec identical to set_play 'was added so i could record a message PAUSE 2000 GOSUB isd_stop ' an immediate stop to stop recording low led1 ' turn record LED off Playloop: 'the same button then becomes a play button 'pause 2000 if portc.3 = 1 then play goto playloop Play: high led2 'a different LED for play if portc.3 = 1 then play 'wont play until button is released s_addr = $010 'playing back from the same 16 rows e_addr = $01f GOSUB isd_set_play PAUSE 2000 GOSUB isd_stop low led2 Eraseloop: 'pause 2000 if portc.3 = 1 then play 'in this loop you can either play the sound if portc.5 = 1 then erase 'again or erase it and record another one goto Eraseloop 'two different buttons are used Erase: 'this is the erase subroutine which is also if portc.5 = 1 then erase 'called at the beginning of this program s_addr = $010 'this is not a Gang erase so the Start and e_addr = $01f 'End address must be present or you will get GOSUB isd_set_erase 'a command error gosub flashLED 'when i erase the chip a series of LEDS 'are flased to indicate an erase. pause 1000 goto recordloop 'after an erase it goes back to record loop '********************** SUBROUTINES ************************** isd_pu: LOW ss bSPI=$01 'Power Up Command GoSub isd_spi ISD_Data[0] = bSPI 'SR0a bSPI=$00 GoSub isd_spi ISD_Data[1] = bSPI 'SR0b HIGH ss RETURN '-------------------------------------------------------------------------- isd_wait_ready: GOSUB isd_rd_status IF isReady = 0 THEN isd_wait_ready RETURN '-------------------------------------------------------------------------- isd_set_play: LOW ss bSPI = $80 'Set Play Command (7 bytes) GoSub isd_spi ISD_Data[0] = bSPI 'SR0a bSPI = $00 GoSub isd_spi ISD_Data[1] = bSPI 'SR0b bSPI = s_addr.LowByte ' Start Address low byte. GoSub isd_spi ISD_Data[2] = bSPI 'SR0a bSPI = s_addr.HighByte ' Start Address high byte GoSub isd_spi ISD_Data[3] = bSPI 'SR0b bSPI = e_addr.LowByte ' End Address low byte GoSub isd_spi ISD_Data[4] = bSPI 'SR0a bSPI = e_addr.HighByte ' End Address high byte GoSub isd_spi ISD_Data[5] = bSPI 'SR0b bSPI = $00 ' Reserved Address - set to "0" GoSub isd_spi ISD_Data[6] = bSPI 'SR0a HIGH ss RETURN '-------------------------------------------------------------------------- isd_Set_Erase: LOW ss bSPI = $82 'Set Erase Command (7 bytes) GoSub isd_spi ISD_Data[0] = bSPI SR0a bSPI = $00 GoSub isd_spi ISD_Data[1] = bSPI 'SR0b bSPI = s_addr.LowByte 'Start Address low byte. GoSub isd_spi ISD_Data[2] = bSPI 'SR0a bSPI = s_addr.HighByte 'Start Address high byte GoSub isd_spi ISD_Data[3] = bSPI 'SR0b bSPI = e_addr.LowByte 'End Address low byte GoSub isd_spi ISD_Data[4] = bSPI 'SR0a bSPI = e_addr.HighByte 'End Address high byte GoSub isd_spi ISD_Data[5] = bSPI 'SR0b bSPI = $00 'Reserved Address - set to "0" GoSub isd_spi ISD_Data[6] = bSPI 'SR0a HIGH ss RETURN '-------------------------------------------------------------------------- isd_set_rec: LOW ss bSPI = $81 'Set Record Command (7 bytes) GoSub isd_spi ISD_Data[0] = bSPI 'SR0a bSPI = $00 GoSub isd_spi ISD_Data[1] = bSPI 'SR0b bSPI = s_addr.LowByte 'Start Address low byte. GoSub isd_spi ISD_Data[2] = bSPI 'SR0a bSPI = s_addr.HighByte 'Start Address high byte GoSub isd_spi ISD_Data[3] = bSPI 'SR0b bSPI = e_addr.LowByte 'End Address low byte GoSub isd_spi ISD_Data[4] = bSPI 'SR0a bSPI = e_addr.HighByte 'End Address high byte GoSub isd_spi ISD_Data[5] = bSPI 'SR0b bSPI = $00 'Reserved Address - set to "0" GoSub isd_spi ISD_Data[6] = bSPI 'SR0a HIGH ss RETURN '-------------------------------------------------------------------------- isd_spi: ' shift SPI data out and into SPI byte FOR spi_cnt = 0 to 7 ' MOSI = bSPI.0 ' shift LSB of byte onto MOSI line LOW SCLK ' clock MISO data out to uC (Falling Edge) temp_bit = miso ' HIGH SCLK ' clock MOSI into ISD1700 (Rising Edge) bSPI = bSPI >> 1 ' shift SPI byte Right bSPI.7 = temp_bit NEXT spi_cnt RETURN '-------------------------------------------------------------------------- isd_clr_int: ' CLEAR INTERRUPT AND EOM BITS LOW SS bSPI=$04 'Clear Interrupt Command gosub isd_spi ISD_Data[0] = bSPI 'SR0a bSPI=$00 gosub isd_spi ISD_Data[1] = bSPI 'SR0b HIGH SS RETURN '-------------------------------------------------------------------------- isd_stop: ' Stop Immediately LOW ss bSPI=$02 'Stop Command gosub isd_spi ISD_Data[0] = bSPI 'SR0a bSPI=$00 gosub isd_spi ISD_Data[1] = bSPI 'SR0b HIGH ss RETURN '-------------------------------------------------------------------------- isd_rd_status: 'read status of ISD1700 LOW ss ' bSPI=$05 'Read Status Command gosub isd_spi ISD_Data[0] = bSPI 'SR0a bSPI=$00 gosub isd_spi ISD_Data[1] = bSPI 'SR0b bSPI=$00 gosub isd_spi ISD_Data[2] = bSPI 'SR1 HIGH ss RETURN '*********** Erase Indicators ******************************** FlashLED: pulsout porta.5,time1 pause time2 pulsout porta.3,time1 pause time2 pulsout porta.2,time1 pause time2 pulsout porta.1,time1 pause time2 pulsout porta.0,time1 pause time2 low porta.0 return End




Bookmarks