fc2ブログ

[NEEK]MMC SPI割り込み設定時不具合(1)

これまでの背景(備忘録もかねて)

・NEEKで成功した画像表示回路をVEEKへポーティング中。
 画面写ったけど、ちらちらして、SGDMAか何かの設定ミスってる。
 原因分からないので、NEEKで成功した時の各周辺回路のレジスタ値と比較してみる事に。

・NEEK成功構成をバックアップしたはずが、動かない。System IDミスマッチとか、SSRAM
 にNiosIIプログラムがダウンロード出来ないとか。
 これらは解決して、安定動作する構成出来たと思われる。
   ☆SD I/F → ☆SGDMA(SD to DDR) → ★DDR I/F → ★SGDMA(DDR to LCD) → ★Video Pipeline
☆:未実装、★:実装済

・SD I/FとSGDMA(SD to DDR)を組み込んだHW構成にした。
   ★SD I/F → ★SGDMA(SD to DDR) → ★DDR I/F → ★SGDMA(DDR to LCD) → ★Video Pipeline
 NEEKで成功したSWのうち、順番に追加していってる。(今ここ)
 SD I/F用回路を追加したので、IRQの登録をしてみたら動かない。

    alt_irq_register(2, (void *)edge_capture2, mmcspi_irq_handler );

 という1行を入れると動かなくて、最初のLEDチカチカもしてくれない。上のコードの前なんだから、
 LEDチカチカまでは動いても良いように思うのだが。
 上の一行を抜かすと、LEDチカチカした上でUART出力(irq setting done.)まで動く。

     :
void mmcspi_irq_handler() {
uart_putout_reg("mmcspi_irq_handler.", 0x0 );
}
void ddr2lcd_sgdma_irq_handler() {
uart_putout_reg("ddr2lcd_sgdma_irq_handler.", 0x0 );
}
void jtag_uart_irq_handler() {
uart_putout_reg("jtag_uart_irq_handler.", 0x0 );
}

int main() {
int i, k ;
for (i = 0; i < 20000; i++){}; // wait until start up 2012.3.2

for (k = 0; k < 2; k++){
IOWR_32DIRECT(LED_PIO_BASE, 0x00, 0xffffffff);
for (i = 0; i < LED_BLINK_CYCLE; i++){};
IOWR_32DIRECT(LED_PIO_BASE, 0x00, 0x00000000);
for (i = 0; i < LED_BLINK_CYCLE; i++){};
};

volatile int edge_capture0, edge_capture1, edge_capture2, edge_capture3, edge_capture4;

//======================================================================
//
// interrupt handler settings
//
//======================================================================
alt_irq_register(0, (void *)edge_capture0, ddr2lcd_sgdma_irq_handler ); // IRQ = 0 にDDR to LCD SGDMA割り込み登録
alt_irq_register(1, (void *)edge_capture1, sd2ddr_sgdma_irq_handler ); // IRQ = 1 にSD to DDR割り込み登録
// alt_irq_register(2, (void *)edge_capture2, mmcspi_irq_handler ); // これを実行すると、上記のmain冒頭のLEDチカチカが成功しない。
alt_irq_register(3, (void *)edge_capture3, uart_irq_handler ); // IRQ = 3 にUART割り込み登録
// alt_irq_register(4, (void *)edge_capture4, jtag_uart_irq_handler ); // IRQ = 4 にJTAG UART割り込み登録

uart_putout_reg("irq setting done.", 0x0 );
      :




NEEK成功時との違いは、起動直後のLEDチカチカである以下を挿入した事だったので、
試しに、mmcspi_irq_handlerを実行する代わりに、以下をコメントアウトしたら動いた。
LED_PIO_BASEのアドレスが間違っている訳でもなく、なぜこの部分を追加すると動かないか謎。

for (k = 0; k < 2; k++){
IOWR_32DIRECT(LED_PIO_BASE, 0x00, 0xffffffff);
for (i = 0; i < LED_BLINK_CYCLE; i++){};
IOWR_32DIRECT(LED_PIO_BASE, 0x00, 0x00000000);
for (i = 0; i < LED_BLINK_CYCLE; i++){};
};

スポンサーサイト



カレンダー
02 | 2012/03 | 04
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード