I am into a project where I need 2 establish communication between ADuc814(Master) and ADuc841(Slave). Master shud Receive data transmitted by Slave. I am unable to establish the comm. I feel there is no response 4rm slave as though master generates the clock and SS pin is low, slave does not response. Is it necessary that both master and slave should operate in same CLOCK?? For Hardware connection, MOSI, MISO, SCLK and SS pins of Master and Slave are connected. Foll is the code Master Code
#include <ADUC814.H> unsigned char Data[20]; //Store SPI Rx data in Memory void Uart_Tx(unsigned char AsciData); //Serial Tx sbit SS = 0xB5; void main() { char i; PLLCON = 0x00; //Core Clk = 16.6777MHz //////////baud 0f 4800//////// RCAP2H = -1; RCAP2L = 0x92; TH2 = -1; TL2 = 0x92; SCON = 0x50; T2CON = 0x34; ////////////////////////////// CFG814 = 0x01; // Enable P3.5,6,7 for SPI SPICON = 0x37; // Master, CPOH=1,CPOL=0 SS = 0; // Slave Select Enable for(i=0;i<20;i++) { SPIDAT = 0x00; // SPI Clock Generate while(!ISPI); ISPI = 0; Data[i] = (unsigned char)SPIDAT; } /////////Serial Tx SPI Data into UART////////// for(i=0;i<20;i++) { Uart_Tx(Data[i]); Uart_Tx('\n'); } ///////////////////////////////////////////// }
Slave Code, ADuC841
void main() { char i; SPICON = 0x24; // Slave, CPOH=1, CPOL=0 for(i=0;i<20;i++) { SPIDAT = 0x38; /*Transmit Dummy Data, Asci of '8' while(!ISPI); ISPI = 0; } }
Friendzzzz Please Help.........
{ SPIDAT = 0x38; /*Transmit Dummy Data, Asci of '8'
Instead of the magic number, why not write '8' and remove the need to comment:
{ SPIDAT = '8'; // Transmit Dummy Data
More useful as a comment would be why '8' was chosen...
//////////baud 0f 4800////////
This use of '/' looks very dodgy - it's relying upon the compiler taking the first two as a "//" comment-introducer, but then not complaining about the next two as a nested comment...
This code isn't legible either.
Where does the following comment end?
{ SPIDAT = 0x38; /*Transmit Dummy Data, Asci of '8' while(!ISPI); ISPI = 0; }
and why:
while(!ISPI); ISPI = 0;
instead of:
while (!ISPI) ; ISPI = 0;
so that it is clearly visible that the while loop is empty, and that the assign is expected to be made after the while loop ends?
It would be better to reply in this thread - as the code posted in the other one is illegible.
Of course, rather than create a new thread, it would have been more sensible if Jaydeep Krishna had just updated the original one.
Or, having created a new one, if he had at least put a note in the old one to explain!
make all replies at http://www.keil.com/forum/docs/thread11431.asp
this is a double post, it will get totally confoosing if the replies get 'distributed'.
Erik
View all questions in Keil forum