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

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

3
Cortex-M3の重要なセクション
タイミングの制約や同時実行の問題のために例外が許可されないCortex-M3に重要なコードセクションを実装することについて少し疑問に思っています。 私の場合、LPC1758を実行しており、TI CC2500トランシーバーを搭載しています。CC2500には、RXバッファー内のデータおよびTXバッファー内の空き領域の割り込みラインとして使用できるピンがあります。 例として、MCUのSRAMにTXバッファーを配置し、トランシーバーのTXバッファーに空き領域がある場合、そこにこのデータを書き込みます。しかし、SRAMバッファーにデータを配置するルーチンは、TXの空き領域割り込みによって割り込みできないことは明らかです。だから私がしたいのは、このバッファを埋めるこの手順を実行している間、一時的に割り込みを無効にしますが、この手順中に発生した割り込みは、それが終了した後に実行します。 Cortex-M3でこれをどのように行うのが最適ですか?

4
STM32:タイマー割り込みはすぐに機能します
これは、STM32F429での私のプロジェクトのタイマーのコードです。 //timer initialization void timerInit() { uwPrescalerValue2 = (uint32_t) ((SystemCoreClock / 2) / 100000) - 1; RS485Timer.Instance = TIM5; RS485Timer.Init.Period = 67400000; // high value to notice interrupt even without debugging RS485Timer.Init.Prescaler = 400000; RS485Timer.Init.ClockDivision = 0; RS485Timer.Init.CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_Base_Init(&RS485Timer); } void timerReset() { HAL_TIM_Base_Stop_IT(&RS485Timer); HAL_TIM_Base_DeInit(&RS485Timer); HAL_TIM_Base_Init(&RS485Timer); HAL_TIM_Base_Start_IT(&RS485Timer); printf("%d …

3
PICで複数の外部割り込みを使用する
いくつかのプロジェクトでPIC16F877(データシート)を使用しました。単一の外部ピン変更割り込みの場合、PORTB0割り込みを使用できます。しかし、今度は1つの回路で8つの独立した外部ピン変更割り込みをサポートする必要があります。 データシートには、に15の割り込みがあるとありますがPIC16F877、タイマーのオーバーフロー割り込みなどを含めてカウントされていると思います。この場合は役に立ちません。 これはデータシートがINTCONレジスターについて述べていることです。 bit0を使用して4つの独立した割り込みを持つことはできますRBIFか?それはの変化を表していPB7:PB4ます。どのピンが変更されたかをどのように識別できますか、それは割り込みルーチンでポート値を読み取ることによってですか? 上記に対して肯定的な回答を得ても、8つの割り込みが必要ですか?もちろん、私はまだINTE、PORTB0変更のために使用できます。その後4 + 1 = 5、しかし、どのような他の約3?(ただし、8つの割り込みイベントはすべて同じタイプ4 + 1 + 3 = 8なので、醜いように見えますね。) 8ピンを監視すること以外に、マイクロコントローラから期待される他の重いタスクはありません。(他のタスクについては、一連の個別のカウンター変数を維持し、頻繁に約4バイトをPCにシリアルに送信する必要があります) どんな提案でも大歓迎です。それがマイクロコントローラーをより適したものに変更することについてであってもです(しかし、ええと。sから離れるように言わないでくださいPIC)。

2
PCINTn割り込みをトリガーしたピンを特定するには?
同じAVR PCINT割り込みを引き起こす2つのピンがある場合(たとえば、PCINT0またはPCINT1ピンによって引き起こされるPCINT0 ベクトル -ベクトルとピンの名前の重複が混乱していると思います)、どのピンを決定する唯一の方法だと思いますか? (s)割り込みが原因で、各割り込みの後に状態が記録され、PCMSKnで有効になっているすべてのピンの以前の値と現在の値が比較されますか?
9 avr  interrupts  atmel 

4
Arduinoでタイマー割り込みを作成するにはどうすればよいですか?
Arduinoで時間遅延割り込みを作成しようとしています。これは内部割り込みなので、interrupts()関数を使用したいと思います。 例:割り込みのタイミングのみでライトを点滅させたいとしましょう。 サンプルコードがありますが、外部割り込み(attachInterrupt())を使用しています。内部割り込みを使い続けたいのですが。

