|
|
View previous topic :: View next topic |
Author |
Message |
uni_student
Joined: 01 Aug 2007 Posts: 38 Location: AUckland, NEW ZEALAND
|
Trouble with spi from PIC18F452 -> VS1002d (dsp) |
Posted: Wed Aug 01, 2007 8:13 pm |
|
|
First attempt at anything using SPI. Im following a test application that is described with the application notes on the VS1002d dsp. Using PIC as master, using 12.288Mhz clock for the dsp.
I am unsure what baud rate i should be setting?
And the following code is not working.
DREQ is working so only the first "LED" is lighting up.
Any help appreciated.
[#include <18f452.h>
#device ICD=TRUE
#fuses HS,NOLVP,NOWDT
#use delay (clock=20000000)
#use RS232 (baud=4800, xmit=PIN_C5, rcv=PIN_C4)
#define DREQ PIN_E2
#define xCS PIN_C1
#define LED PIN_A1
#define LED2 PIN_A2
#define LED3 PIN_A3
#define RESET PIN_C0
void main(){
int value, value2;
setup_spi(spi_master | spi_l_to_h | spi_clk_div_16);
set_tris_e(0xFF); //??
set_tris_c(0x10); //??
value = 0;
value2 = 0;
output_high(RESET);
output_low(xCS);
while(TRUE){
if(input(DREQ)){
output_high(LED);
spi_write(0x2);
spi_write(0xB);
spi_write(0xA2);
spi_write(0xF5);
delay_us(5);
output_high(xCS);
delay_us(5);
output_low(xCS);
spi_write(0x3);
spi_write(0xB);
value = spi_read(0x22);
value2 = spi_read(0x33);
delay_us(5);
output_high(xCS);
while (TRUE) {
if(value == 0xA2){
output_high(LED2);
}
if(value2 == 0xF5){
output_high(LED3);
}
}
}
}
}
] |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Aug 01, 2007 8:31 pm |
|
|
Quote: | #use RS232 (baud=4800, xmit=PIN_C5, rcv=PIN_C4) |
Pins C4 and C5 are used by the hardware SPI module. Don't use them
for the UART. Use the hardware UART pins. Also add the ERRORS
directive. Example:
Code: | #use RS232 (baud=4800, xmit=PIN_C6, rcv=PIN_C7, ERRORS) |
Also change the wiring on your board so it uses the hardware UART pins.
Quote: | set_tris_e(0xFF); //??
set_tris_c(0x10); //?? |
Don't bother setting the TRIS. Let the compiler do it for you.
In "standard i/o" mode (the default mode), if you use the CCS pin i/o
functions, such as output_low(), etc., the compiler will set the correct
TRIS automatically. Delete those two lines.
Quote: | setup_spi(spi_master | spi_l_to_h | spi_clk_div_16); |
Check the DSP data sheet and see what SPI mode it uses.
See my post in this thread, which tells how to easily setup the correct
SPI mode:
http://www.ccsinfo.com/forum/viewtopic.php?t=31271
Quote: | value = spi_read(0x22);
value2 = spi_read(0x33); |
I'm not sure what you're doing here. I haven't read the DSP data sheet.
Be aware that as the spi_read() is performed and data is shifted in from
the DSP, the 1st line will shift out 0x22 to the DSP and the 2nd line will
shift out 0x33. Normally, a parameter of 0x00 is used with the
spi_read() statement. That's because only a one-way transfer of data
is performed, from the SPI slave to the master (the PIC), so you just
set the shift-out data to 0x00. Carefully read the DSP spec and make
sure if you're supposed to do this (shift out 0x22 and 0x33), or to do it
during an SPI read. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|