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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include "system.h"
* B2 ?* g: j) c3 D+ C) {% Q#include "alt_types.h"4 N1 C  H" p9 @) r: a% n* N& |
#include "altera_avalon_pio_regs.h"
) u, H6 _" B. ?* \" }#include "sys/alt_irq.h"
* _3 O5 D- s! U6 o9 w5 S7 V
4 d  Y% \- |2 p/ ~7 }2 Pvolatile int edge_capture;
& T( O2 c4 |% e# E/ A1 a) y& i) _volatile int data_reset = 0;
2 M5 L, {4 `( g' J//中断服务程序,向设备发送1024个数据; x. |  w, s9 A7 n, P; r' Y/ {
static void trans_data_to_lpc(void *context), n* M; b6 i2 i' g1 r
{: y9 n+ K6 X$ I! ?. R
    int i = 0;* N5 g! \3 w6 g, X8 V$ l# d. `% g
    int j = 0;' d. c& G- n; o; k% k
    alt_u8 data_to_lpc;
" @5 ?! _5 @2 w# n& J    alt_u8 data_trans_req;+ h, @# @: G* T" i: k, q3 ]
    volatile int *edge_capture_ptr;
5 T* _0 }, Y7 F/ c* ]' x   
* ]4 V& A' R4 p& f1 Q    alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);
3 u0 Q, I5 A' o3 p% j    , ?: f+ G5 x- s, ~
    data_to_lpc = data_reset++;
' F& ]5 l, T! k& B/ j! @; D8 D9 P    data_trans_req = 0x00;' f4 G* C) w- K  p3 Y( k6 L
    edge_capture_ptr = (volatile int *)context;
9 {* K0 E0 @" Z+ R" g   
7 r4 @* z' j3 A    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;
7 M$ V" w$ w/ |& ~' A    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;9 I6 \7 _+ Z- ?6 y0 I! `% f
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
6 ^2 H9 U: h( [; U4 j, x  v! C- f    $ d3 J, ?, h/ u# Q: @8 V. a
    for(i=0; i<1024; i++)+ h7 a2 f- X8 I2 ]
    {; D/ ~, k, M  h) }9 |
        data_to_lpc++;% s2 v4 a9 ?" s0 \/ o7 N  R9 U
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data+ [8 ?, U0 D2 H" I( x+ I1 |
        data_trans_req = ~data_trans_req;1 @! x( f; h5 ^2 m7 G# ?
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;& d3 c' e+ S" D$ q  U
        while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
, N" Q2 ]3 X* h6 s        {3 `% t- E; N5 T( M0 r
            j++;
$ q' J9 R" l" `( _! L0 j6 f            if(j>10000000)7 J$ i" j# u: h5 k  u
            {
& ]1 m. h  C9 K, C8 D                IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;- T- o! o# y5 a3 a1 g9 L7 q% T
                alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
. z+ l) Z5 R* Z- w# X3 a                return; // time out;
; }' o# V( s/ B3 v$ Y" B9 u4 @% q            }
0 c! @+ k" i  A( ?" G        } // wait lpc recieve data complete;% \' G4 Z6 i% ]/ o- x- X3 q
    }, H* _% ^* q7 O0 f) A$ n: f
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;  , f5 w: Z& ]& Y# z) ]3 N
    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
! G! P, k% M  m  U   
5 P+ h; ~# D, {    return;
" M5 q% |( G  m+ n1 A4 R: y# C}
- Q/ c& F7 Z- G: f  F) @/ X6 k1 _0 \$ D' J& W& z6 P9 k
int main()9 m9 s% x& b4 a4 j7 R# a
{
7 m4 ]) o+ J) {7 P6 P$ p    alt_u8 led = 0xF;     r2 _1 i1 l% T% J/ |* t
    2 g( d* u' Z! m' Q3 u
    int i = 0;
9 a) t+ o  m: T    void *edge_capture_ptr = (void *)&edge_capture;; w: M; X) ?* b7 F  s
    //====Init====  
6 N2 d6 k* W6 B. z- g4 t    alt_irq_init(PIO_LPC_DATA_REQ_IRQ);
# \+ C5 c' r! t) e6 M    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);
' ]6 ^4 C$ w# c  D# I/ G    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;
3 I; C2 ?$ C/ X, B    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;# S; g6 R, r( j  [
    alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
/ U) q! t" I5 }3 }( h    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
4 d- i3 L; B2 `    //============
3 V3 R8 I3 \# h( j0 r  {0 F    while(1)
4 k- W; U9 D9 n4 @) n) @# A    {
( g/ |' k8 A, P8 Q# k  z6 n        IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
/ H' n: W/ f4 [/ L9 Y        led = ~led;     ' j: l+ c; x) a8 Q% D! o, O
        i = 0;
% }' T# ]8 x, E0 S# T        while(i<100000000)+ l# ~' y+ o) k# |0 a2 s+ L. y% I
            i++;
, c" o9 u% O8 ^% p. ?    }
/ H; J' H+ n$ H: ^% K% f3 j1 u- P    return 0;
7 P2 E/ r  D( a3 n% R% q' T) t}

该用户从未签到

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-7-20 06:22 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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