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

LPC2136 SPI0 not working

hello friends,

i am using arm7 lpc2136 to make communication via SPI with a graphic lcd. for some reason this code is not working (SPI is not sending), i do not receive any error from the compiler keil-v5 however the microcontroller does not work.

XTAL=24MHZ

Main function:

#include "LPC213X.h"
#include <stdint.h>
#include "lcd.h"
#define PIN021 21

extern void init_PLL(void);
extern void init_gpiox(void);
extern void SPI_init(void);
//extern  unsigned char SFEFlame[];
//extern        unsigned char carita_feliz[];
extern void initlcd(void);

void delay(void);

int main(void)
{
        int i;
        init_PLL();
        init_gpiox();
        SPI_init();
//      initlcd();
        delay();

        while(1){

        IOCLR0 |= 1UL<<PIN021;                                                            //Chip disable P0.21
        delay();
        IOSET0 |= 1UL<<PIN021;                                                            //Chip enable P0.21
        delay();

        S0SPDR ='A';


}



        //return 0;
}

void delay(void)
{
        uint32_t i;
        for(i=0;i<=32000;i++);
}

PLL function:

void init_PLL(void)
{
        /***********************
        **
        **      CCLK = M * FOSC
        **      CCLK = FCCO / (2*P)
        **
        ***********************/


// XTAL=24MHZ CCLK=48MHZ PLLCFG = 0x00000021; //M (bist[4:0]) = 1, P (bits [6:5])= 2; PLLCON = 0x00000001; //enable PLL PLLFEED = 0x000000AA; PLLFEED = 0x00000055; while (!(PLLSTAT & 0x00000400)); //Esperar hasta que el PLL este locked PLLCON = 0x00000003; //Conectar el PLL PLLFEED = 0x000000AA; //Actualizar registro de oscilador PLLFEED = 0x00000055; //VPBDIV = 0x00000002; // VLSI perifericos CCLK/2 = 12Mhz
}

GPIO_config function:

void init_gpiox(void)
{
                /*                      D/C PANTALLA LCD_TFT             = GPIO1.31
                **                      CS  PANTALLA LCD_TFT             = GPIO1.26
                **                      RESET PANTALLA LCD_TFT   = GPIO0.31
                **                      //IOSET0 |=  (1<< DC_TFT);                Para encender bit 26
                **                      //IOSET0 |= (1<< RESET_TFT);      Para encender bit 31
                *******************************************/

                IO0PIN=0X00000000;
                IO0DIR=0XFFFFFFFF;              //Puertos configurados como salidas
//              IODIR0 |= 0xffffffff;                    //Puertos configurados como salidas
//              IOSET0  = 0xffffffff;
 //   IOCLR0  = 0xffffffff;                     //Puertos configurados salida en bajo

                IO1PIN=0X00000000;
                IO1DIR  = 0xffffffff;                    //Puertos configurados como salidas
//      IOSET1  = 0xffffffff;
//   IOCLR1  = 0xffffffff;                      //Puertos configurados salida en bajo

}

SPI0 function:

void SPI_init(void)
{
        IO0PIN |=0x1500;                //Habilitar funciones de SPI
//      IODIR0 |= 0X80;                                 /* SSEL is output */
        IOSET0 |=0X80;                            /* set SSEL to high */
        S0SPCCR=200;            //Setear maxima velocidad para SPI 48Mhz ---> 48khz
        S0SPCR=0x0824;          //Seleccionar como master
}

Parents
  • If the microcontroller itself does not work, that's a hardware fault.

    Presumably, you really mean that your code is not producing the results that you wanted?

    So the standard 3 questions are:

    1. What, exactly, did you expect the code to do?

    2. What, exactly, is the code actually doing?

    3. What investigation / testing / debugging have you done to find the problem?

Reply
  • If the microcontroller itself does not work, that's a hardware fault.

    Presumably, you really mean that your code is not producing the results that you wanted?

    So the standard 3 questions are:

    1. What, exactly, did you expect the code to do?

    2. What, exactly, is the code actually doing?

    3. What investigation / testing / debugging have you done to find the problem?

Children
  • Hello Andrew, answering your questions, I have already confirmed the microcontroller with a simple application and responds well to changes in the input / output ports.

    However, the function that stops the operation of the microcontroller is the function PLL when trying to use external oscillator the code does not work.

    I have removed the PLL function in the code and I see the high and low changes in P0.21 however I do not see data output by the SPI.

    Regards,