救火车和你一起学ARM 系列活动之九
----SPI接口实验
这回我们来研究一下SPI接口的应用。SPI接口的工作方式:当主机向从机发送完一个字节,同时也会收到从机发过来的一个字节。即主机数据寄存器和从机的数据寄存器做了一次数据互换。
我们用LPC2103做为主面,选择了74HC595作为从机来研究SPI接口。
主要寄存器介绍
S0SPCR SPI控制寄存器(共8个位)
第2:0位:保留
第3位:CPHA 时钟相位控制位。该位为1时,数据在SCK的第二个时钟沿采样;该位为0时在第一个时钟沿采样。用74HC595时,该位选0(看74HC595 DATASHEET的真值表或时序图可知)
第4位:CPOL 时钟极性位。该位为1时,SCK低有效(上升沿);该位为0时SCK高有效(下降沿)。用74HC595时,该位选1(看74HC595 DATASHEET的真值表或时序图可知).
第5位:MSTR 主模式选择。该位为1时,SPI为主模式;该位为0时SPI为从模式。用74HC595时ARM为主,595为从,此位选1。
第6位:LSBF字节移动方各。该位为1时低位先出,数据字节第0位先移出;该位为0时高位先出,数据字节的第7位先移出。
第7位:SPI中断使能。该位为1时,SPIF或MODF置位会产生硬件中断;该位为0时SPI中断被禁止。
最后,确定S0SPCR的初如值是0x30
S0SPSR 状态寄存器
S0SPDR 数据寄存器 用此寄存器进行主机、从机之间的数据互换
S0SPCCR SPI时钟分频寄存器
SPI时钟频率= pclk / S0SPCCR
取值要求:S0SPCCR必须是≥ 8的偶数
S0SPINT 中断寄存器
实验程序
我们要做出的效果是:编程向74HC595不断刷新,点亮595输出的发光二极管,实现流水灯效果。
//初始化SPI0
void Init_SPI0(void)
{ //S0SPCCR
PINSEL0 = 0x00005500;
S0SPCCR = 0x52; // 设置SPI时钟分频
S0SPCR = 0x30; // 设置SPI,SPI主模式,SCK上升沿有效
}
//SPI主机发一个字节
unsigned char Send_SPI(unsigned char data)
{
SPI_CS_CLR0; //片选管脚清0
S0SPDR = data;
while( 0==(S0SPSR&0x80) ); // 等待数据发送完毕
SPI_CS_SET1; //片选管脚置1
return(S0SPDR);
}
int main (void)
{
unsigned char i,j;
unsigned char Byte_595;
__disable_interrupt();
#ifdef FLASH
MEMMAP_bit.MAP = 1;
#else
MEMMAP_bit.MAP = 2;
#endif
Init_VPB_PLL();
//Init_T0(); //初始化定时器0
//Init_uart0();
//I2C_Init(); //new
__enable_interrupt();
Init_SPI0();
IODIR |= (1 << (SPI_CS_PIN));
while(1)
{
Byte_595=0x01;
for (j=0;j<8;j++) //流水灯右移
{
for (i=0;i<10;i++) delay_us(10000); //延时 100毫秒
Send_SPI(Byte_595);
Byte_595<<=1;
}
Byte_595=0x80;
for (j=0;j<8;j++) //流水灯右移
{
for (i=0;i<10;i++) delay_us(10000); //延时 100毫秒
Send_SPI(Byte_595);
Byte_595>>=1;
}
}
}
原理图
注意:作为主机SSEL 引脚加10K上拉
[
本帖最后由 救火车 于 2009-7-16 16:21 编辑 ]
我是有火救火,无火灌水的救火车
救火车单片机工作室
http://www.qm999.cn
回复 楼主 救火车 的帖子
学习 楼主好作为
生活在激情中 ... 希望 哈哈
https://home.eeworld.com.cn/?80086
学习下!支持!
喜欢单片机的请加群48811593(500人超级群)
回复 楼主 救火车 的帖子
learning...
救火车和你一起学ARM 系列活动之九
学习来了,多谢楼主分享
为什么就这样结束了……我还想继续学习更多的东西呀,真舍不得
回复 13楼 shishishi 的帖子
救火车最近忙着自己新公司注册的事情,十一后还会继续的,敬请期待啊
回复 13楼 shishishi 的帖子
可以讲你的问题提出 大伙一块帮忙啊
好贴!分享了~
开源机器人小组介绍:https://bbs.eeworld.com.cn/thread-330292-1-1.html