|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h"
* V* g: O5 f- S0 t#include "alt_types.h"4 D; @" G! [9 P$ `% O+ W
#include "altera_avalon_pio_regs.h"
. o8 u9 x$ S' g; O/ g# \3 A#include "sys/alt_irq.h"; [# @- h0 E) P& c5 s( a' _' D! X
1 f% U9 V0 m. ]% |" u2 K
volatile int edge_capture;; _/ R2 B9 D+ U* V
volatile int data_reset = 0;2 U/ j2 j0 g- g+ m& D: @' w" J6 L- ]
//中断服务程序,向设备发送1024个数据
$ Y' B6 W" V9 |) W- j" Vstatic void trans_data_to_lpc(void *context)
! u& \ M* W( _! m: Q# |{9 `+ z. @9 S- y
int i = 0;
; H! U! C0 j9 O0 w int j = 0;( y( n8 }6 z$ }% l# G6 F( P9 L
alt_u8 data_to_lpc;+ T0 m( h) D& N9 T% D% {
alt_u8 data_trans_req;$ H" e# k+ y% ]+ C) M5 z
volatile int *edge_capture_ptr;
2 K# P1 l. m2 M& c" b- L & e% d9 E0 _5 o& }# \' H+ I9 v6 Q
alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);
9 f0 n3 s8 ~$ C% a/ L. v
, U9 k$ s0 E7 x! ~. G5 u8 a" s data_to_lpc = data_reset++;
/ u* s/ A3 K3 A* a& u data_trans_req = 0x00;
0 B' A, X! {3 F& x3 K6 X) s edge_capture_ptr = (volatile int *)context;
0 k" V7 V% Q$ A0 w
' H; |3 ]/ l( O+ d( O- @3 Z4 {( j$ j2 j; C IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;
7 V+ k+ M8 L7 ]5 E1 A. V IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;& [! ]/ A" H! B" C( E! R! u0 e
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
1 L* L2 p- V! A' P0 q9 [: r b+ w. p7 r" e7 u; i
for(i=0; i<1024; i++)
: y; x8 U9 ]' P( {" _6 b) D; i! { {) y5 X. j# ^1 P' C; U
data_to_lpc++;
1 x! ]# u7 z' K. ]8 F, G IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data
* W) k7 Z* A( r! N! c: y: C4 J data_trans_req = ~data_trans_req;
- s0 E$ h0 _. ?: V IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;
# h: ?7 L! s' u/ Q9 ?2 x1 W+ Z while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
3 n3 K6 H3 L' E {2 E. O+ g' G" s
j++;
8 M% f9 n/ O: a: J& R$ V if(j>10000000)
: b# q" ]" S+ I! y2 U0 C2 J {
7 d$ }1 p; }5 |" y IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;6 N9 N' M h9 W
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);- a) }" F" R2 |8 |6 W
return; // time out;
$ K9 v' @- M& a5 I* R$ g2 g/ b9 P }4 `" a3 x7 n$ W- g/ i) D% p
} // wait lpc recieve data complete;
7 k# f/ J! U( y }5 _& F% {9 c. a# Z0 v
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans; " r; W% n9 r) i8 j( o# b. d/ y9 _
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);. a* A+ B. e5 e
7 B% T: q/ E% @ return; - j2 }( A# k j
}
3 Y; r0 g2 w( }2 X$ {+ C/ X+ F
( p$ @$ y7 I+ F+ s+ y. eint main()
8 z8 N5 R; v0 Z- S9 N; ~4 x9 e2 k{, K1 |+ Z: D1 x8 f6 b
alt_u8 led = 0xF;
4 u/ m) W1 p9 K) q3 m' y2 u) P' N+ R1 G, n ( x0 [& ~5 Z2 Z% B5 C0 p' `8 p
int i = 0;% j8 L) f' L* l/ U
void *edge_capture_ptr = (void *)&edge_capture;& W+ E9 g* \0 [& S+ W$ I* V
//====Init==== 3 @$ A, n7 U K: w7 K' S0 m6 G' |
alt_irq_init(PIO_LPC_DATA_REQ_IRQ);: m1 M/ T- I* D& A( c
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);
! _# M% P& ? u+ w* W7 ~ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;" V' E7 }3 Y: v
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;
. Y( y+ w+ z' h% H( ` alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
* Z" J, J' T! k alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);. j# G% }0 ^4 ]- x" `" M0 K9 u( F
//============( C5 L. _2 ~! r# W* d' t
while(1)! S' q6 @8 p" A/ R
{4 {/ p0 G! Q* C) P6 K2 q9 D' q, E8 T
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁* W8 I1 J0 M/ h& h1 j% O
led = ~led;
" E# w! e( m9 l, F6 W# E# ?! _ i = 0;
+ j, U1 _. F; I: D5 v while(i<100000000)
4 `& g0 K2 |) I5 j' v; |, b" k i++;5 g0 w1 Z( |6 J! q
} g/ ^7 K" B8 g7 H
return 0;: c" l- k) S5 o' C3 p5 A" ?
} |
|