c - 如何在设置C环境之前在uboot中使用汇编编写控制台(或就像printf()函数)?
问题描述
在设置 c 环境之前,我尝试使用程序集在 uboot 流程中编写控制台。我参考了芯片供应商的 UART 固件驱动程序,以在 uboot 流程开始时(重置时)转换为组装。问题一:SOC的mmio地址在uboot的乞求中是否起作用?ex:#define UART_BASE 0x11000000 in SOC spec,我可以用这个地址来控制uart吗?2. 如果使用 nand 启动,那些汇编代码在哪里运行?Nand SPL UBOOT to ram 不是在求...
(这些地址来自 SOC 供应商 SPEC)
_UART_Init_and_write_a_char:
mov r11, #0x00
ldr r12, =0xf1012004
str r11, [r12]
mov r11, #0x80
ldr r12, =0xf101200c
str r11, [r12]
mov r11, #0x87
ldr r12, =0xf1012000
str r11, [r12]
mov r11, #0x0
ldr r12, =0xf1012004
str r11, [r12]
mov r11, #0x3
ldr r12, =0xf101200c
str r11, [r12]
mov r11, #0x7
ldr r12, =0xf1012008
str r11, [r12]
解决方案
MMIO 是(硬件)内存映射 I/O,所以它已经可以工作了。但是,在能够写入字符之前,您可能需要正确配置 UART 的寄存器。这些通常包括 UART 设置,例如波特率、流量控制等。您可以参考芯片参考手册以了解值和地址。
推荐阅读
- javascript - React 子组件仅在刷新时更新
- linux - 无法从 linux 64 位交叉编译到 linux 32
- android - Kalc 如何在 TextView 旁边显示项目列表?
- virtual-machine - 如何在 KVM 虚拟机中提取新创建的文件?
- ruby-on-rails - 在 Heroku 中部署 rails App 时无法检测到 rake 任务
- nginx - nginx grpc_pass 仅适用于 root
- c++ - 为什么具有不同调用约定的函数仍然可以相互调用?
- c# - 在类中为 C# 中的 linq 查询创建一个匿名对象
- python - Redis 密钥过期后更新 ttl
- python - Groupby,排序和加入