タグ付けされた質問 「interrupts」

コンピュータのプログラムフローを制御するメカニズム。割り込みを受けると、コンピューターはその現在の動作状態と、生成された割り込みに依存するコードの実行に対する変更を保存します。割り込みは、ハードウェアソースまたはソフトウェアソースのいずれかです。ソフトウェアによる割り込みはトラップと呼ばれます。これはポーリングの代替メカニズムであり、ほとんどのI / O、マルチタスク、および制御が実装される基本です。

4
エッジトリガーおよびレベルトリガーとはどういう意味ですか?
8085マイクロプロセッサアーキテクチャとワードエッジトリガーとレベルトリガーを勉強しているので、非常に混乱しています。誰でもそれを素人の言葉で説明できますか? RST 7.5、RST 6.5、RST 5.5、およびTRAPという名前の8085の割り込みを調べているときに、これらの言葉に出くわし、混乱させられました。ここで、私が読んでいた1つのドキュメントリンクを添付し、混乱図について言及しました。 文書RST 7.5->エッジトリガーRST 5.5->レベルトリガー。TRAP-> EdgeトリガーおよびLevelトリガー。(なぜですか?違いがありますか?)。 文書リンク

6
シリアルプロトコルの区切り/同期技術
非同期シリアル通信は今日でも電子機器に広く普及しているため、私たちの多くはそのような質問に時々出くわしたと思います。電子デバイスDと、PCシリアル回線(RS-232または同様のもの)で接続され、継続的に情報を交換する必要があるコンピューターを検討してください。すなわち、PCそれぞれコマンドフレームを送信しており、それぞれステータスレポート/テレメトリーフレームで応答しています(レポートはリクエストへの応答として、または独立して送信できます-ここでは実際には関係ありません)。通信フレームには、任意のバイナリデータを含めることができます。通信フレームが固定長パケットであると仮定します。X msDY ms 問題: プロトコルは継続的であるため、受信側は同期を失ったり、進行中の送信フレームの途中で「結合」したりする可能性があるため、フレームの開始(SOF)がどこにあるかはわかりません。Aデータは、SOFに対する相対的な位置に基づいて異なる意味を持ち、受信したデータは破損する可能性があり、永久に破損する可能性があります。 必要なソリューション 短い回復時間でSOFを検出するための信頼性の高い区切り/同期スキーム(つまり、再同期に1フレーム以上かかることはありません)。 私が知っている(そして使用している)既存のテクニック: 1)ヘッダー/チェックサム -事前定義されたバイト値としてのSOF。フレームの最後のチェックサム。 長所:シンプル。 短所:信頼できません。不明な回復時間。 2)バイトスタッフィング: 長所:信頼性が高く高速な回復で、どのハードウェアでも使用可能 短所:固定サイズのフレームベースの通信には適していません 3)9番目のビットマーキング -各バイトに追加ビットを追加します。SOFでマークされたSOF 1とデータバイトには次のマークが付けられ0ます。 長所:信頼性が高く、高速な回復 短所:ハードウェアサポートが必要です。ほとんどのPCハードウェアおよびソフトウェアでは直接サポートされていません。 4)8番目のビットマーキング -上記の一種のエミュレーション。9番目ではなく8番目のビットを使用し、各データワードに7ビットのみを残します。 長所:信頼性の高い高速リカバリは、どのハードウェアでも使用できます。 短所:従来の8ビット表現と7ビット表現の間のエンコード/デコードスキームが必要です。やや無駄だ。 5)タイムアウトベース -定義されたアイドル時間の後に来る最初のバイトとしてSOFを想定します。 長所:データオーバーヘッドなし、シンプル。 短所:それほど信頼できません。Windows PCなどのタイミングの悪いシステムではうまく動作しません。潜在的なスループットのオーバーヘッド。 質問: 問題に対処するために存在する他の可能な技術/解決策は何ですか?上記のリストで簡単に回避できる短所を指摘できますか?システムプロトコルをどのように設計しますか(または設計しますか)?
24 serial  communication  protocol  brushless-dc-motor  hall-effect  hdd  scr  flipflop  state-machines  pic  c  uart  gps  arduino  gsm  microcontroller  can  resonance  memory  microprocessor  verilog  modelsim  transistors  relay  voltage-regulator  switch-mode-power-supply  resistance  bluetooth  emc  fcc  microcontroller  atmel  flash  microcontroller  pic  c  stm32  interrupts  freertos  oscilloscope  arduino  esp8266  pcb-assembly  microcontroller  uart  level  arduino  transistors  amplifier  audio  transistors  diodes  spice  ltspice  schmitt-trigger  voltage  digital-logic  microprocessor  clock-speed  overclocking  filter  passive-networks  arduino  mosfet  control  12v  switching  temperature  light  luminous-flux  photometry  circuit-analysis  integrated-circuit  memory  pwm  simulation  behavioral-source  usb  serial  rs232  converter  diy  energia  diodes  7segmentdisplay  keypad  pcb-design  schematics  fuses  fuse-holders  radio  transmitter  power-supply  voltage  multimeter  tools  control  servo  avr  adc  uc3  identification  wire  port  not-gate  dc-motor  microcontroller  c  spi  voltage-regulator  microcontroller  sensor  c  i2c  conversion  microcontroller  low-battery  arduino  resistors  voltage-divider  lipo  pic  microchip  gpio  remappable-pins  peripheral-pin-select  soldering  flux  cleaning  sampling  filter  noise  computers  interference  power-supply  switch-mode-power-supply  efficiency  lm78xx 

