📄 lpc_lib_spi.c~
字号:
/*
***********************************************************************
Embest Info&Tech Co., Ltd. All rights reserved.
www.embedinfo.com
***********************************************************************
---------------- file information -------------------------------------
file name: lpc_lib_spi.c
version : v0
author : peter pan / panqan@hotmail.com
begin : 2006-02-10
finish : 2006-02-10
define : lpc spi controll functions
notes :
---------------- modify information -----------------------------------
version :
modify :
begin :
finish :
define :
-----------------------------------------------------------------------
*/
// (--------------------- compiler condition --------------------------
/*
#ifdef xxx
#define xxx
#endif
*/
// --------------------- compiler condition --------------------------)
/*-------------------------------------------------------------------*/
/* include files */
/*---------------------------------------------------------------- --*/
#include "lpc_lib_spi.h"
/*-------------------------------------------------------------------*/
/* variable define */
/*-------------------------------------------------------------------*/
/*
INT32U XXXXXX;
*/
/*-------------------------------------------------------------------*/
/* extern function declare */
/*-------------------------------------------------------------------*/
/*--- define in XXX.c ---
extern void XXX();
*/
/*-------------------------------------------------------------------*/
/* extern variable declare */
/*-------------------------------------------------------------------*/
/*--- USED in XXX() ---
XXX SSS; // used inXXX()
*/
/*-------------------------------------------------------------------*/
/* function code */
/*-------------------------------------------------------------------*/
/**********************************************************************
* name : xxxxx
* func : xxxxx
* para : xxxx
* ret : xxxx
* glob : xxxx
* inc :
* author:
* date :
* modify:
* comment:
**********************************************************************/
/*void xxx(xxx xxx)
{
}
*/
/**********************************************************************
* name : spi_init
* func : spi bus init
* para : channel: 0/1
mode: 0-slave
1-master
onoff: 0-off to gpio
1-on
* ret : none
* glob : xxxx
* inc :
* author:
* date :
* modify:
* comment:
**********************************************************************/
void spi_init(INT8U channel, INT8U mode, INT8U onoff)
{
INT32U i,j;
if (0==channel)
{
if (0==onoff)
{ //off the spi
//set to input
i = PINSEL0;
i &= (~SPI0_EN);
i |= SPI0_EN_MASK;
PINSEL0 = i;
//set pin to gpio
//set to input
}
else
{ //on the spi
if (1==mode)
{ //master mode
//set pin to spi
i = PINSEL0;
i &= (~SPI0_EN_MASK);
i |= SPI0_EN;
PINSEL0 = i;
//for 7843
// //set 7843 to GPIO
i = PINSEL1;
i &= (~P0_X__GPIO_7843_MASK);
i |= P0_X__GPIO_7843;
PINSEL1 = i;
//set SPCR for 7843
SPI0_SPCR = SPCR_SPI_7843;
//set clock
SPI0_SPCCR=78
//for 7843
//set spi to master
//set p0.24 to GPIO
i = PINSEL1;
i &= (~P0_24__GPIO_024_MASK);
i |= P0_24__GPIO_024;
PINSEL1 = i;
//set GPIO024 output
i = IODIR0;
i |= (0x01<<24);
IODIR0 = i;
//set output to 1
i = IOSET0;
i |= (0x01<<24);
IOSET0 = i;
//set clock
// SPI0_SPCCR = SPI_SPCCR_value_max;
//testing audio cs4334
SPI0_SPCCR=78;
//set SPCR
SPI0_SPCR = SPCR_SPI_595;
}
else
{ //slave mode
}
}
}
else if (1==channel)
{
}
}
/**********************************************************************
* name : spi_send
* func : spi bus send byte
* para : chr --in, send value
* ret : none
* glob : xxxx
* inc :
* author:
* date :
* modify:
* comment:
**********************************************************************/
void spi_send(INT8U channel, INT8U data_send)
{
if (0==channel)
{ //spio
SPI0_SPDR = data_send; //。发送数据通过将数据写入该寄存器来实现
while( 0==(SPI0_SPSR & 0x80) ); //最高位为1 时表示一次SPI 数据传输完成
//一直等到传输完成
}
else
{ //spi1
SPI1_SPDR = data_send;
while( 0==(SPI1_SPSR & 0x80) );
}
}
void spi_receive(INT8U channel)
{
INT8U data_receive
if (0==channel)
{ //spio
while( 1==(SPI0_SPSR & 0x80) ); //。发送数据通过将数据写入该寄存器来实现
//最高位为1 时表示一次SPI 数据传输完成
data_receive= SPI0_SPDR; //一直等到传输完成
return(data_receive);
}
else
{ //spi1
while( 1==(SPI1_SPSR & 0x80) );
data_receive= SPI1_SPDR;
return(data_receive);
}
}
/**********************************************************************
* name : spi_data_send
* func : spi bus send byte
* para : channel
chr --in, send value
* ret : none
* glob : xxxx
* inc :
* author:
* date :
* modify:
* comment:
**********************************************************************/
void spi_data_send(INT8U channel, INT8U data_send)
{
if (0==channel)
{
//spi0 init on
spi_init(0, 1, 1);
//data send
spi_send(0, data_send);
//return
}
if (1==channel)
{
//spi0 init on
spi_init(1, 1, 1);
//data send
spi_send(1, data_send);
//return
}
void spi_data_receive(INT8U channel)
{
if (0==channel)
{
//spi0 init on
spi_init(0, 1, 1);
//data send
spi_receive(0);
//return
}
if (1==channel)
{
//spi0 init on
spi_init(1, 1, 1);
//data send
spi_receive(1);
//return
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -