|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h"/ P% B: R; C. J4 [# P H
#include "alt_types.h"
& R' |3 X8 s( h% d0 y) I1 p#include "altera_avalon_pio_regs.h"# Y o/ |8 r2 B8 {* R0 G
#include "sys/alt_irq.h") r$ a, K' w& \# x' W
6 J( E& X' E1 F* V0 _( L% b' P
volatile int edge_capture;; Q8 e/ v% x' }6 w# m# U3 m1 N* o
volatile int data_reset = 0;
2 y, h3 s, a: f! ^$ \8 d$ }: Q//中断服务程序,向设备发送1024个数据; x5 j/ w' Z7 {/ V
static void trans_data_to_lpc(void *context)' |3 J' D( l( H5 q2 a1 p2 x- x0 Y$ B" q
{1 _. m7 k6 Y, `9 n
int i = 0;
; ~8 D% p4 d1 _' U" e# K& W; O int j = 0;
9 N) U1 m- H1 U alt_u8 data_to_lpc;
2 ?) J- Z( v& L alt_u8 data_trans_req;& _" Q8 E: G8 Y0 d7 o) o# e
volatile int *edge_capture_ptr;" m e; K' g8 z2 J3 ]0 }2 F7 b
+ _* T4 c& a% [. B% \7 _+ G alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);
0 O8 m8 ?* n; {! k
% _: p& E' e( c: c0 K data_to_lpc = data_reset++;! Z: X8 G4 z6 _0 L- Z
data_trans_req = 0x00;2 Y' Y7 Y% v: d1 `0 ?! J4 _$ ?0 Q! K7 A
edge_capture_ptr = (volatile int *)context;
2 Y% B2 Y! F( J- D, i
! T" ?5 \7 ^' Y) G IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;
3 @9 M8 r: c: i+ p; ?2 J IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;
: D$ a& b3 A! h9 v6 L IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
) O# k3 B2 e' i4 Z1 j0 Y# Q j$ ~. L5 x* W; ` B9 F
for(i=0; i<1024; i++)+ @: `7 V9 D) N4 ]( U# U
{$ ~3 c" s; B6 w5 {4 r- i
data_to_lpc++;( q5 f. ], M7 q4 b- C" g
IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data w7 R9 Q( I7 U; h
data_trans_req = ~data_trans_req;. w" e; r* g7 ^6 I/ F% x+ a
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;
* x* f" X% I B' V2 s while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
6 d4 f1 f3 z6 R5 u3 D$ D {
; ?* Y1 k+ e# | j++;7 y6 `& c1 R) r( B
if(j>10000000)
) {! R) |- a" U {, Z' o0 d" S( }1 I" K3 {2 W
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;) o+ V: d# G! ^5 D% g5 y
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);2 z" u9 d8 l& x; w6 `. l. R5 M, @+ q2 E
return; // time out;) q0 O' w' N, h2 ^- x
}
! o( I/ v" X/ Q _ } // wait lpc recieve data complete;" n) w# B X' x% Y
}
h( J# P5 {% a8 t( g! h9 N# Y IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;
0 F. l6 c0 X/ N0 M% W alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);! c5 {/ Y* F3 N
# y8 V& ~: \- F9 _
return; / x* R4 }; D6 X8 H
}3 s" J' {+ i* @
9 B! ?4 A2 _4 Z' g6 H8 ^7 rint main(); q) ?8 _3 T0 D( Z
{
. F b9 z7 i/ a7 q! c alt_u8 led = 0xF; ' D; o' B) X( H# u0 x0 a0 D
/ p' h- [- Z* Y7 [! N9 ]: x
int i = 0;
& d! \* A" J2 e7 g void *edge_capture_ptr = (void *)&edge_capture;
6 f& N6 f& h. }( e' _: w //====Init==== 7 }' j8 Y z# v9 d% u; N8 T6 ^
alt_irq_init(PIO_LPC_DATA_REQ_IRQ);
& |! ~0 @7 L- j1 H) W IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);
6 U+ f/ z) U' a& ?& l7 r' h IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;( X, ^* b+ w8 a4 V7 V# P8 F
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;
- r% \- I# J b4 t% Q alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;6 U7 P% h, X& ~4 Z4 M
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);. b6 g0 j. o: M f% W9 M
//============
6 c+ {/ B! D& }' O& X, y while(1)" \, s7 h, b# p) Q! Z& n
{. `& T, y7 y" d7 L+ e
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
3 ~7 A! a! t! P$ o* o% z, i led = ~led; * ^2 R0 I, a( q0 E$ Y
i = 0;; h. u5 L( B; h2 b6 b s' x
while(i<100000000)$ |; j1 M/ G% u; E; ]4 @
i++;
1 b6 Z5 u/ t0 r& ` }' i% U0 H# u! a
return 0;
. l# w8 V D! F5 E$ }6 I} |
|