找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

4

帖子

-1万

积分

未知游客(0)

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

EDA365欢迎您!

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

x
#include "system.h"
7 N, Q- A# b; W8 }#include "alt_types.h"  I5 M7 Y& P# q9 i/ G% s- ^% m* F* u' r- x
#include "altera_avalon_pio_regs.h") j+ r& O: c- |
#include "sys/alt_irq.h"$ Z0 y: k; s( d" f. y* H9 X

8 e3 e9 B+ _7 e6 q$ |3 ]' V8 C- J9 W  Jvolatile int edge_capture;
) L1 P- L' r% X( {! zvolatile int data_reset = 0;
; \6 q7 |+ u0 ?5 J% C' k. l" O//中断服务程序,向设备发送1024个数据
3 x3 z7 m0 [8 N* C- gstatic void trans_data_to_lpc(void *context)
4 v1 ?% L& S8 B( Q{. {! @, j# w) P" H
    int i = 0;6 D8 q* K- ~5 z8 l/ Y4 p( b
    int j = 0;
* F2 q: B; v" u' q+ q2 P, t    alt_u8 data_to_lpc;1 X9 G8 ?' u6 ~3 b) Q4 q
    alt_u8 data_trans_req;
+ T8 ?$ q, @7 x6 j0 _' }0 ~    volatile int *edge_capture_ptr;5 d  o+ N3 U1 a4 _
    0 z) W* U+ w- i, W# Y+ ]$ @; u
    alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);! g2 s- E' z" }- P$ o5 s
   
& }6 X3 E) F* d4 O6 t# o! |    data_to_lpc = data_reset++;
7 U1 V5 O+ F" j- K$ D0 c    data_trans_req = 0x00;
( I1 l; O+ g: w: K    edge_capture_ptr = (volatile int *)context;6 w% D+ ^$ [& S/ J- a+ o, N2 S& p
    % Y6 \5 j2 d: k3 V
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;6 ]5 J, P! i4 [& \) v
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;$ y# H) K# Q: a# ?8 O
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
4 _: @+ {( a3 F; Z$ M" b    3 F# \6 {$ N5 i/ t1 v8 v
    for(i=0; i<1024; i++); \6 i5 r$ K" @" ?2 _) y
    {
1 _2 I! w6 _6 K. d6 V( H0 j        data_to_lpc++;
) y' U7 ~2 K, X$ }- L        IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data
* M" w8 D2 {( ~) `; K" u  b2 o        data_trans_req = ~data_trans_req;
! ^; b7 T* I4 l$ Z/ C        IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;' k1 U& s% g* w. u: Y% X
        while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
, h( Q4 C% X# y% y/ m( @4 `$ r        {5 @# i- i/ d; C, a8 P1 u* a. i5 f' n
            j++;+ I6 {( g) x2 W, R# z( P: O5 ~4 Y
            if(j>10000000)
' h/ V( \8 u$ A2 U1 ?& z            {
8 F3 S7 I( Q, \6 o, S6 A' i                IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;  N; p0 p# s% O1 Y. C0 b  b
                alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);8 `) C; _$ ^+ {
                return; // time out;
3 F" |/ Y0 }5 _+ e            }( V' j7 i+ z4 o
        } // wait lpc recieve data complete;
$ D& `. s' B6 {; @    }
# _, l9 I- L, V/ G) W    IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;  
# K1 ~4 @" k- }4 @' `    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);; D# N; Q& j+ [( y# v- H; n9 l  m
   
5 v3 x& P9 K% K4 ^& v+ {4 _    return;
/ M5 t& ?( z6 P3 u8 _; b}; g; X0 }; j) {* R

$ U2 ^% Y" Y: i( Sint main(). P8 L& [8 ?' g4 L, g1 u, a8 b9 M
{8 Q, R+ h! q* {& v
    alt_u8 led = 0xF;   4 l  \  V2 e0 v- X6 w0 l
   
% a: X* d3 w7 j# |    int i = 0;5 c/ g4 @- K$ W* z
    void *edge_capture_ptr = (void *)&edge_capture;
7 W* E1 c1 {( [( o    //====Init====  
- D0 L- o3 k. @" T    alt_irq_init(PIO_LPC_DATA_REQ_IRQ);
# L4 h+ m, h5 P, A2 L# U    IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);* W1 V/ h' t  V: w9 U. K
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;% R3 X% j. G" ?) W) i6 f& e
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;
! q/ M( K! h% A( ?* N, Q3 @    alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
: A7 a: b/ J* M4 j  x9 y    alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
! ]. L) Z& Q+ V7 ?$ {: l    //============
/ B* i. r& V* p" D( P$ w# g7 e: u    while(1)3 Y4 y+ ]9 n9 x/ ^& r3 {3 o
    {' r' R" J) t; l& W! g
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
' H- Z# v6 q# d        led = ~led;     & h3 \; Z6 o! W) e+ o1 ^  \; Y
        i = 0;
8 u' @0 f" J: Z        while(i<100000000)
# l* K3 w9 @1 t- q3 ]            i++;. X3 p; V3 t( _! L4 ^
    }
: [/ x$ @6 c5 C: ]6 _    return 0;
- c8 y( A2 A, V' ^5 u# _( D}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

4

主题

204

帖子

-1万

积分

未知游客(0)

积分
-11837
4#
发表于 2009-3-17 14:45 | 只看该作者
中断一般不要做那么多东西吧?

5

主题

59

帖子

-1万

积分

未知游客(0)

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

1

主题

4

帖子

-1万

积分

未知游客(0)

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

说明

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-23 21:35 , Processed in 0.055324 second(s), 33 queries , Gzip On.

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

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

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