I tried to play a recorded sound on ISD1730 but something is wrong. I use 16F1503 set at 4 MHZ. Can somebody help me..? Thx in advance


CODE:

#CONFIG
__config _CONFIG1, _FOSC_INTOSC & _MCLRE_OFF & _CP_ON & _CLKOUTEN_OFF
__config _CONFIG2, _LVP_OFF & _LPBOR_OFF
#ENDCONFIG

DEFINE OSC 4
OSCCON = %01101000 ' set 4MHz internal osc


CM1CON0.7 = 0 ; Disable comparator 1
CM2CON0.7 = 0 ; Disable comparator 2

ADCON0 = 0 'all ports set as digital
ADCON1 = 0

TRISA = %00100000 'PORTA.5 as input
ANSELA = %00000000
PORTA = 0

TRISC = %00000100 'PORTC.3 as input
LATC = 0
PORTC = 0
ANSELC = 0


'******************** 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 LED = PORTA.0 '
Symbol miso = PORTC.2 'ISD1730 SPI MISO
Symbol ss = PORTC.3 'ISD1730 SLAVE SELECT
Symbol sclk = PORTC.1 'ISD1730 SPI CLOCK
Symbol mosi = PORTC.0 'ISD1730 SPI MOSI

'******************** INITIALIZATION *************************
initialize:

HIGH ss 'start with Slave Select HIGH
HIGH sclk 'start with SPI Clock HIGH
LOW MOSI 'start with MOSI LOW
LOW led


start: 'Initialize the ISD
GoSub isd_pu
PAUSE 50 '50 mS Power Up Delay (per datasheet)
GoSub isd_clr_int 'clear interrupt and EOM


'********************* MAIN PROGRAM **************************

main_loop: '(MAIN PROGRAM LOOP)

Playloop:
if porta.5 = 1 then play
goto playloop

Play:
high led ' LED for play

if porta.5 = 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 led
goto main_loop
end

'********************** 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_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