だから私は 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 の設定を調整できます..しかし、データ レジスタにデータが存在する場合は、適切なサイクルの後、自動的に送信されます..?
また、キーボードから文字を読み取るのはどうですか..?または他のコンピュータ周辺機器..それは問題ですか-アドレスを知って、値をレジスタにロードしてから、データレジスタに格納しますか? Data-Register がデータを保持している場合、これは非破壊的に行う必要があります。
MCU コーディングに関するすべての記事が ASM ではなく C++ で書かれているのはなぜですか? 私はC++も学んでいますが、アセンブリ/マシンコードを誰も使用しない理由がわかりません..
;------
ReadChar
PUSH {R0, R1}
inloop LDR R0, =UART_FR LDR R1, [R0] AND R1, #0x10 CMP R1, #0x0 BNE インループ
LDR R0, =UART_DR
LDR R1, [R0]
************??
STR R1, [R0]
POP {R0, R1}
BX LR
;------
OutputChar
PUSH {R0, R1}
outloop LDR R0, =UART_FR LDR R1, [R0] AND R1, #0x20 CMP R1, #0x0 BNE outloop
LDR R0, =UART_DR
LDR R1, [R0]
************??
STR R1, [R0]
POP {R0, R1}
BX LR
;------