2
すべてのトラップを常に定義する必要がありますか?
dsPIC 30F4013で、未定義のトラップが原因でコントローラーがリセットされた2つのケースを見てきました。そもそもなぜこれらのtrapが発生したのかは謎のままですが、それは私の直接の質問ではありません。トラップが決して発生しない場合でも、すべてのトラップを常に定義することは良いプログラミング手法だと考え始めているので、ランダムリセットの代わりに少なくとも明確なエラーメッセージが表示されます。これは私が知らない標準的な慣習ですか?このプラクティスに不利な点はありますか?

1
Stm32イベントと割り込み
私はstm32、特にstm32f4ディスカバリーボードで割り込みの研究を始めました。ボタンを押して割り込みを開始し、もう一度押して停止する必要があるこの例を見つけました。 この行では、EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interruptで、割り込みモードまたはイベントモードを選択する必要があります。イベントモードに変更しましたが、動作しないようです。そのため、ハンドラーは割り込みのみで実行されるという結論に達しました。 イベントが発生したときにコードを実行できない場合、なぜstm32でイベントを使用するのですか? コードは次のとおりです。 #include "stm32f4xx.h" #include "stm32f4xx_syscfg.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_exti.h" #include "misc.h" EXTI_InitTypeDef EXTI_InitStructure; void EXTILine0_Config(void); void LEDInit(void); void ExtInt(void) { LEDInit(); /* Configure EXTI Line0 (connected to PA0 pin) in interrupt mode */ EXTILine0_Config(); /* Generate software interrupt: simulate a rising edge applied …

2
SPIは中断しても安全ですか?
ファームウェア内からmicroSDカードに書き込んでいますが、これは優先度が最も低いタスクなので、読み取り/書き込み中に他のタスクによって中断される可能性があります。 ここで、UARTを使用してこのmicroSDカードと通信したとします。読み取り中の問題は、ハードウェアRX FIFOがオーバーフローすることであるため、努力できる最大遅延は(FIFOサイズ×バイト/秒)であり、書き込み中は問題はありません。次の文字を送信します。 SPIを使用している今、これはどのように機能しますか?書き込みの場合は問題ではなく、読み取りの場合はSPI FIFOサイズに依存する状況と同じですか?

