SPI using LPC2148 (ARM):
Data Transfer Controller to Controller:
Master Mode:
void clk_init()
{
PLL0CON = 0x01;
PLL0CFG = 0x24;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
while(!(PLL0STAT & (1<<10)));
PLL0CON = 0x03;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
}
int main()
{
clk_init();
PINSEL0 = 1<<8 | 1<<10 | 1<<12 | 0x5;
IO0DIR = 1<<2;//cs
U0LCR = 0x83;
U0DLL = 97;
U0DLM = 0;
U0LCR = 0x03;
IO0SET = 1<<2;
S0SPCCR = 8;
S0SPCR = 0x864;
IO0CLR = 1<<2;
S0SPDR = 'A';
while(!(S0SPSR & (1<<7)));//monitor SPIF
}
Slave Mode:
#include<lpc214x.h>
#define SPIF 7
#define TEMT 6
#define PLLE 0
#define PLLC 1
#define PLOCK 10
#define DLAB 7
void pll0_init()
{
PLL0CON = 0x01;
PLL0CFG = 0x24;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
while(!(PLL0STAT & (1<<10)));
PLL0CON = 0x03;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
VPBDIV=0x00;
}
void uart0_init()
{
U0LCR = 0x83;
U0DLL = 97;
U0DLM = 0;
U0LCR = 0x03;
}
int main()
{
pll0_init();
uart0_init();
IO0DIR|=(0xff<<10);
PINSEL0 = 1<<8 | 1<<10 | 1<<12 | 0x5 | 1<<14;
S0SPCR = 0x804;
while(!(S0SPSR & (1<<SPIF)));//monitor SPIF
IO0SET= IO0SET|(S0SPDR<<10);
}
Simulation:
Second Program:
MASTER Mode:
#include<lpc214x.h>#define SPIF 7
#define TEMT 6
#define PLOCK 10
#define PLLE 0
#define PLLC 1
#define DLAB 7
void uart0_init()
{
PINSEL0|=5;
U0LCR=0x83;
U0DLL=97;
U0DLM=0x00;
U0LCR=U0LCR&~(1<<DLAB);
}
void pll0_init()
{
PLL0CFG=0x24;
PLL0CON=PLL0CON|(1<<PLLE);
PLL0FEED=0xAA;
PLL0FEED=0x55;
//PLL0CON=PLL0CON|(1<<PLLC);
while( (PLL0STAT & (1<<PLOCK))==0);
PLL0CON=PLL0CON|3;
PLL0FEED=0xAA;
PLL0FEED=0x55;
VPBDIV=0x00;
}
void spi0_init()
{
PINSEL0 |=0x5505;// 1<<8 | 1<<10 | 1<<12 | 0x5;
IO0DIR = 1<<2;//cs
IO0CLR = 1<<2;
IO0DIR|=(0xff<<10);
S0SPCCR = 16;
S0SPCR = 0x864;
IO0CLR = 1<<2;
}
int main()
{
pll0_init();
//uart0_init();
spi0_init();
S0SPDR = 'A';
while(!(S0SPSR & (1<<SPIF)));//monitor SPIF
//IO0SET= IO0SET|(S0SPDR<<10);
U0THR = S0SPDR;
while(!(U0LSR & (1<<TEMT)));
}
SLAVE Mode:
#include<lpc214x.h>
#define SPIF 7
#define TEMT 6
#define PLLE 0
#define PLLC 1
#define PLOCK 10
#define DLAB 7
void pll0_init()
{
PLL0CON = 0x01;
PLL0CFG = 0x24;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
while(!(PLL0STAT & (1<<10)));
PLL0CON = 0x03;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
VPBDIV=0x00;
}
void uart0_init()
{
U0LCR = 0x83;
U0DLL = 97;
U0DLM = 0;
U0LCR = 0x03;
}
int main()
{
pll0_init();
//uart0_init();
IO0DIR|=(0xff<<10);
PINSEL0 = 1<<8 | 1<<10 | 1<<12 | 0x5 | 1<<14;
S0SPCR = 0x844;
//S0SPDR = 'B';
while(!(S0SPSR & (1<<SPIF)));//monitor SPIF
IO0SET= IO0SET|(S0SPDR<<10);
//U0THR = S0SPDR;
//while(!(U0LSR & (1<<TEMT)));
}
0 comments:
Post a Comment
if you have any doubt please let me know