找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 964|回复: 3
打印 上一主题 下一主题

大家帮我看看这段中断程序

[复制链接]

1

主题

4

帖子

-1万

积分

未知游客(0)

积分
-11996
跳转到指定楼层
1#
发表于 2008-12-3 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
#include "system.h"
* V* g: O5 f- S0 t#include "alt_types.h"4 D; @" G! [9 P$ `% O+ W
#include "altera_avalon_pio_regs.h"
. o8 u9 x$ S' g; O/ g# \3 A#include "sys/alt_irq.h"; [# @- h0 E) P& c5 s( a' _' D! X
1 f% U9 V0 m. ]% |" u2 K
volatile int edge_capture;; _/ R2 B9 D+ U* V
volatile int data_reset = 0;2 U/ j2 j0 g- g+ m& D: @' w" J6 L- ]
//中断服务程序,向设备发送1024个数据
$ Y' B6 W" V9 |) W- j" Vstatic void trans_data_to_lpc(void *context)
! u& \  M* W( _! m: Q# |{9 `+ z. @9 S- y
    int i = 0;
; H! U! C0 j9 O0 w    int j = 0;( y( n8 }6 z$ }% l# G6 F( P9 L
    alt_u8 data_to_lpc;+ T0 m( h) D& N9 T% D% {
    alt_u8 data_trans_req;$ H" e# k+ y% ]+ C) M5 z
    volatile int *edge_capture_ptr;
2 K# P1 l. m2 M& c" b- L    & e% d9 E0 _5 o& }# \' H+ I9 v6 Q
    alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);
9 f0 n3 s8 ~$ C% a/ L. v   
, U9 k$ s0 E7 x! ~. G5 u8 a" s    data_to_lpc = data_reset++;
/ u* s/ A3 K3 A* a& u    data_trans_req = 0x00;
0 B' A, X! {3 F& x3 K6 X) s    edge_capture_ptr = (volatile int *)context;
0 k" V7 V% Q$ A0 w   
' H; |3 ]/ l( O+ d( O- @3 Z4 {( j$ j2 j; C    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;
7 V+ k+ M8 L7 ]5 E1 A. V    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;& [! ]/ A" H! B" C( E! R! u0 e
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
1 L* L2 p- V! A' P0 q9 [: r      b+ w. p7 r" e7 u; i
    for(i=0; i<1024; i++)
: y; x8 U9 ]' P( {" _6 b) D; i! {    {) y5 X. j# ^1 P' C; U
        data_to_lpc++;
1 x! ]# u7 z' K. ]8 F, G        IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data
* W) k7 Z* A( r! N! c: y: C4 J        data_trans_req = ~data_trans_req;
- s0 E$ h0 _. ?: V        IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;
# h: ?7 L! s' u/ Q9 ?2 x1 W+ Z        while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
3 n3 K6 H3 L' E        {2 E. O+ g' G" s
            j++;
8 M% f9 n/ O: a: J& R$ V            if(j>10000000)
: b# q" ]" S+ I! y2 U0 C2 J            {
7 d$ }1 p; }5 |" y                IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;6 N9 N' M  h9 W
                alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);- a) }" F" R2 |8 |6 W
                return; // time out;
$ K9 v' @- M& a5 I* R$ g2 g/ b9 P            }4 `" a3 x7 n$ W- g/ i) D% p
        } // wait lpc recieve data complete;
7 k# f/ J! U( y    }5 _& F% {9 c. a# Z0 v
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;  " r; W% n9 r) i8 j( o# b. d/ y9 _
    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);. a* A+ B. e5 e
   
7 B% T: q/ E% @    return; - j2 }( A# k  j
}
3 Y; r0 g2 w( }2 X$ {+ C/ X+ F
( p$ @$ y7 I+ F+ s+ y. eint main()
8 z8 N5 R; v0 Z- S9 N; ~4 x9 e2 k{, K1 |+ Z: D1 x8 f6 b
    alt_u8 led = 0xF;   
4 u/ m) W1 p9 K) q3 m' y2 u) P' N+ R1 G, n    ( x0 [& ~5 Z2 Z% B5 C0 p' `8 p
    int i = 0;% j8 L) f' L* l/ U
    void *edge_capture_ptr = (void *)&edge_capture;& W+ E9 g* \0 [& S+ W$ I* V
    //====Init====  3 @$ A, n7 U  K: w7 K' S0 m6 G' |
    alt_irq_init(PIO_LPC_DATA_REQ_IRQ);: m1 M/ T- I* D& A( c
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);
! _# M% P& ?  u+ w* W7 ~    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;" V' E7 }3 Y: v
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;
. Y( y+ w+ z' h% H( `    alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
* Z" J, J' T! k    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);. j# G% }0 ^4 ]- x" `" M0 K9 u( F
    //============( C5 L. _2 ~! r# W* d' t
    while(1)! S' q6 @8 p" A/ R
    {4 {/ p0 G! Q* C) P6 K2 q9 D' q, E8 T
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁* W8 I1 J0 M/ h& h1 j% O
        led = ~led;     
" E# w! e( m9 l, F6 W# E# ?! _        i = 0;
+ j, U1 _. F; I: D5 v        while(i<100000000)
4 `& g0 K2 |) I5 j' v; |, b" k            i++;5 g0 w1 Z( |6 J! q
    }  g/ ^7 K" B8 g7 H
    return 0;: c" l- k) S5 o' C3 p5 A" ?
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

1

主题

4

帖子

-1万

积分

未知游客(0)

积分
-11996
2#
 楼主| 发表于 2008-12-3 20:47 | 只看该作者

说明

中断服务程序是在中断产生的时候向设备发送1024个数据,然后返回继续LED闪烁,现在设备可以连续的从niosii获取数据,可是程序始终无法返回,在不获取数据的时候,无法继续闪烁led,这是怎么回事啊?谢谢!!

5

主题

59

帖子

-1万

积分

未知游客(0)

积分
-11981
3#
发表于 2008-12-9 22:10 | 只看该作者
设断点试试

4

主题

204

帖子

-1万

积分

未知游客(0)

积分
-11837
4#
发表于 2009-3-17 14:45 | 只看该作者
中断一般不要做那么多东西吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-23 16:28 , Processed in 0.057712 second(s), 33 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表