查看: 27|回复: 0

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

[复制链接]

73

主题

1

好友

2796

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    奋斗
    20 小时前
  • 签到天数: 498 天

    [LV.9]以坛为家II

    发表于 6 天前 |显示全部楼层
    最近项目涉及到和供应商合作,之前用atmel studio不能继续用了,不得不改用keil,于是潜水了一段时间,静下来仔细分析Datasheet,终于完成了,几乎所有外设驱动的寄存器配置,可以直接用于sam4s系列。看不懂的自己仔细研究Datasheet吧。个人的爱好是喜欢寄存器直接配置。
    看官方的库,太乱,太累。
    不喜欢拿来主义。
    第三部分
    配置usart
    首先要使能IO口的时钟,如使能PIOA口,操作如下
    PMC->PMC_PCER0 = 1 << ID_PIOA;
    第二,禁止IO口
            mask = PIO_PA5 | PIO_PA6;
            PIOA->PIO_PDR = mask;
    第三,设置对应的外设使能寄存器
            PIOA->PIO_ABCDSR[0] &= ~mask;
            PIOA->PIO_ABCDSR[1] &= ~mask;
    第四,设置复合外设寄存器
    p_pio->PIO_MDER = ul_mask;
    第五,禁止上拉电阻
    p_pio->PIO_PUDR = ul_mask;
    第六,设置IO的缺省值
    p_pio->PIO_CODR = ul_mask;
    第七,配置IO口作为输出
            p_pio->PIO_OER = ul_mask;
            p_pio->PIO_PER = ul_mask;



    下面开始USART的设置
    首先,使能时钟
    PMC->PMC_PCER0 = 1 << ID_USART0;

    第二配置控制寄存器
            USART0->US_CR = US_CR_RSTTX | US_CR_TXDIS | US_CR_RSTRX | US_CR_RXDIS | US_CR_RSTSTA | US_CR_RTSDIS | US_CR_DTRDIS;
    第三,设置模式寄存器
            USART0->US_MR =US_MR_USART_MODE_NORMAL   /* 硬件握手模式 */
                                            | US_MR_USCLKS_MCK          /* 选择的MCK */
                                            | US_MR_CHRL_8_BIT          /* 数据位为8位  */
                                            | US_MR_PAR_NO              /* 无校验位  */
                                            | US_MR_NBSTOP_1_BIT            /* 停止位为1位 */
                                           ;
    [td]






    [/td]第四,设置波特率,下面提供的方式,任选
    //        USART0->US_BRGR= 0x35;//115200
            USART0->US_BRGR= 0x27c;//9600
    //        USART0->US_BRGR= USART_BRGR_CD(120000000/(16*baud));
    第五,禁止DMA功能
           USART0->US_PTCR = UART_PTCR_RXTDIS | UART_CR_TXDIS;
    第六,使能中断        
            USART0->US_IDR = 0xffffffff;
            USART0->US_IER = US_IER_RXRDY;
    第七,使能收发
            USART0->US_CR = US_CR_RXEN | US_CR_TXEN;
    最后,使能中断        
            NVIC_DisableIRQ(USART0_IRQn);
            NVIC_ClearPendingIRQ(USART0_IRQn);
            NVIC_SetPriority(USART0_IRQn,pri);
            NVIC_EnableIRQ(USART0_IRQn);





    水平有限,请大家多指点,谢谢!
    后续还有很多外设的寄存器配置教程,请大家关注。。。。。。。
    已有 1 人评分周年币 收起 理由
    loveeeboard + 15

    总评分: 周年币 + 15   查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-6 20:34 , Processed in 0.141018 second(s), 13 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部