2

omap4460 (cortex a9) でベア メタル コード (OS なし) を書いていますが、gptimer1 を正しくセットアップできません。

これは私のコードです(OMAP4460 TRMに従って)

/* for forwarding pending interrupts from distributor to Cpu interfaces */
*(volatile unsigned int *)(GICD_BASE + GICD_CTLR ) |= 0x00000001;

/* signaling interrupt by the cpu interface to the connected processor*/
*(volatile unsigned int *)(GICC_BASE + GICC_CTLR ) |= 0x00000001;

/* position the timer1 handler */
irq_table_function[GPT1_IRQ] = timer1handler;

/* clocks timer1 block */
*(volatile unsigned int *)CM_WKUP_CLKSTCTRL |= 0x00000003;
*(volatile unsigned int *)CM_WKUP_GPTIMER1_CLKCTRL |= 0x01000000;
*(volatile unsigned int *)CM_WKUP_GPTIMER1_CLKCTRL |= 0x00000002;

/* enable GPTimer1 functional and interface blocks */
*(volatile unsigned int *)GPT1MS_TIOCP_CFG |= 0x00000300;

/* capture interrupt enable */
*(volatile unsigned int *)GPT_TIER |= 0x00000004;

/* enable autoreload */
*(volatile unsigned int *)GPT_TCLR |= 0x00000002;

/* prescaler equal to zero */
*(volatile unsigned int *)GPT_TCLR &= ~0x0000003C;

/* positive increment value */
*(volatile unsigned int *)GPT_TPIR = 232000;

/* negative increment value */
*(volatile int *)GPT_TNIR = -768000;

/* load value */
*(volatile unsigned int *)GPT_TLDR = 0xFFFFFFE0;

/* enable timer1 */
*(volatile unsigned int *)GPT_TIER |= 0x00000001;

コードを実行すると、割り込みベクトル テーブルに移動しません。「svc 0」が機能するため、割り込みベクトル テーブルは正しく設定されています。

タイマーカウンターが動いているのさえ見えません。

私が欠けているものについて何か考えてください。ロニー。

4

2 に答える 2

1

タイマー モジュールの電源が入っていること、およびタイマー モジュールへのクロックが有効になっていることを確認しましたか? クロック ソースの選択は、電源、リセット、およびクロック管理 (PRCM) モジュール (TRM の第 3 章) で行われます。

電源を有効にしておらず、PRCM モジュールのタイマー ペリフェラル ブロックにクロック ソースを構成していない場合、タイマーは何もしません。

于 2014-03-12T08:27:45.917 に答える