int main(void)
{
Main_Init();
//复用功能位先清0以便重新设置 P14_AIN4_SPI0SS 这些值都是1的值,取反就是写0了.
P1_MFP &= ~(P14_AIN4_SPI0SS |P15_AIN5_SPI0MOSI |P16_AIN6_SPI0MISO |P17_AIN7_SPI0CLK) ;
//设置P1口的SPI0复用功能
P1_MFP |= (SPI0SS | SPI0MOSI |SPI0MISO |SPI0CLK) ;
//SPI0 Clock Enable SPI 0时钟使能
APBCLK |= SPI0_CLKEN;
//设为0,主机模式 SPI_MODE_SLAVE的值为1,所以~(1<<18) ,就是设0
SPI0_CNTRL &= ~SPI_MODE_SLAVE;
//设0,为高位先传.LSB_FIRST的值是1,取反就是设0.
SPI0_CNTRL &= ~LSB_FIRST;
//时钟极性 设0,低电平闲置. CLKP_IDLE_H的值是1,取反就是设0
SPI0_CNTRL &= ~CLKP_IDLE_H; //CLKP = 0, SCLK Idel Low
//Tx_NEG = 1, The SDO signal is changed on the falling edge.下降沿改变数据
SPI0_CNTRL |= TX_NEG_F;
//Rx_NEG = 0, The SDI signal is latched on the rising edge. 上升沿接收.
SPI0_CNTRL &= ~RX_NEG_F;
//HCLK_N = 4, Pclk = SYSclk/(HCLK_N+1) 设置SPI时钟分频,下面设4,就是4+1.就是1/5 系统时钟.
CLKDIV |= 4;
while(1)
{
SPI0_TX0 = 0x0f; //发送一个0x0F的数据,8个LED上将显示一半.
SPI0_CNTRL |= GO_BUSY; //写入1,表示正在传送数据/
while(SPI0_CNTRL&GO_BUSY); //等待传送完毕,硬件自动清0.
P36_DOUT=~P36_DOUT; //这个芯唐开发板上的LED灯,我通常程序里都加这个,来表示是否在运行.
Delay(500000);
SPI0_TX0 = 0xf0; //发送一个0x0F的数据,8个LED上将显示另一半.
SPI0_CNTRL |= GO_BUSY; //写入1,表示正在传送数据/
while(SPI0_CNTRL&GO_BUSY); //等待传送完毕,硬件自动清0.
Delay(500000);
}
}
|