所以我正在学习 ASM,并且有一个 LM4F120XL ARM Cortex-M4 MCU。我正在使用 Keil uVision V4.54。
我熟悉设置端口等,初始化 GPIO 和 UART。
例如,我坚持的是通过串行读取和写入 TeraTerm/Putty。
我了解 RxFE = 0,FIFO 不为空 - 从中读取;并且 TxFF = 0,FIFO 未满 - 写入它..
但是在比较并满足这些条件之后,我实际上将什么数据写入 UART_DR,数据寄存器..?是否只是将数据寄存器加载到寄存器中,将此地址处的值加载到另一个寄存器中,然后......我丢失了,因为我没有更改位我正在添加新数据 - 然后你会从这个寄存器回到数据寄存器寄存器..
因此,如果数据寄存器中存在数据,那么它会及时传递出去..?我可以使用正确的 COM 端口连接到 TeraTerm,调整 BAUD 和 PARITY 设置。但再一次,如果数据寄存器中存在数据,在到期周期后会自动发送......?
另外,如何从键盘读取字符..?或其他计算机外围设备..是否知道地址,将值加载到寄存器中,然后将其存储到数据寄存器中?如果数据寄存器保存数据,则需要以非破坏性方式完成。
为什么每篇关于 MCU 编码的文章都是用 C++ 而不是 ASM 编写的?我也在学习 C++ 但不知道为什么没有人使用汇编/机器代码..
;--------
读取字符
PUSH {R0, R1}
inloop LDR R0, =UART_FR LDR R1, [R0] AND R1, #0x10 CMP R1, #0x0 BNE inloop
LDR R0, =UART_DR
LDR R1, [R0]
************??
STR R1, [R0]
POP {R0, R1}
BX LR
;--------
输出字符
PUSH {R0, R1}
外环回 LDR R0, =UART_FR LDR R1, [R0] AND R1, #0x20 CMP R1, #0x0 BNE 外环回
LDR R0, =UART_DR
LDR R1, [R0]
************??
STR R1, [R0]
POP {R0, R1}
BX LR
;--------