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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include "system.h"
; w; E4 \) i, P; Q7 o1 j0 B( T#include "alt_types.h"
& e$ o3 m. Q& t* o#include "altera_avalon_pio_regs.h"4 v( Z2 [  S0 P3 X7 |
#include "sys/alt_irq.h"4 `" P* y. q# [: G7 ~
3 V, F1 d$ D+ H- c6 j
volatile int edge_capture;' \% B. A$ A4 v' x; l
volatile int data_reset = 0;
9 W0 ~- p1 z2 Y- ^/ g+ v//中断服务程序,向设备发送1024个数据# f  g1 G; |( r5 q
static void trans_data_to_lpc(void *context)6 U; t: E  L" Q2 i& Z
{/ j2 L# @; y6 D8 D6 A: _
    int i = 0;
/ W, h  z; J2 Q7 t# m- Y! H4 u    int j = 0;* V$ s+ f, ?( a$ N/ i
    alt_u8 data_to_lpc;# a) b/ J- F6 b6 B0 P8 l
    alt_u8 data_trans_req;$ @2 b2 a! h! d3 i* ~5 v  n6 \
    volatile int *edge_capture_ptr;! W/ ~! L$ y$ x% g5 \7 z
   
8 ?7 L1 V/ K+ W% l2 D: U9 y    alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);8 P. K7 N5 D2 a. G
    5 ?2 F# v4 r% ]9 q' H: C/ q2 H
    data_to_lpc = data_reset++;8 }5 W5 j, ~; P) b! _$ G2 v% a
    data_trans_req = 0x00;- ]" [: e8 j4 y
    edge_capture_ptr = (volatile int *)context;
; y8 @! z, ]+ p6 }( \   
6 X6 J: h/ f1 y  K9 n" i5 v    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;5 T% t  C. l% b
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;& M1 ^+ `: I6 m5 H' k
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
+ x% O0 C4 h; W0 b+ \   
' a! Z* _" |# m" R( }  A    for(i=0; i<1024; i++)
" [" o0 B0 }, v2 g: |3 |7 @    {
* |* ?( d4 `; J( k3 W        data_to_lpc++;9 |2 c: P  s7 l
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data8 l+ Z& [: A" z( Y$ V$ C; T
        data_trans_req = ~data_trans_req;4 i0 M- d0 {1 ]/ M% {$ V
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;/ K; g0 L1 Z- i# k0 s6 X1 s
        while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))- d3 U, W4 R+ R9 L# t& \8 T! {' M1 w) M- ?
        {# f3 b" h, l* j
            j++;
  o' E+ V' \% _$ U. }            if(j>10000000)
# G4 z6 j! H/ G: h' X. r            {
2 z8 H! i- f1 t5 e4 }                IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;- @4 }9 z7 t7 S: [+ c
                alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);2 K4 B3 j' @- P  M
                return; // time out;0 |6 Y( F$ e! @! h
            }
# s3 B" I0 z* M- ^+ D        } // wait lpc recieve data complete;
5 _; n$ u& a6 u! L0 [    }  U1 r" n# w& i: s
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;  : l9 ?  E/ C" [) ^2 k7 h5 `
    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);' w7 `9 v( t" T- |
   
! B9 `. _3 e6 s$ R9 J, `( Y7 q. r    return; + E9 T% q8 Y) U, ^# m
}- V1 L* v* M0 ?, g, b  D
! g9 _2 s' |* @" G, c- m2 E! s! y
int main()
6 j0 `8 i% I; o' N  E( P4 {# f0 I{3 |( c5 ^& O9 U1 i# E8 I) N
    alt_u8 led = 0xF;   * o( Q0 E; G, t; W
      m# h" G* Q2 [4 C
    int i = 0;
9 S3 n6 |- \: K    void *edge_capture_ptr = (void *)&edge_capture;
0 o& y4 k0 _! C( v7 G0 i& q    //====Init====  , f9 F  M  Z6 e) ]" q
    alt_irq_init(PIO_LPC_DATA_REQ_IRQ);' t9 k+ _2 y; v# z  ^
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);  I/ b, E# [# n+ A! e5 m
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;- O+ ~* M3 J$ q) L5 v
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;+ c% e4 ]: x: ~/ {8 _) \
    alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
( Y" s' {# O3 S0 A    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);; H6 L7 j: D- @- V: P" X
    //============: C; @) d$ M/ U; A) _: M' x! N
    while(1)
4 f# g- }3 P. J) N0 j    {9 z, b2 C2 f% p; i9 [- h
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
1 x2 j5 @8 G) S6 C( ^. j4 f        led = ~led;     
; k  d9 I$ z  Y7 \        i = 0;
0 S0 v- v9 y  y( M        while(i<100000000)
) l( C" i: p+ @5 f            i++;
; I& _; d: `: a: J" r$ D. ]- ]2 s    }7 D$ W! o4 F2 X7 C5 ?* G
    return 0;
( p. ?0 Y- T2 }0 V}

该用户从未签到

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-8-18 20:41 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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