This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to use ADuC812 SPI

Hello!
I tried to use the on-board SPI of the Analog Devices ADuC812
but I didn't managed it to work. No Data, no SCLK, the Pins
seemed all to be dead at all.
Maybe one of you can give me a hint or working sample code.

Thanks.

Here's some of my code:

// Initialize the SPI Interface

SPICON = 0x37;// configure SPI port for: 0011,0111 = 0x37
// Fosc/64, CPHA=1, CPOL=0, master
IE2 = 0x01; // enable SPI interrupt

EA = 1; // enable interrupts

...

void send_SPI(unsigned int byte)
{
SPIDAT = byte; // trigger data transfer
}


Parents
  • We are developing a project with ADuC812 in Federal University of Campina
    Grande, and I wish to communicate two microconverters using the SPI. I have
    some problems becouse with the flag ISPI becouse the flag don't change in
    the
    end of the transmission. Is necessary to use any interrupt routine for to
    use
    the flag ISPI? I need more information about this problem. I am sending my
    code
    used for transmit a caracter C and to monitore the change in flag ISPI. I
    noted
    that the flag don't change. Please look my code, is it wrong?
    Send me some information, and if possible change the code.
    If possible, answer me how I may to transmit a byte in a master(
    micriconverter) for a slave(microconverter).


    Sincerely,
    Jaidilson Jó.

    //Master

    #include <aduc812.h>
    #include <stdio.h>
    #define SPICON_MR 0x33

    sbit P3_5 = 0xB5;
    sbit P3_4 = 0xB4;

    int i;

    void main ()
    {
    P3_5 = 1;

    // Serial
    SCON = 0x50;
    TMOD = 0x20;
    TR1 = 1;
    TH1 = 0xFD;

    IE2 = 0x01;
    IE = 0x81;
    TCON = 0x01;
    IT0 = 1;
    SPICON = SPICON_MR;

    P3_5 = 0;
    P3_4 = 0;

    SPIDAT = 'C'; //writing a character C for to transmit

    while((SPICON & 0x80) == 0)
    {
    TI=0;
    SBUF='\n';
    while(TI != 1){}
    printf("%\n",SPICON);
    while(TI!=1) { }
    }

    TI=0;
    SBUF='\n';
    while(TI != 1){}
    printf("%\n",SPICON);
    while(TI!=1) { }

    P3_4 = 1;
    P3_5 = 1;


    }

Reply
  • We are developing a project with ADuC812 in Federal University of Campina
    Grande, and I wish to communicate two microconverters using the SPI. I have
    some problems becouse with the flag ISPI becouse the flag don't change in
    the
    end of the transmission. Is necessary to use any interrupt routine for to
    use
    the flag ISPI? I need more information about this problem. I am sending my
    code
    used for transmit a caracter C and to monitore the change in flag ISPI. I
    noted
    that the flag don't change. Please look my code, is it wrong?
    Send me some information, and if possible change the code.
    If possible, answer me how I may to transmit a byte in a master(
    micriconverter) for a slave(microconverter).


    Sincerely,
    Jaidilson Jó.

    //Master

    #include <aduc812.h>
    #include <stdio.h>
    #define SPICON_MR 0x33

    sbit P3_5 = 0xB5;
    sbit P3_4 = 0xB4;

    int i;

    void main ()
    {
    P3_5 = 1;

    // Serial
    SCON = 0x50;
    TMOD = 0x20;
    TR1 = 1;
    TH1 = 0xFD;

    IE2 = 0x01;
    IE = 0x81;
    TCON = 0x01;
    IT0 = 1;
    SPICON = SPICON_MR;

    P3_5 = 0;
    P3_4 = 0;

    SPIDAT = 'C'; //writing a character C for to transmit

    while((SPICON & 0x80) == 0)
    {
    TI=0;
    SBUF='\n';
    while(TI != 1){}
    printf("%\n",SPICON);
    while(TI!=1) { }
    }

    TI=0;
    SBUF='\n';
    while(TI != 1){}
    printf("%\n",SPICON);
    while(TI!=1) { }

    P3_4 = 1;
    P3_5 = 1;


    }

Children
No data