我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 776|回复: 0

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

[复制链接]

该用户从未签到

1万

主题

1292

回帖

936

积分

管理员

积分
936

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-29 19:25:54 | 显示全部楼层 |阅读模式
#include "system.h"- r/ l: C( t% C" g% q$ v
#include "alt_types.h"
#include "altera_avalon_pio_regs.h"$ W" [8 G8 L. t8 q$ Y) l) i" I: c. M1 E
#include "sys/alt_irq.h"* a7 R6 T1 O3 b! L

volatile int edge_capture;. l+ w`( w- y
volatile int data_reset = 0;
//中断服务程序,向设备发送1024个数据$ j: d' O/ s9 t5 p
static void trans_data_to_lpc(void *context)
{[1 j! i- c: `% G6 a# \
  int i = 0;. PJ, W' ~) Q% Z% v& c; M& h6 O
  int j = 0;u( C* zJD7 d1 d6 uY. ^
  alt_u8 data_to_lpc;
  alt_u8 data_trans_req;
  volatile int *edge_capture_ptr;/ a3 E9 [" L7 U[, ^3 s6 e
  s9 D0 I- Y! B9 ?6 M
  alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);2 x/ F" d2 u0 U) H. U
  , K! \8 g4 T6 e. }2 N
  data_to_lpc = data_reset++;0 z0 H% X/ p! E. _9 I0 {6 v
  data_trans_req = 0x00;2 d, Q+ wx' X8 N' E/ J* j5 t! w
  edge_capture_ptr = (volatile int *)context;2 z) @2 `5 m% f, h
  # U* \" o% \" D0 l8 I4 b1 U% c. _
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
  
  for(i=0; i<1024; i++)( t* |+ K* b9 r* W2 f
  {
  data_to_lpc++;
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data% a9 R6 s' m6 W( R
  data_trans_req = ~data_trans_req;
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;4 M% T2 |; A6 {2 J1 H; P
  while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))4 \8 X6 t; q: c; Z: s2 Z
  {
    j++;
    if(j>10000000)8 `. o1 l6 \# c% Q
    {: ?2 O9 Q5 {3 w6 q3 [
      IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;$ Y3 H& F1 K$ y5 G0 |% }3 U9 ^0 o
      alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);) B' a+ m7 @7 M' b
      return; // time out;- j% I9 ?( Q+ x2 h. r
    }
  } // wait lpc recieve data complete;7 _$ ~( u; P' t# `
  }
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;
  alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
  
  return;
}
3 p2 G& N0 h; F# [7 d2 ~* ^8 v
int main()# l7 W5 R' _; H4 }
{4 \7 @6 n% m! }j4 R+ c6 z5 X
  alt_u8 led = 0xF; 9 ?3 b+ d) e8 D1 N# w2 H% d& B
  
  int i = 0;
  void *edge_capture_ptr = (void *)&edge_capture;( U9 V9 x. \3 a6 p& B% [
  //====Init====
  alt_irq_init(PIO_LPC_DATA_REQ_IRQ);
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);1 d/ e" c9 O, f1 Go
  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;
  alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;, q9 \' b. d3 C
  alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
  //============
  while(1)
  {
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
  led = ~led;
  i = 0;6 k; H+ F/ F4 y7 S6 p4 x. w
  while(i<100000000)
    i++;0 K6 K7 l3 d/ u5 m
  }' G/ E5 ~: o4 E
  return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表