微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 原创:sam4s16c的寄存器配置基础教程---SPI配置

原创:sam4s16c的寄存器配置基础教程---SPI配置

时间:10-02 整理:3721RD 点击:
最近项目涉及到和供应商合作,之前用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);
本次没有加中断,请大家自行研究
水平有限,请大家多指点,谢谢!
后续还有很多外设的寄存器配置教程,请大家关注。

多谢分享

自己先顶一下,哈哈哈

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top