void SPI0_Init(void)
{
uint8_t i,Clear=Clear;//Clear=Clear:用这种语句形式解决编译产生的Waring:never used!
LPC_SYSCON->PRESETCTRL |= (0x1<<0); //禁止LPC_SSP0复位
LPC_SYSCON->SYSAHBCLKCTRL |= (0x1<<11);//允许LPC_SSP0时钟 bit11
LPC_SYSCON->SSP0CLKDIV = 0x01; //分频系数为1,使SPI0速率最大:48Mhz
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟(bit16)
LPC_IOCON->SCK_LOC = 0x02; //把SCK0复用到PIO0_6引脚
LPC_IOCON->PIO0_6 &= ~0x07;
LPC_IOCON->PIO0_6 |= 0x02; //把PIO0_6设置为SSP CLK
LPC_IOCON->PIO0_8 &= ~0x07;
LPC_IOCON->PIO0_8 |= 0x01; //把PIO0_8设置为SSP MISO
LPC_IOCON->PIO0_9 &= ~0x07;
LPC_IOCON->PIO0_9 |= 0x01; //把PIO0_9设置为SSP MOSI
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟(bit16)
// 8位数据传输,SPI模式, CPOL = 0, CPHA = 0,空闲时CLK为0,第一个上升沿采集数据,SCR = 0
LPC_SSP0->CR0 = 0x0007;
// 预分频值(注意:必须为偶数 2~254)
LPC_SSP0->CPSR = 0x02;
LPC_SSP0->CR1 &= ~(1<<0);//LBM=0:正常模式
LPC_SSP0->CR1 &= ~(1<<2);//MS=0:主机模式
LPC_SSP0->CR1 |= (1<<1);//SSE=1:使能SPI0
//清空RxFIFO,LPC1114收发均有8帧FIFO,每帧可放置4~16位数据
for ( i = 0; i < 8; i++ )
{
Clear = LPC_SSP0->DR;//读数据寄存器DR将清空RxFIFO
}
}
/*****************************************/
/* 函数功能:SPI0通信 */
/* 说明: 发送一个字节,接收一个字节 */
/*****************************************/
uint8_t SPI0_communication(uint8_t TxData)
{
while((LPC_SSP0->SR)&(1<<4));//忙时等待,SR状态寄存器bit4 BSY:忙时为1
LPC_SSP0->DR = TxData; //把要发送的数写入TxFIFO
while(!((LPC_SSP0->SR)&(1<<2)));//等待接收完,SR状态寄存器bit2 RNE:接收FIFO非空为1
return(LPC_SSP0->DR); //返回收到的数据
}
#include "LPC11xx.h"
#include "ssp.h"
#include "systick.h"
#define LED_ON LPC_GPIO0->DATA |= (1<<7)
#define LED_OFF LPC_GPIO0->DATA &= ~(1<<7)
/***************************************/
/*函数名称:延时函数*
* ************************************/
void delay(){
uint16_t i,j;
for(i=0;i<5000;i++)
for(j=0;j<200;j++); }
/**************************************/
//函数名称:LED灯初始化
/**************************************/
void led_init(){
LPC_GPIO0->DIR |= (1<<7);//把P0.7设置为输出引脚
LPC_GPIO0->DATA &=~(1<<7);//把P0.7设置为低电平
}
int main(void) {
SysTick_Config(SystemCoreClock/1000); // 间隔1ms进入SYSTICK中断
SSP0_Init();
led_init();
while(1) {
LED_ON;
delay();
LED_OFF;
delay();
SPI0_communication(0x88);
}
return 0 ;
}
|