1

現在、Crossworks ARM (2.1) を使用していますが、LPC2368 MCU の割り込みに問題があります。

アクションの 2 つのコース (UART の例):

1) 働くもの:

  • uart の初期化と IRQ の実装全体は main.c ファイルにあります。
  • Crossworks で必要とされるため、コードは VECTORED_IRQ_INTERRUPTS フラグを使用してビルドされます
  • すべて正常に動作します (エコー テスターは応答しています)
  • IRQ cpu を終了した後、モードをスーパーバイザーに変更しています (ビルド フラグも設定されていました)。これはクールで機能しています。

2) 動作していないもの:

  • cpu は、main.c 以外のディレクトリ ((ProjDir)/SystemCtrl/) の別のファイルにあるルーチンによって初期化されます。
  • uart init 関数は、ネストされたディレクトリ ((ProjDir)/SystemCtrl/LPC/libuart) に設定されます。
  • 起動後はすべて問題ありません。ボーレートは問題なく、UART は正しく初期化されています

最初の悪い点: データが最初に受信されると、IRQ が適切に呼び出されます。ただし、受信データは異なります (つまり、送信: 0x31、受信: 0x82)。

2 つ目の悪い点: 間違ったデータが受信された場合でも、echo は PC に異なる値を送信します! (つまり、送信: 0x31、受信: 0x82、エコー送信: 0xFE)

3 つ目の悪い点: IRQ が終了し、CPSR の IRQ モードがまだ設定されている! I フラグはクリアされません。IRQ には属性((interrupt(IRQ))) があります。そして、まだ正しく動作していません。

誰にもアイデアはありますか?何が悪いのかわかりません。スタックサイズも変更しました(奇妙なスペースで何らかの形で失われたのではないかと思いました)。ディレクトリをネストすると、どのようにすべてが壊れますか? 設定を変更せずにクリーンプロジェクトでもテストされました。

4

0 に答える 0