找回密码
 注册
关于网站域名变更的通知
查看: 1490|回复: 3
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include "system.h"
* k9 F$ x( }& f$ P& O#include "alt_types.h"$ ?) w' H: {8 q  }9 O3 i  H7 o
#include "altera_avalon_pio_regs.h"5 h! h4 Z( a( i  J
#include "sys/alt_irq.h"
7 W0 d9 O2 q/ F; t, i
1 _* W! {7 |+ K& L! Bvolatile int edge_capture;
1 ?7 ]$ ^; x, l( `3 G8 tvolatile int data_reset = 0;$ X1 k3 D+ s( ?( F( G, n
//中断服务程序,向设备发送1024个数据
0 O: @" b/ @5 b2 w1 F  v7 Hstatic void trans_data_to_lpc(void *context)3 N! }  q0 l& Z7 @% a, D
{
2 e: I! B( Z7 N5 @. V4 I3 T0 t    int i = 0;0 b' g5 L* @& ^7 U
    int j = 0;/ V) ^, U3 R! C3 P
    alt_u8 data_to_lpc;2 [6 ~' y. a' j% ~
    alt_u8 data_trans_req;
2 k) F8 G0 G' b! `: n# ]    volatile int *edge_capture_ptr;
/ T. u2 f  H+ W7 D- R  _5 j5 ^# k! `    ) q% r9 I, [/ ]# H4 E1 }) {
    alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);' r& s4 {' M0 }( i$ {( O! S) P
   
( Z3 m: _& T" i- ~- e    data_to_lpc = data_reset++;2 D6 z% o% J% |1 J8 H% y" n
    data_trans_req = 0x00;7 H$ S# W- R& V" M/ i9 P
    edge_capture_ptr = (volatile int *)context;
& F0 n+ P7 A0 t* U6 M$ ?    1 h( R( O# i; F& }6 d
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;. z( G/ O4 {0 W7 Q% Q
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;
3 g1 J  W" r* I: P, j) R    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
$ M7 `, n' p! V   
$ N( u" @( S0 P    for(i=0; i<1024; i++)
4 k& z& N8 |' i' E" s4 e3 S    {. A5 T4 B8 t: [1 x; K- C, C# N
        data_to_lpc++;) k5 c- X: Z: Q; k* c
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data
; y( z* a5 B, _( I        data_trans_req = ~data_trans_req;
9 _2 [. N0 v! A        IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;
% a" Q( C( N# t5 @4 |- ]        while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
- X: e( r/ h8 X! S- y9 O  ]$ C% J5 J        {
4 Q$ j6 j0 J# h6 h8 }; s            j++;7 j$ I% j; l# o  s
            if(j>10000000)
: }) }7 R/ A: O1 ]  l1 ?5 a( f7 S+ `            {% K( I9 s. c2 s
                IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;
& R8 Q4 O" e) A, f4 H* p- F, O                alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);% g) D0 `4 S4 B8 a' f
                return; // time out;
3 S0 r+ H9 `: I3 ~7 L! T! d            }) e3 ]& b( r; I- o+ }
        } // wait lpc recieve data complete;. {- n# h7 c; n4 c  X, U! \
    }
3 ~& [1 |' B. G; Y+ M- F4 ]& T    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;  , |! n+ p6 X  r9 j
    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);4 L" r8 s4 u" z8 P; l
    , |3 _+ Q( ~3 N( P4 _* O6 N
    return;
# j( n5 a- [2 Y/ t; Z- n: b% ~}7 {/ ?# L% R4 J
6 C8 v0 v( Z+ n; P; y! [
int main()/ v, J7 r' N, I$ b4 [
{4 E, h7 K/ n8 C+ t
    alt_u8 led = 0xF;   
- y  f) z0 W- `9 L9 F; g    - w4 U6 A9 x" Q6 u: O
    int i = 0;
5 n- h) n& z7 r* [3 z    void *edge_capture_ptr = (void *)&edge_capture;
8 N& l/ L; H! ^. p    //====Init====  
- _0 S! q* Y( `4 Q5 X# g    alt_irq_init(PIO_LPC_DATA_REQ_IRQ);+ n+ S  C7 k; \" R+ q* D/ F" i6 b
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);) P/ p! F1 c! g; s! I
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;8 `9 R/ Y9 ^0 e
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;$ C0 r/ q: b" k, p; E5 o/ ~3 }) Q4 }
    alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
- h( ]' D+ L8 ^  d3 E. P    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);: N2 k# i* h& `1 D! v( l
    //============( P0 f, S! S; e) O  N, \( O1 q9 n
    while(1)
( ~4 Q4 s! I  @, e" v+ X( C  o" T+ \    {9 c! N7 F2 \  O! x( y$ V/ H" a
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
# E$ k' k6 A/ \0 H* t& G. U        led = ~led;     7 _0 b7 {: c. P3 t& v; V) {# j8 |
        i = 0;
: [% D" u2 o/ \% b/ A4 F. b        while(i<100000000)
* E6 |- w8 }3 b* [9 ~0 r            i++;5 M: I  f+ U: E: M  z, \
    }
/ u8 y# I6 R; B3 D  k5 J4 I    return 0;
' e: }; u* L0 @! y* J9 V0 h8 P* s  n}

该用户从未签到

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

说明

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

该用户从未签到

3#
发表于 2008-12-9 22:10 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-5 05:20 , Processed in 0.125000 second(s), 25 queries , Gzip On.

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

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

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