5
マイクロコントローラーの割り込み処理とFSMの例
最初の質問 マイクロコントローラでの割り込みの処理について、一般的な質問があります。私はMSP430を使用していますが、質問は他のuCにも当てはまると思います。コードに沿って頻繁に割り込みを有効/無効にするのが良い方法かどうか知りたいのですが。つまり、割り込みの影響を受けないコードの一部がある場合(または、さらに悪いことに、何らかの理由で割り込みをリッスンしてはならない場合)、次のことを行う方がよいでしょう。 クリティカルセクションの前に割り込みを無効にしてから、再度有効にします。 それぞれのISR内にフラグを設定し、(割り込みを無効にする代わりに)クリティカルセクションの前にフラグをfalseに設定し、直後にtrueにリセットします。ISRのコードが実行されないようにするため。 どちらもないので、提案は大歓迎です! 更新:割り込みと状態チャート 具体的な状況をお知らせします。4つのブロックで構成されるステートチャートを実装するとします。 遷移/効果。 終了条件。 エントリー活動。 活動を行う。 これは大学で教授が私たちに教えたものです。おそらく、それを行う最良の方法は、このスキームに従うことではありません。 while(true) { /* Transitions/Effects */ //---------------------------------------------------------------------- next_state = current_state; switch (current_state) { case STATE_A: if(EVENT1) {next_state = STATE_C} if(d == THRESHOLD) {next_state = STATE_D; a++} break; case STATE_B: // transitions and effects break; (...) } /* Exit activity …

2
STM32F4キューブHAL UART。バグですか、何か不足していますか?
割り込みベースのUART IOを使用しています(DMAなし)。 HAL_UART_Transmit_IT関数はレジスタのEIEビットを設定しCR3ます。STM32F407データシート(および実際の動作)によると、これはマルチバッファーモード(DMARビットが設定されている場合)でのみ割り込みを生成します。EIEフレームエラー(FE)、オーバーランエラー(ORE)、ノイズエラー(NE)の割り込み生成を有効にします。このエラーは、私が理解しているように、受信のみを目的としています。 HAL_UART_IRQHandler機能の一部: tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE); tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR); /* UART Over-Run interrupt occurred ----------------------------------------*/ if((tmp1 != RESET) && (tmp2 != RESET)) { __HAL_UART_CLEAR_OREFLAG(huart); huart->ErrorCode |= HAL_UART_ERROR_ORE; } if(huart->ErrorCode != HAL_UART_ERROR_NONE) { /* Set the UART state ready to be able to start again the process */ …

3
Cortex M0のCMSISに割り込みハンドラーはどのように実装されますか?
LPC1114キットを持っています。過去数日間、Cortex M0のCMSIS実装を調査して、その中でどのように処理が行われているかを調べてきました。これまでのところ、各レジスタがどのようにマップされ、どのようにアクセスできるかを理解しました。しかし、それでも割り込みがどのように実装されているのかわかりません。CMSISの割り込みについて私が知っているのは、スタートアップファイルにいくつかの割り込みハンドラ名が記載されていることだけです。また、起動ファイルに記述されているのと同じ名前のC関数を記述するだけで、独自のハンドラーを作成できます。私を混乱させるのは、ユーザーガイドでは、すべてのGPIOを外部割り込みソースとして使用できると記載されていることです。ただし、スタートアップファイルに記載されているPIO割り込みは4つだけです。だから教えてください: 他のGPIOの外部割り込みハンドラーを実装するにはどうすればよいですか? 割り込みテーブルはCMSISのどこにマップされていますか? NVICとAVR / PICの割り込み実装の主な違いは何ですか?(NVICはフラッシュのどこにでもマッピングできます)
9 arm  interrupts 

2
ATtiny13A-CTCモードでソフトウェアPWMを生成できない
ATtiny13Aを使ってリモコンのRGB LEDライトを作ろうとしています。 私はATtiny85がこの目的により適していることを知っており、最終的にコード全体に適合できない可能性があることを知っていますが、今のところ私の主な関心事はCTCモードで割り込みを使用してソフトウェアPWMを生成することです。 私は(と高速PWM以外の他のモードで動作することができないOCR0AようにTOP、私が使用していたIR受信コードは、それがCTCを使用して生成する38 kHzの周波数を必要とするため、基本的に同じものです)OCR0A=122。 だから私は(そしてインターネットでこれが言及されているのを見たことがあります)、ソフトウェアPWMを生成するために割り込みOutput Compare AとOutput Compare B割り込みを使用しようとしています。 OCR0AIRコードでも使用されるは、周波数を決定しますが、これは気にしません。そしてOCR0B、LEDの色を変更するために使用するPWMのデューティサイクルを決定します。 OCR0B値をから0に変更することで、デューティサイクルが0〜100%のPWMが得られると期待していますOCR0A。これは何が起こるべきかについての私の理解です: しかし実際に起こっていることはこれです(これはProteus ISISシミュレーションからです): 以下を見るとわかるように、約25%〜75%のデューティサイクルを取得できますが、〜0-25%および〜75-100%の場合、波形はスタックし、変化しません。 黄色の線:ハードウェアPWM REDライン:固定デューティサイクルのソフトウェアPWM 緑のライン:デューティサイクルが変化するソフトウェアPWM そして、これが私のコードです: #ifndef F_CPU #define F_CPU (9600000UL) // 9.6 MHz #endif #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main(void) { cli(); TCCR0A = 0x00; // Init to zero TCCR0B = 0x00; TCCR0A |= …
8 avr  pwm  interrupts  attiny 

5
レベルベースの割り込みの意味は何ですか?
レベルベースの割り込みの実用的な実装について検索したところ、ISRに入るとすぐに割り込みが無効になるので、トリガーが戻されないという提案が1つだけ見つかりました。 私が読んだ別のことは、それがループを作成するために使用されるということです。つまり、割り込みが存在する限り、ISRを提供しますが、それはwhileor do whileループで達成できます。 そして、レベルエッジ割り込みが提供する利点は、ISRとレイテンシの処理の間にメインプログラムの1つの命令を実行する贅沢かもしれません。私は推測する。 それで、レベルエッジ割り込みを理解する上で欠けているものはありますか? 素晴らしい答えは、レベルベースの割り込みのある種の実際的な使用法を私に示すことです。

4
STM32F303 MCUの割り込みレイテンシ
私は、外部割り込みに応答する必要があるSTM32 MCU(正確にはSTM32303C-EVALボード上)を含むプロジェクトに取り組んでいます。外部割り込みに対する反応をできるだけ速くしたいのですが。STのWebページから標準のペリフェラルライブラリの例を変更しました。現在のプログラムは、PE6の連続する立ち上がりエッジごとにLEDをトグルするだけです。 #include "stm32f30x.h" #include "stm32303c_eval.h" EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; static void EXTI9_5_Config(void); int main(void) { /* Initialize LEDs mounted on STM32303C-EVAL board */ STM_EVAL_LEDInit(LED1); /* Configure PE6 in interrupt mode */ EXTI9_5_Config(); /* Infinite loop */ while (1) { } } // Configure PE6 and PD5 in …

6
割り込みとハードウェアボタンのサンプリングの違い?
割り込みに接続したハードウェアボタンがありますが、問題はボタンが少しバウンスして、ボタンを押したときに信頼性が低下することです。これらの問題の多くはメインループでサンプリングすることで解決されると思いますが、それは技術的に間違っていると感じています。 割り込みは回路内通信に適していますか、それとも割り込みはハードウェアスイッチにも適していますか?もしそうなら、どのデバウンス技術を使用できますか? タイマー変数を保持し、現在の時間、遅延、およびその他の手法と比較してみました。バウンスが非常に速いかのようで、それは重要ではありません。

2
STM32のUSART(UART)割り込みフラグをクリアしますか?
STM32F105を使用して、UARTを使用するLinx GPSチップと通信しています。 割り込みを使用しない場合(RXフラグをポーリングするだけの場合)、問題なく動作します。しかし、割り込みを使用しようとすると、予期しない結果が発生します。 たとえば、を使用してRXNE(「RX not empty」)割り込みのみを有効にする場合USART_ITConfig(USARTx, USART_IT_RXNE)、コードはこの1つの特定のイベントのISRにのみベクターする必要があります。ただし、割り込みはオーバーラン状態でもトリガーされます。 フラグをクリアする限り、メソッドはフラグに依存しているようです。オーバーランフラグ(USART_IT_ORE)をクリアするには、ユーザーマニュアルに、最初にUSARTx_SRレジスタを読み取ってからレジスタを読み取るべきと説明USARTx_DRされています。これは機能します。フラグはクリアされます。 USART_ClearITPendingBit()関数もありますが、フラグの小さなサブセットしか受け入れません。 選択的に有効にできる8つの異なる割り込みソースと、10の異なるフラグがあります。 これらのフラグをすべて管理する方法の概要はどこにありますか?

1
PCI割り込みを有効/無効にする
PCIeドライバーを実装しています。割り込みを有効または無効にすることができるレベル、または割り込みを有効にする必要があるレベルを理解したいと思います。OSは、どのプラットフォームにも関連していると想定しているので、意図的に指定していません。レベルとは、次のことを意味します。 OS固有の割り込み処理フレームワーク 割り込みは、PCI / PCIe構成スペースレジスタ(COMMANDレジスタなど)で無効または有効にできます。 割り込みもデバイスレベルでマスクできます。たとえば、ホストに対して特定の割り込みをトリガーしないようにデバイスを構成できます。 PCIeで使用されている割り込みタイプ(INTxエミュレーション、MSIまたはMSI-X)は、ホストOSに配信する必要があることを理解しています。 だから私の質問は-実際にはすべてのレイヤーで割り込みを有効または無効にする必要があるのですか、それともハードウェアに最も近い、たとえば関連するPCIレジスタでのみ十分ですか?
8 interrupts  bus  pcie 

1
AVRの割り込み中にコールスタックはどのように動作しましたか?
(Arduino Unoに固有...) AVRマイクロコントローラーで割り込みが発生し、関数を呼び出すと、スタックはどうなりますか?コンパイラーはコードをインライン化しますか?スタックをどこかにキャッシュしてから、スタックポインターをリセットしますか?割り込み専用のセカンダリスタックはありますか? 私が理解しているように、割り込みのベクトルは、アセンブリでの直接GOTOコマンドです。また、マイクロコントローラーが自動的にスタックを台無しにすることはないと思いますので、おそらくそのままにしておきます。ただし、ISR中に関数がどのように機能するかはまだ説明されていません。

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