1

だから私は 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

;------

4

2 に答える 2