#include <lpc21xx.h>
void pll_init(void);
extern unsigned char rd[5];
int main()
{
//INITIALIZE THE PLL AND SET CCLK = PCLK = 12Mhz
pll_init();
//SPI ROUTINES
spi_init();
spi_write("lucky");
}
void pll_init(void)
{
PLLCFG = 0X00000060;
PLLCON = 0X00000001;
PLLFEED = 0X000000AA;
PLLFEED = 0X00000055;
while(!(PLLSTAT&0X00000400));
PLLCON = 0X00000003;
PLLFEED = 0X000000AA;
PLLFEED = 0X00000055;
VPBDIV = 0X09;
}
------------------------------------------------------------------
SPI CODE
------------------------------------------------------------------
#include <lpc21xx.h>
#include "spi.h"
#define READ 0x03 // WRITE LATCH ENABLE
#define WRITE 0x02 // WRITE DATA (PROGRAM)
#define WRDI 0x04 // RESET WRITE ENABLE
#define WREN 0x06 // READ DATA FROM MEMORY
#define RDSR 0x05 // READ STATUS REGISTER
#define WRSR 0x01 // WRITE STATUS REGISTER
#define SPIF 1 << 7
unsigned char rd[5];
void spi_init(void)
{
PINSEL0 = 0x00005500; // SELECTING SPI MODE
S0SPCCR = 0x78; // 100KHZ
S0SPCR = 0x20; // MASTER MODE WITH 8-BITS PER TRANSFER
//IODIR0 = 0x00000080; // DECLARING SSEL0 AS AN OUTPUT
}
unsigned char spi_tx_rx(unsigned char val)
{
S0SPDR = val;
while((S0SPSR & SPIF)==0);
return S0SPDR;
}
void spi_write(unsigned char *val)
{
spi_tx_rx(WREN);
spi_tx_rx(WRITE);
spi_tx_rx(0X00); //ADDRESS: HIGHER BYTE
spi_tx_rx(0X00); //ADDRESS: LOWER BYTE
spi_tx_rx(0X00);
while(*val)
{
spi_tx_rx(*val++);
}
wait();
}
void spi_read()
{
int i;
spi_tx_rx(READ);
spi_tx_rx(0X00); //ADDRESS: HIGHER BYTE
spi_tx_rx(0X00); //ADDRESS: LOWER BYTE
for(i=0;i<5;i++)
{
rd[i] = spi_tx_rx(0x00);
wait();
}
}
/*
void write(unsigned char *dataa)
{
while(*dataa)
spi_write(*dataa++);
}
void read(void)
{
int i;
spi_read();
for(i=0;i<5;i++)
{
rd[i] = spi_read();
wait();
}
}
*/
void wait()
{
int j;
for(j=0;j<50000;j++);
}