打印
[Atmel]

用SAM-BA或JLINK跑ATSAM4E16的程序(11)寄存器串口

[复制链接]
680|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddllxxrr|  楼主 | 2015-11-15 08:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
寄存器串口很简单,用默认的时钟,直接就给出波特率即可。

本程是给出一收马上发的结构,所以最好一个一个来。

程序如下:
/*[头文件]*/
#include "sam.h"

/*定义波特率,时钟,不需要奇偶校验*/
#define BAUDRATE        9600
#define MCK                CHIP_FREQ_MAINCK_RC_4MHZ
#define PAR                UART_MR_PAR_NO

/*[主程序]*/
int main (void)
{
        /*关掉看门狗*/
        WDT->WDT_MR = WDT_MR_WDDIS;
        /*使能UART0时钟*/
        PMC->PMC_PCER0 = (1 << ID_UART0);
        /*设置PA9和PA10为串行通信口URXD0和UTXD0*/
        uint32_t mask = PIO_PA9 | PIO_PA10;
        PIOA->PIO_PDR = mask;
        PIOA->PIO_ABCDSR[0] &= ~mask;  //这时里选择A口外设功能即UART0
        PIOA->PIO_ABCDSR[1] &= ~mask;  //这里是选择A口外设功能即UART0
        /*使能接收器及发送器*/
        UART0->UART_CR = UART_CR_RXEN | UART_CR_TXEN;
        /*本芯片的UART支持的格式仅有:8位数据位、发送时停止位为1位。但我们可以设置校验位,不过为了简单起见,这里不使用校验*/
        UART0->UART_MR = UART_MR_PAR_NO;
        /*设置通信波特率*/
        UART0->UART_BRGR = UART_BRGR_CD(MCK / (16 *BAUDRATE));

        /*回环测试时用,正常工作可删除它*/
        //UART0->UART_MR = UART_MR_CHMODE_REMOTE_LOOPBACK;
        uint32_t data;
        while(1)
        {
                /*接收*/
                while ((UART0->UART_SR & UART_SR_RXRDY) == 0);
                data = UART0->UART_RHR;
                /* 发送*/
                while((UART0->UART_SR & UART_SR_TXRDY) == 0);
                UART0->UART_THR = data;
        }
}

运行结果如下:



相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6963

帖子

68

粉丝