4
ARM Cortex A9にクリティカルセクションを実装する方法
ARM926コアからCortexA9にいくつかのレガシーコードを移植しています。このコードはベアメタルであり、OSまたは標準ライブラリは含まれていません。すべてカスタムです。コードのクリティカルセクショニングによって防止されるべき競合状態に関連すると思われる障害が発生しています。 このCPUにクリティカルセクションが正しく実装されていない可能性があるかどうかを確認するには、アプローチに関するフィードバックが必要です。GCCを使用しています。微妙なエラーがあると思います。 また、ARM用のこれらのタイプのプリミティブを備えたオープンソースライブラリ(または優れた軽量スピンロック/セメフォライブラリ)もありますか? #define ARM_INT_KEY_TYPE unsigned int #define ARM_INT_LOCK(key_) \ asm volatile(\ "mrs %[key], cpsr\n\t"\ "orr r1, %[key], #0xC0\n\t"\ "msr cpsr_c, r1\n\t" : [key]"=r"(key_) :: "r1", "cc" ); #define ARM_INT_UNLOCK(key_) asm volatile ("MSR cpsr_c,%0" : : "r" (key_)) コードは次のように使用されます。 /* lock interrupts */ ARM_INT_KEY_TYPE key; ARM_INT_LOCK(key); <access registers, shared globals, …
15 c  embedded  interrupts 

4
AVR SEI命令
AVR SEI命令(http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_SEI.html)は、割り込みを有効にする前に次の命令が完了するのを待ちます。 別の命令を使用してSREGのIフラグを設定した場合、これも1命令待機しますか? つまり、待機はSEI命令またはステータスレジスタの機能ですか? SEI命令の機能である場合、SEIを実行するサイクルで、または次の命令で、実際にどの時点でフラグが設定されますか?

6
組み込みシステムで割り込みを使用する場合のグローバル変数の回避
グローバル変数を回避する組み込みシステムのために、ISRとプログラムの残りの部分との間の通信を実装する良い方法はありますか? 一般的なパターンは、ISRとプログラムの残りの部分との間で共有され、フラグとして使用されるグローバル変数を持つことですが、このグローバル変数の使用は、粒度に反しています。avr-libcスタイルのISRを使用した簡単な例を含めました。 volatile uint8_t flag; int main() { ... if (flag == 1) { ... } ... } ISR(...) { ... flag = 1; ... } 基本的にスコーピングの問題が何であるかを見逃すことはできません。ISRと残りのプログラムの両方がアクセスできる変数は、必ず本質的にグローバルでなければなりませんか?それにもかかわらず、「グローバル変数はISRとプログラムの残りの部分との間の通信を実装する1つの方法」(強調は私のもの)という言葉に沿って人々が言うことをよく目にします。他の方法がある場合、それらは何ですか?

4
ISRにジャンプするタイミングをコントローラーはどのようにして知るのですか?
私はコアレベルでのことについて話している。 私の知る限り、コントローラーコアはメモリからフェッチされた命令を実行するだけです(フェッチ-デコード-実行)。割り込みが到着すると、コア/ ALUはどのようにISRにジャンプすることを決定しますか? 私たちまたはコンパイラは、割り込みステータスをポーリングする命令を追加しないので、割り込みを処理する必要があることをどのように知るのでしょうか?


1
Arduinoと割り込み:ピン値を取得する高速な方法
私はArduino Unoを使用しており、私が見つけた説明1に従って、デジタルピン2、3、4、および5の割り込みで動作するようにすでに設定しています。 void setup() 割り込みを設定する次のコードが含まれています。 //Endable Interrupts for PCIE2 Arduino Pins (D0-7) PCICR |= (1<<PCIE2); //Setup pins 2,3,4,5 PCMSK2 |= (1<<PCINT18); PCMSK2 |= (1<<PCINT19); PCMSK2 |= (1<<PCINT20); PCMSK2 |= (1<<PCINT21); //Trigger Interrupt on rising edge MCUCR = (1<<ISC01) | (1<<ISC01); そして今、ISR(PCINT2_vect)関数はすべての割り込みでトリガーされます。それは魅力のように機能します。私の質問は、どのピンがトリガーされたかを知るための最良/最速の方法は何ですか? 私はで何かを発見した日時:ピン2、3にISR(PCINT2_vect)またはattachInterruptを使用することをお勧めしますか?、しかし私はコードを理解しておらず、そのままでは機能しません。しかし、それは印象的に見えます... 解決策は何ですか? [2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost 編集: 現時点では、入力ピンレジスタからピンの状態を読み取っています。 if (PIND & …

