|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h"
9 w+ q! R7 L8 n* V4 ~5 O% i9 e; s#include "alt_types.h"
# v2 u. s% a1 m) W7 p, s#include "altera_avalon_pio_regs.h". I0 M6 a- g4 ~: \" q
#include "sys/alt_irq.h"
: l3 |1 n* l3 J' ~, {$ g% d5 m1 X& \1 P j8 [' M# Y' d& {
volatile int edge_capture;
' P- K0 z: Z. ^6 m8 K# M; n- c3 K8 g% gvolatile int data_reset = 0;
* D1 X/ f/ P R' v3 ]: Q6 q//中断服务程序,向设备发送1024个数据8 A9 h0 X/ y$ e; `
static void trans_data_to_lpc(void *context)
: a- Y. W) W b{! d5 j+ s: }8 `' v4 U
int i = 0;6 X7 m+ R' @0 M
int j = 0;
* o% y3 E1 Y2 }% o alt_u8 data_to_lpc;& _! D3 w1 h5 ^4 ~% I B' `7 Z9 v
alt_u8 data_trans_req;+ g- R0 a+ x' P, [* |
volatile int *edge_capture_ptr;: k* `6 v, @4 z7 d
" Y8 S' a. d$ d alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);
( z, e% y) u1 \2 P7 R7 x$ y
8 ^) W$ M) B% {# Q n data_to_lpc = data_reset++;; N& ? h+ i% Z) Z3 \9 j
data_trans_req = 0x00;, D8 S& y/ D, V/ ^
edge_capture_ptr = (volatile int *)context;
( A' w/ `$ K- _6 R! h # [/ Z: M: V, N
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;
) w- H: h3 R! p IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;
, ^5 r" ]) W" l* n% X! e IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
% q% H( v% `! s! h
/ Y j( M5 b1 O( b8 ]6 X for(i=0; i<1024; i++)
# A7 O4 Y" W1 O5 D* | {
) Z; B" O) A3 M, p) [% j data_to_lpc++;
( `- A! `, ~1 M% o) t2 I6 H IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data4 T8 ]; G$ z5 m* x+ U9 B, V
data_trans_req = ~data_trans_req;
$ z' D; }, l2 j# _3 p IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;
0 n2 i' J4 _7 u while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))& R+ u) O d: c( E. Z
{
, [2 b7 w6 r, N0 Q8 T7 ? j++;0 Q' P( T" U# v4 X
if(j>10000000). O, B% c. L; u0 {3 L6 b1 ?+ U
{
$ {8 x8 {2 L( `% i4 Q IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;5 `) A9 `6 f6 C8 U/ Z: W3 s/ Z
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);. f- `: R" M( d8 ]
return; // time out;
T% R* f6 W; U' ~ }
& \! o" h. m: d) b0 I% u: ]( A3 G } // wait lpc recieve data complete;5 t1 U; Z/ k5 b& @: E
}
( W1 i" a0 B5 s. l IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans; % ~9 Z" w% e& E
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
0 }9 J6 z, v$ r/ P# p& y " D: ^8 {( F! v. D1 e
return;
0 D* |/ f! u3 V}
8 M# a& _0 N/ M
, Q5 g6 s- @3 X* h* l# _3 I7 Zint main()
- O5 \5 K& W( Z' t{
* F8 S D" q% M4 q& A8 ?5 y3 D- | alt_u8 led = 0xF; , h' d0 ~: d& I
% W% s7 }/ w6 ~( @7 A3 I) \0 \# J int i = 0;9 h' H6 w* g4 e* V% ]( \! d) ^) P
void *edge_capture_ptr = (void *)&edge_capture;9 e) A' m' O: y" @& J" u- ~
//====Init==== 3 h/ S5 _6 P; U# E1 m* r& Z
alt_irq_init(PIO_LPC_DATA_REQ_IRQ);! `: f$ a% y2 m4 z
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);
( U7 v2 Q: y A& H/ e6 a IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;
' o7 S/ l2 [0 H! l6 e IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;
" T/ c! I$ z4 a alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;8 B- n5 k' K* {! a+ W! \& z
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);* U" K4 D: ~7 Y2 p8 l5 ^8 h6 Z# z3 B' U
//============
2 w0 I+ o/ S6 x while(1): `4 \" s. n6 X/ R7 H& Q
{
( y3 |- W) W" n4 s$ [9 e IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁- Z* G C) i7 d
led = ~led; f' t' n5 E( m+ Z& X: H0 J
i = 0;
1 p% Q! Y% X$ z" F: Z1 x" m, h, L; E while(i<100000000)( @3 v/ U8 g. K; o# T2 W
i++;
5 a' l9 @8 g1 ~ N" @0 q }
! ~7 M& x \) i B return 0;
6 \$ ?- _% P2 E4 K- K0 T! a} |
|