根据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