- UID
- 104171
- 性别
- 男
|
Hi, 大家好,想請問一下設計nios 中斷時的問題。
下面是我的source code,*p是存放二個16bits的operand的register,
*(p+1) 是用來觸發電路(也就是當*(p+1)為1的時後電路才開始運作),*(p+2)
是存放運算出來的結果的register。原本用polling的方式做是可以執行的。
現在我將電路加上irq signal,改用下面的source code 來執行,發現算出來的結
果只會是0,這種設計的方式是那裡錯了嗎??
我設計的電路,它在運算結束後,irq signal的起來一個clock cycle,接
著就自動設回0 (不知道這樣會不會有問題^^)。其實我並不是非常清楚isr的設計方式
,有高手可以跟我再說明一下嗎??因為我看了document還不是很了解。
謝謝大家了。
#include
#include "excalibur.h"
int x,y,i,z;
int m = 0;
int *p;
int get_result(int context); // my isr
int main(void)
{
int context = 0;
printf("startCompute \n");
x=128; //first operand
y=32; //second operand
nr_installuserisr(na_mult_irq, get_result, context); //install isr
p=0x500;;
*p=(y<<16)+x; //combine two operands in a 32bits operands
*(p+1)=1; // enable the computation
m = z; // get the isr result !!?
printf("%d * %d = %d\n" ,x,y,m);
return 0;
}
int get_result(int context) // the isr routine
{
z = *(p+2); // get the computation result
return z;
} |
|