問題タブ [peripherals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
io - PCI アドレス マッピングについて
私は PC アーキテクチャを勉強していますが、PCI アドレスの基礎を理解していないと感じています。
PCI には、メモリ、入出力ポート、構成の 3 つのアドレス空間があります。CPU がさまざまなコマンドを使用してメモリとポートを区別できることは知っていますが、PCI ではどうなりますか? バスにはいくつかのコマンドがあります (これらのスペースへの読み取り/書き込み、割り込み処理など)。メモリ空間を読み取るときは物理RAMアドレスにアドレス指定すると思いましたが、いくつかのマニュアルを読んだ後、内部デバイスのメモリにアドレス指定しているようです。
- メモリ マッピングを使用する理由 一部のプログラムが一部の PCI デバイスにマップされた RAM アドレスに書き込むと、実際にはデバイス メモリに書き込むということですか? 標準 IO ポート書き込みを使用しないのはなぜですか?
- 必要に応じて実メモリにアクセスする方法は? たとえば、デバイスが RAM にデータを保存したい場合、この要求は「メモリ空間」アクセスとどのように区別されるのでしょうか?
java - 何らかの周辺機器が取り外されたかどうかを確認する方法はありますか?
インテント フィルター -> ACTION_ACL_CONNECTED、ACTION_ACL_DISCONNECT_REQUESTED、および ACTION_ACL_DISCONNECTED を使用して、WiFi と Bluetooth に何かがあることは知っていますが、接続されているデバイスが削除されたかどうかを確認する一般的な方法はありますか。例: Android デバイスを Mac に接続しましたが、スマートフォンがロックされ、Mac への接続を解除すると、ローカル プッシュやサウンドなどをこの方向にトリガーできます...
アップデート
@Rajesh Gopu からの回答を試してみましたが、これは良さそうですが、残念ながらうまくいきませんでした:(
timer - ARM ペリフェラル レジスタへのアトミック アクセス
ST2M32F103REY Cortex M3 で、汎用タイマーのオーバーフロー、比較一致、およびキャプチャ機能を同時に使用したいと考えています。CC1 はコンペアマッチとして設定され、CC3 はキャプチャとして設定されます。IRQ ハンドラは次のようになります。
原則としては問題なく動作しますが、一部をスキップしているように見えることがあります。私の理論では、IRQ フラグをリセットする操作がTIM3->SR &= ~TIM_SR_UIF
アトミックではないため、たとえば、ロードとストアの間に発生する TIM_SR_CC1IF が上書きされる可能性があるためです。
※命令の分解は以下の通り
- これはもっともらしいですか?IRQハンドラの実行中にTIM3→SRレジスタの内容が変化することはありますか?
- TIM3->SR レジスタに対してアトミックな読み取りと書き込みを行う可能性はありますか?
- 別の適切な解決策はありますか?
ちなみに、同様の質問がありますが、それは複数のプロセスまたはコアによるアクセスの保護に関するものであり、ソフトウェアとハードウェアによる同時アクセスの保護に関するものではありません。
c - HPS (ハードコア プロセッサ) を使用した DE1-SoC 上のメモリ マップド ADC
DE1-SoC (Rev. F) 開発ボードの AD7928 アナログ - デジタル コンバーター (ADC) から読み書きできません。
ボードと ADC のデータシートがあります。カスタム IP と既製のハードウェア コンポーネントを組み合わせて使用しています。LED、プッシュ ボタン、および 7 セグメント ディスプレイを ADC と共に Qsys に実装しました。各コンポーネントのメモリ空間にはベースアドレスと範囲が設定されています。開発ボード上の Linux で実行されている C プログラムでハードウェアを制御しています。仮想アドレスとオフセットを使用して、ADC を除く前述のすべてのコンポーネントを制御できます。
ADC のデータシートには、読み取り用に 8 個、書き込み用に 2 個のレジスタが示されています。ADC は、12.5MHz で動作する利用可能な 8 つのチャネルのうちの 1 つのチャネル (チャネル 0) を使用するように Qsys でセットアップされます。Qsys のメモリ範囲は、ADC に 32 バイトのアドレス指定が割り当てられていることを正しく示しています (それぞれ 4 バイトの 8 つのレジスタ)。2 つのレジスタは、読み取りコマンドと書き込みコマンドを共有します。
自動有効化コマンドを書き込んで、ADC のチャネル 0 から 12 ビット温度を読み取るために使用するポインタを次に示します。
他のコンポーネントと同じポインター設定を使用しますが、すべて機能します。
ADC のソフトコア プロセッサのセットアップを調べたところ、ADC をオンにするコマンドを含む .h ファイルがありますが、ハードコア プロセッサ システムにはそのコマンドがないようです。
ADC が HPS (hard-core processor sys) で使用できるようにするために必要なその他のセットアップはありますか? ADC データシートには、制御用の 8 つのレジスタのみが示されています。自動有効化モードと変換開始モードの両方を試しました。コマンドレジスタを以下に示します。