3
ピン変更割り込みの正しい使用法
ピンの変更割り込みを使用して、押されたボタンを検出しようとしています。これまでは、この種の割り込みを扱ったことはなく、いくつかの問題があるので、これが正しい使い方かどうかを確認したいと思います。 データシートが正しい場合、ピン変更割り込みを使用するには、次のことを行う必要があります。 制御するPINをPCMSKレジスタに設定します ピン変更割り込み制御(PCICR)のPINレジスタを有効にする 割り込みを有効にする 対応する割り込みベクターを使用する プロジェクト:シンプルなムードランプ、4つのボタンで色を制御。 セットアップ: Atmega168A-PU 4つのミニプッシュボタンスイッチ 私の3ワットRGB LEDを制御するMOSFET これが私が使用しているコードで、期待どおりに機能していません: #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #include <util/delay.h> #define BUTTON1 (1<<PC5) #define BUTTON2 (1<<PC4) #define BUTTON3 (1<<PC3) #define BUTTON4 (1<<PC2) #define GREEN (1<<PB1) #define BLUE (1<<PB2) #define RED (1<<PB3) void init() { // enable LED DDRB |= …

2
AVRでTimer0を使用しない理由は何ですか?
基本的な質問だけです... arduino / avr / ATMega328の場合、Timer1を使用した例がたくさんあります(そのためのライブラリ全体もあります)が、Timer0(またはTimer2)を使用する例はほとんどありません。 これらのタイマーのいずれかを使用してISRメソッドを制御すると、関連するピンでのPWMの使用が無効になることはわかっていますが、Timer0から離れているように見える特定の理由はありますか?内部で使用してはいけない他の何かに使用されていますか? 私の現在のアプリケーションはTimer1を使用して問題なく動作します。他の無視されがちなこれらのタイマーについて何か不足しているのではないかと気になります。

2
ISRなしで割り込みを有効にする
割り込みが有効になっている場合に何が起こるか知りたいのですが(例:NXPのLPC1778のCANモジュールのアービトレーションロスト割り込み)、割り込みにISRが定義されていません。 そのような割り込みが発生すると、それぞれの割り込みフラグが設定されることがわかりますが、ISRを定義していないため、そのような割り込みの制御転送用に格納されている割り込みベクトルオフセットアドレスはなく、制御はパスバックします。メインルーチンに割り込みフラグをリセットして、メインルーチンでポーリングフラグをリセットできます(これは私が考えていることです)。ジャンプするISRがないことをCPUが把握しているときに、レイテンシはありますか? 発生する可能性のある解決策が本当に役に立ちます。 ありがとう。 更新: uCでCAN割り込みを有効にしましたが、ISRを定義していません。内部ループバックテストを実行すると、コードが無限ループに入りました。LPC1778で実行されている無限ループの逆アセンブリコードを次に示します。 B . ENDP したがって、割り込みを使用している場合は、ISRを使用してください。

3
ソフトウェア割り込みと機能
MCUを使用して約3年経った後も、ソフトウェア割り込みの使用方法がわかりません。私はSTM32でいくつかのジョブを実行しましたが、ソフトウェア割り込みを使用したことがありません。実際、これは私にとって大きな問題です。 単純な関数を使用してタスクを実行できるのに、ソフトウェア割り込みを使用する必要があるのはなぜですか?ソフトウェア割り込みと関数の違いは何ですか? いつでも好きなときに、関数(ジョブ用に作成したもの)を呼び出すことができます。単純な関数の代わりにソフトウェア割り込みを使用することにはいくつかの利点があるはずです。よくわかりませんが、ソフトウェア割り込みにはメリットがあると思います。ソフトウェア割り込みに優先度を割り当ててから、ソフトウェア割り込みに高い優先度を与えて、ハードウェア割り込みがタスクを壊すのを防ぐことができます。
10 arm  stm32  interrupts 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.