[讨论] 救火车和你一起学ARM 系列活动之九

救火车   2009-7-16 16:16 楼主
救火车和你一起学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上拉

电路图.bmp



[ 本帖最后由 救火车 于 2009-7-16 16:21 编辑 ]
我是有火救火,无火灌水的救火车 救火车单片机工作室 http://www.qm999.cn

回复评论 (22)

学习来了,多谢楼主分享
点赞  2009-7-18 17:24
学习来了,多谢楼主分享
点赞  2009-7-19 14:09

回复 楼主 救火车 的帖子

学习  楼主好作为
生活在激情中 ... 希望 哈哈 https://home.eeworld.com.cn/?80086
点赞  2009-7-20 09:07
学习下!支持!
喜欢单片机的请加群48811593(500人超级群)
点赞  2009-7-20 13:19
灰常感谢LZ,收益良多!!1
学无止境!谢谢大家!
点赞  2009-7-23 17:06
这个活动很不错了,可是我现在需要一些这样的工具
点赞  2009-7-27 13:17

回复 楼主 救火车 的帖子

learning...
点赞  2009-8-18 23:47
很好....我学习了.
点赞  2009-8-21 12:18
学习下,
点赞  2009-8-30 23:34

火车兄弟

能不能给俺讲点有难度的活动啊?
点赞  2009-9-18 16:57

救火车和你一起学ARM 系列活动之九

学习来了,多谢楼主分享
点赞  2009-9-19 10:35
为什么就这样结束了……我还想继续学习更多的东西呀,真舍不得
点赞  2009-9-25 08:53

回复 13楼 shishishi 的帖子

救火车最近忙着自己新公司注册的事情,十一后还会继续的,敬请期待啊
加油!在电子行业默默贡献自己的力量!:)
点赞  2009-9-25 08:57

回复 13楼 shishishi 的帖子

可以讲你的问题提出 大伙一块帮忙啊
加油!在电子行业默默贡献自己的力量!:)
点赞  2009-9-25 08:57
支持,支持,楼主
点赞  2009-10-3 18:45
发现的比较晚了,不过还好,学习不来的及
点赞  2009-10-6 19:10
好贴!分享了~
开源机器人小组介绍:https://bbs.eeworld.com.cn/thread-330292-1-1.html
点赞  2009-10-24 21:42
学习!顶起来!!!
点赞  2009-12-17 09:31
学习!顶起来!!!
点赞  2009-12-17 09:33
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复