引言

c语言中读取某个接口电路采用的写法是

  1. #define rGPBDAT (*(volatile unsigned *))0x56000014

其中地址可按需要改变。

  1. rGPBDAT &= (~(1<<5));
  1. RGPBDAT |= (1<<5);

GPIO接口

LED灯的例子

GPXXCON的功能

一共有32位,每4位规定了对应的引脚的功能是输入/输出或是其他作用。

GCXXDAT的功能

一共有8位。对应了一个引脚的内容。当功能为输入时则是要读取的内容,功能为输出时则是要输出的内容。

GPXXPUD

在这个例子里还需要把PUD置为0。

按键的例子

和上面的例子差不多,只是需要轮询反复读取数值。

蜂鸣器的例子

差不多,但是有使用汇编实现的例子。

涉及到的寄存器

寄存器 作用
GPxxCON 设置引脚为输入或者是输出
GPxxDAT 输出数据或是读入
GPxxPUD

UART接口

串口通信的例子。

概述

  • 数据终端设备DTE
  • 数据通信设备DCE

    引脚功能

    RXD:输入,接收数据 TXD:输出,发送数据
    DTR:输出,DTE就绪 DSR:输入,MODEM就绪
    TRS:输出,请求发送 CTS:输入,允许发送

    硬件握手

    DTR:数据终端设备准备好。
    DSR:数据通信设备准备好。
    image.png
    image.png
    image.png

    实例

    UART操作的一般步骤
  1. 设置所涉及引脚为UART功能
  2. 设置波特率,传输格式
  3. UART通道的工作模式
  4. 等待发送/接收数据的完成

具体的步骤:
初始化的步骤:

  • 设置引脚模式
    • 在GPxxCON寄存器设置引脚为UART模式
  • 设置数据格式等
    • 在ULCONn寄存器设置数据格式,如数据长度等。
    • 在UCONn寄存器设置发送和接收的模式,中断的设置,时钟的选择等。
    • 在UFCONn寄存器使能FIFO。
    • 在UMCONn设置流控。
  • 设置波特率
    • 设置波特率分频寄存器(UBRDIVn)和分频槽寄存器(UDIVSLOTn)

发送数据的步骤:

  • 读取UFSTATn寄存器的指定位数据,如果RX FIFO空,则等待
  • 如果不为空,则从URXHn返回数据

接收数据的步骤:

  • 读取UFSTATn寄存器指定位数据,如果TX FIFO满,则等待
  • 如果不为满,则向UTXHn写数据

    涉及到的寄存器

    | 寄存器 | 作用 | | —- | —- | | GPxxCON | 设置引脚功能为UART模式 | | ULCONn | 设置数据格式,如数据长度等 | | UCONn | 设置收发模式,中断设置,时钟选择等 | | UFCONn | 使能FIFO | | UMCONn | 设置流控 | | UBRDIVn | 波特率分频寄存器 | | UDIVSLOTn | 分频槽寄存器 | | UFSTATn | 获取RX FIFO和TX FIFO的空满状态 | | URXHn | RX FIFO的落地实现,实现接收缓冲 | | UTXHn | TX FIFO的落地实现,实现输出缓冲 |

定时器

蜂鸣器的例子。
内部有5个定时器。
占空比的计算。

  1. 在GPxxCON寄存器将指定端口设置成为TOUT(与Output有区别)
  2. 设置预分频值和分频值。预分频值在TCFG0寄存器的prescaler位。分频值在TCFG1寄存器的指定定时器位。
  3. 设置TCNTB寄存器和TCMPB寄存器。
  4. 在TCON寄存器中设置手动更新位。
  5. 随后在TCON寄存器中关闭手动更新位,设置计时器开始计时,设置自动重装载,设置中断。

    涉及到的寄存器

    | 寄存器 | 作用 | | —- | —- | | GPxxCON | 设置引脚为TOUT定时器输出 | | TCFG0 | 设置预分频值,采用不同的定时器会有不同的设置位 | | TCFG1 | 设置分频值,采用不同的定时器会有不同的设置位 | | TCNTBn | 设置TCNTB值,一个大周期所需要的时钟周期 | | TCMPBn | 设置TCMPB值,电平反转所需要的时钟周期 | | TCON | 设置手动更新,自动重装,开始/停止,中断相应。不同的定时器会有不同的设置位 |