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

[复制链接]
 楼主| ddllxxrr 发表于 2015-11-15 08:59 | 显示全部楼层 |阅读模式
寄存器串口很简单,用默认的时钟,直接就给出波特率即可。

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

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

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

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

  25.         /*回环测试时用,正常工作可删除它*/
  26.         //UART0->UART_MR = UART_MR_CHMODE_REMOTE_LOOPBACK;
  27.         uint32_t data;
  28.         while(1)
  29.         {
  30.                 /*接收*/
  31.                 while ((UART0->UART_SR & UART_SR_RXRDY) == 0);
  32.                 data = UART0->UART_RHR;
  33.                 /* 发送*/
  34.                 while((UART0->UART_SR & UART_SR_TXRDY) == 0);
  35.                 UART0->UART_THR = data;
  36.         }
  37. }

运行结果如下:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

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

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部