前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蜂鸟E203系列—— UART 设计

蜂鸟E203系列—— UART 设计

作者头像
瓜大三哥
发布2020-07-24 14:21:23
9160
发布2020-07-24 14:21:23
举报
文章被收录于专栏:瓜大三哥瓜大三哥

参考文章《UART

原理图

GPIO 可以通过 IOF0 和 IOF1 功能,使得 SOC 中的外设能够复用 GPIO 的32根引脚与芯片外设进行通信,其接口分配表如下所示:

GPIO编号

IOF0

IOF1

GPIO0

-

PWM0_0

GPIO1

-

PWM0_1

GPIO2

QSPI1:SS0

PWM0_2

GPIO3

QSPI1:SD0/MOSI

PWM0_3

GPIO4

QSPI1:SD1/MISO

-

GPIO5

QSPI1:SCK

-

GPIO6

QSPI1:SD2

-

GPIO7

QSPI1:SD3

-

GPIO8

QSPI1:SS1

-

GPIO9

QSPI1:SS2

-

GPIO10

QSPI1:SS3

PWM2_0

GPIO11

-

PWM2_1

GPIO12

IIC:SDA

PWM2_2

GPIO13

IIC:SCL

PWM2_3

GPIO14

-

-

GPIO15

-

-

GPIO16

UART0:RX

-

GPIO17

UART0:TX

-

GPIO18

-

-

GPIO19

-

PWM1_1

GPIO20

-

PWM1_0

GPIO21

-

PWM1_2

GPIO22

-

PWM1_3

GPIO23

-

-

GPIO24

UART1:RX

-

GPIO25

UART1:TX

-

GPIO26

QSPI2:SS

-

GPIO27

QSPI2:SD0/MOSI

-

GPIO28

QSPI2:SD1/MISO

-

GPIO29

QSPI2:SCK

-

GPIO30

QSPI2:SD2

-

GPIO31

QSPI2:SD3

-

源码

嵌入式软件发送20个连续的递增数据给底层硬件

代码语言:javascript
复制
#define DATA_SIZE 20
int8_t uxrt_tx_data[DATA_SIZE];

#define GPIO_UART1_RX 24
#define GPIO_UART1_TX 25

/**
 * 串口1 波特率115200 用于发送数据
 */

static void uart_init1(int8_t a[DATA_SIZE])
{
        int i=0;
        //IOF0:设置GPIO_UART1_RX和GPIO_UART1_TX的GPIO引脚为IOF0模式
        GPIO_REG(GPIO_IOF_SEL)  &= ~(0x1 << GPIO_UART1_RX) ;
        GPIO_REG(GPIO_IOF_SEL)  &= ~(0x1 << GPIO_UART1_TX) ;

        //IOF0使能:设置GPIO_UART1_RX和GPIO_UART1_TX的GPIO引脚为IOF0模式使能
        GPIO_REG(GPIO_IOF_EN)  |= (0x1 << GPIO_UART1_RX) ;
        GPIO_REG(GPIO_IOF_EN)  |= (0x1 << GPIO_UART1_TX) ;

        //使能UART1 TX发送
        UART1_REG(UART_REG_TXCTRL)  |=   (0x1 << 0) ;
        //UART1 的stop为1bit
        UART1_REG(UART_REG_TXCTRL)  &=   ~(0x1 << 1) ;

        //波特率设置:先将div寄存器清零,再进行赋值操作
        UART1_REG(UART_REG_DIV)  = 0;
        //波特率设置:设置波特率为 115200 时钟频率16M,div=(16M/115200)-1=138
        UART1_REG(UART_REG_DIV) = 138;

        for(i=0;i<DATA_SIZE;i=i+1){
            //当发送缓冲队列不满的时候进行发送数据
            while(UART1_REG(UART_REG_TXFIFO) & 0x80000000);
            UART1_REG(UART_REG_TXFIFO)  = a[i] ;
        }
}
void main(){

    int i=0;
    for(i=0;i<DATA_SIZE;i=i+1){
        uxrt_tx_data[i]=i;
    }
    printf("uart is start");
    uart_init1(uxrt_tx_data);
}

实验结果

在 verilog 中添加 UART 解串程序,也就是将 TX 发出来的 GPIO25 引脚进行解串。

通过加入ILA可以看到发送的20个数据如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原理图
  • 源码
  • 实验结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档