查看: 1377|回复: 3

[原创] 【赚周年币】sam4s16c的寄存器配置基础教程---SPI配置

[复制链接]
  • TA的每日心情
    奋斗
    2021-7-30 11:40
  • 签到天数: 1792 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2016-12-1 10:50:56 | 显示全部楼层 |阅读模式
    分享到:
    最近项目涉及到和供应商合作,之前用atmel studio不能继续用了,不得不改用keil,于是潜水了一段时间,静下来仔细分析Datasheet,终于完成了,几乎所有外设驱动的寄存器配置,可以直接用于sam4s系列。看不懂的自己仔细研究Datasheet吧。个人的爱好是喜欢寄存器直接配置。
    看官方的库,太乱,太累。
    不喜欢拿来主义。
    第四部分
    配置SPI
    首先要使能IO口的时钟,如使能PIOA口,操作如下
    PMC->PMC_PCER0 = 1 << ID_PIOA;第二,关闭IO口的功能
            PIOA->PIO_IDR |= (0xf << 11) | (1 << 31); //PA11,12,13,14,31
    第三,选择外设
            ul_sr = PIOA->PIO_ABCDSR[0];
            PIOA->PIO_ABCDSR[0] &= (~ul_mask & ul_sr);


            ul_sr = PIOA->PIO_ABCDSR[1];
            PIOA->PIO_ABCDSR[1] &= (~ul_mask & ul_sr);
    第四,禁止上拉
            PIOA->PIO_PUDR |= (0xf << 11) | (1 << 31);
            




    下面开始SPI的设置(本次使用是2个片选)
    首先,使能时钟
    PMC->PMC_PCER0 = 1 << ID_SPI;

    第二配置控制寄存器
            
    SPI->SPI_CR = SPI_CR_SPIDIS | SPI_CR_SPIEN;
            SPI->SPI_CR = SPI_CR_SWRST;
            SPI->SPI_CR = SPI_CR_LASTXFER;
    第三,配置模式寄存器
            SPI->SPI_MR |= SPI_MR_LLB;
            SPI->SPI_MR |= SPI_MR_MSTR;
            SPI->SPI_MR |= SPI_MR_MODFDIS;
            SPI->SPI_MR &= (~SPI_MR_PCS_Msk);
            SPI->SPI_MR |= SPI_MR_PCS(SPI_CHIP_SEL);
    第四,写保护寄存器置位
            SPI->SPI_WPMR = 0;
    第五,片选寄存器设置        
            SPI->SPI_CSR[SPI_CHIP_SEL] |= SPI_CSR_CPOL;
            SPI->SPI_CSR[SPI_CHIP_SEL] &= (~SPI_CSR_NCPHA);
            SPI->SPI_CSR[SPI_CHIP_SEL] &= (~SPI_CSR_BITS_Msk);
            SPI->SPI_CSR[SPI_CHIP_SEL] |= SPI_CSR_BITS_12_BIT;
            SPI->SPI_CSR[SPI_CHIP_SEL] &= (~SPI_CSR_SCBR_Msk);
            SPI->SPI_CSR[SPI_CHIP_SEL] |= SPI_CSR_SCBR(30);
            
            SPI->SPI_CSR[SPI_CHIP_SEL] &= ~(SPI_CSR_DLYBS_Msk | SPI_CSR_DLYBCT_Msk);
            SPI->SPI_CSR[SPI_CHIP_SEL] |= SPI_CSR_DLYBS(SPI_DLYBS)
                            | SPI_CSR_DLYBCT(SPI_DLYBCT);
            //片选1
            SPI->SPI_CSR[SPI_CHIP1_SEL] &= (~SPI_CSR_CPOL);
            SPI->SPI_CSR[SPI_CHIP1_SEL] |= SPI_CSR_NCPHA;
            SPI->SPI_CSR[SPI_CHIP1_SEL] &= (~SPI_CSR_BITS_Msk);
            SPI->SPI_CSR[SPI_CHIP1_SEL] |= SPI_CSR_BITS_8_BIT;
            SPI->SPI_CSR[SPI_CHIP1_SEL] &= (~SPI_CSR_SCBR_Msk);
            SPI->SPI_CSR[SPI_CHIP1_SEL] |= SPI_CSR_SCBR(120);
            SPI->SPI_CSR[SPI_CHIP1_SEL] &= ~(SPI_CSR_DLYBS_Msk | SPI_CSR_DLYBCT_Msk);
            SPI->SPI_CSR[SPI_CHIP1_SEL] |= SPI_CSR_DLYBS(SPI_DLYBS)
                            | SPI_CSR_DLYBCT(SPI_DLYBCT);
            
    第六,使能SPI功能        
            SPI->SPI_CR |= SPI_CR_SPIEN;
    第七,设置默认片选        
            SPI->SPI_MR &= (~SPI_MR_PCS_Msk);
            SPI->SPI_MR |= SPI_MR_PCS(SPI_CHIP_SEL);

    本次没有加中断,请大家自行研究
    水平有限,请大家多指点,谢谢!
    后续还有很多外设的寄存器配置教程,请大家关注。。。。。。。

    评分

    参与人数 1 +10 收起 理由
    loveeeboard + 10

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-7-30 11:40
  • 签到天数: 1792 天

    连续签到: 1 天

    [LV.Master]伴坛终老

     楼主| 发表于 2016-12-1 10:55:49 | 显示全部楼层
    自己顶一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-10-15 13:21
  • 签到天数: 183 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-12-1 11:56:15 | 显示全部楼层
    谢谢分享      
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-7-30 11:40
  • 签到天数: 1792 天

    连续签到: 1 天

    [LV.Master]伴坛终老

     楼主| 发表于 2016-12-1 13:31:47 | 显示全部楼层
    客气了,呵呵呵呵
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 18:33 , Processed in 0.155024 second(s), 25 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.