首页 > 其他分享 >lesson05-设计主函数实现串口的初始化和运行

lesson05-设计主函数实现串口的初始化和运行

时间:2024-09-13 22:36:15浏览次数:9  
标签:初始化 PIN lesson05 MODE 串口 GPIO BIT define

根据boot.S里的内容,最后会跳转到kernel_main里,在这里会进行设置gpio引脚配置串口的初始化,然后循环运行,不断打印接受到的内容。


//主函数
void kernel_main()
{
    //串口初始化
    uart_init();
    //串口发送hello world
    uart_send_string("Hello word!\n")
    //循环发送串口接收到的字符
    while(1)
    {
        uart_send(uart_rec());
    }
}

函数的实现如下:


#include "peripherals/gpio.h"
#include "peripherals/mini_uart.h"

#define GPIO_MODE_INPUT     0x000
#define GPIO_MODE_OUTPUT    0x001
#define GPIO_MODE_FUNCTION0 0x100
#define GPIO_MODE_FUNCTION1 0x101
#define GPIO_MODE_FUNCTION2 0x110
#define GPIO_MODE_FUNCTION3 0x111
#define GPIO_MODE_FUNCTION4 0x011
#define GPIO_MODE_FUNCTION5 0x010

#define GPIO_MODE_RESET     0x111

#define GPIO_PIN_10_BIT 0
#define GPIO_PIN_11_BIT 3
#define GPIO_PIN_12_BIT 6
#define GPIO_PIN_13_BIT 9
#define GPIO_PIN_14_BIT 12
#define GPIO_PIN_15_BIT 15
#define GPIO_PIN_16_BIT 18
#define GPIO_PIN_17_BIT 21
#define GPIO_PIN_18_BIT 24
#define GPIO_PIN_19_BIT 27

//串口初始化函数
void uart_init()
{
    //gpio14设置为uart1-tx gpio15设置位uart1-rx
    //通过设置寄存器实现
    unsigned int selector;

    selector = get32(GPFSEL1);
    selector &= ~(GPIO_MODE_RESET<<GPIO_PIN_14_BIT);
    selector |= GPIO_MODE_FUNCTION5<<GPIO_PIN_14_BIT;

    selector &= ~(GPIO_MODE_RESET<<GPIO_PIN_15_BIT);
    selector |= GPIO_MODE_FUNCTION5<<GPIO_PIN_15_BIT;

    put32(GPFSEL1, selector);

    put32(GPPUD, 0);
    delay(150);
    put(GPPUDCLK0, (1<<14)|(1<<15));
    delay(150);
    put32(GPPUDCLK0, 0);

    put32(AUX_ENABLES, 1);
    put32(AUX_MU_CNTL_REG, 0);
    put32(AUX_MU_IER_REG, 0);
    put32(AUX_MU_LCR_REG, 3);
    put32(AUX_MU_MCR_REG, 0);
    put32(AUX_MU_BAUD_REG, 270);
    put32(AUX_MU_IIR_REG, 6);

    put32(AUX_MU_CNTL_REG, 3);

}

标签:初始化,PIN,lesson05,MODE,串口,GPIO,BIT,define
From: https://www.cnblogs.com/kirito-/p/18413020

相关文章

  • lesson04-设计初始化bss段、读写寄存器值的汇编函数
    在内核启动时需要将bss段的所有数据清0,这里就需要memzero函数。.globalmemzero;全局可见memzero:strxzr,[x0],#8subsx1,x1,#8b.gtmemzeroret内核启动时需要经常读写soc内部寄存器的值,这里就需要用到对应的函数put32和get32。.globalput32......
  • uniapp 初始化init
    @charset"UTF-8";body,html,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,form,input,textarea,p,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,�......
  • RS232 串口服务器:传统通信的现代升级
    在现代通信技术的快速发展中,RS232串口服务器成为了连接传统设备与现代网络的关键桥梁。尽管RS232是一种较为古老的串行通信标准,但它在某些特定领域仍然发挥着不可替代的作用。本文将探讨RS232串口服务器如何实现传统通信的现代升级。RS232串口服务器是一种将RS232串行端口转换为网......
  • 多串口服务器:实现大规模设备通信的核心设备
    在物联网和工业自动化的浪潮中,设备之间的通信变得越来越频繁和复杂。为了应对这一挑战,多串口服务器成为了实现大规模设备通信的核心设备。它不仅能够提高数据传输的效率,还能够简化网络管理,为各种应用场景提供强大的支持。本文将探讨多串口服务器的重要性、关键特性以及在现代通信中......
  • 【linux】一种基于虚拟串口的方式使两个应用通讯
    在Linux系统中,两个应用之间通过串口(SerialPort)进行通信是一种常见的通信方式,特别是在嵌入式系统、工业自动化等领域。串口通信通常涉及到对串口设备的配置和读写操作。以下是一个基本的步骤指南,说明如何在Linux中设置两个应用以通过串口进行通信:1.确认串口设备首先,你需要确......
  • 深入剖析 USB 转串口的工作原理与实际应用
    在现代电子设备和计算机硬件的交互中,USB转串口技术扮演着至关重要的角色。它不仅提供了一种便捷的连接方式,还极大地扩展了设备的通信能力。本文将深入剖析USB转串口的工作原理及其在实际应用中的重要性。工作原理USB转串口设备的核心是一个集成电路,它负责将USB接口的信号转换为串行......
  • USB转串口设备在不同通信协议下的性能表现如何?
    USB转串口设备在不同通信协议下的性能表现主要取决于其硬件设计和驱动程序的支持。以下是对几种常见通信协议下USB转串口设备性能的分析:RS-232:这是一种传统的串行通信标准,使用非平衡信号传输,通常用于短距离通信。USB转串口设备在RS-232协议下通常能够提供最高115200bps的波特率,但由......
  • USB转串口:实现设备高效通信的关键工具
    在当今数字化时代,设备间的通信变得越来越频繁和复杂。为了满足不同设备间的通信需求,USB转串口技术应运而生,成为实现设备高效通信的关键工具。这项技术通过将通用串行总线(USB)接口转换为串行端口,极大地提高了数据传输的效率和便捷性。本文将探讨USB转串口技术的原理、应用以及它为何......
  • C++ 变量初始化
    列表初始化当用于内置类型的变量时,这种初始化形式有一个重要特点:如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错:longdoubleld=3.1415926536;inta{ld},b={ld};//错误:转换未执行,因为存在丢失信息的危险intc(ld),d=ld;//正确:转换执行,且确实丢失了......
  • 专业解读:USB转串口技术的应用与优势
    在计算机硬件和数据通信领域,USB转串口技术已经成为连接外部设备与计算机的一种常见且实用的方法。这项技术通过将通用串行总线(USB)接口转换为串行端口,极大地扩展了计算机的连接能力和应用范围。本文将对USB转串口技术的应用与优势进行专业解读。应用场景数据采集:在工业自动化和科研......