|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h"
/ n3 i+ Q8 r4 }0 ~ f7 c#include "alt_types.h"3 P' W. _' B1 C& s: X
#include "altera_avalon_pio_regs.h"0 k q. t/ Z4 B5 i6 S/ H2 E6 Z
#include "sys/alt_irq.h"
9 Y+ n3 _# I- ~6 G% v+ \# P5 m2 t! y3 {8 v
volatile int edge_capture;
" b: o( f% R5 f# i; Q# ~4 q" @volatile int data_reset = 0;
/ M/ ^* o3 ?* r- \# J//中断服务程序,向设备发送1024个数据
: e5 P# B/ x: g$ Cstatic void trans_data_to_lpc(void *context)! k) F; `! S1 y: M0 p3 e1 i0 S
{, b- |+ u' t) M, x2 ]% \: o9 f
int i = 0;; s8 N/ e: @1 S3 [$ f
int j = 0;
! R8 T& P' O/ { alt_u8 data_to_lpc;1 H G3 W7 ]3 s" v+ ^2 x
alt_u8 data_trans_req;' x- b+ w# t. R) c4 h1 E
volatile int *edge_capture_ptr;$ M+ V) \" s8 f; p/ G' T3 ^5 C
0 j5 v5 ^; n; {$ D1 ^9 Y
alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);
- `3 C# U: F' V ; u3 ^, J7 z, Q# Y
data_to_lpc = data_reset++;/ p6 G9 T& \* {
data_trans_req = 0x00;) \' U! _+ a* M& V5 J5 G! R
edge_capture_ptr = (volatile int *)context;
$ v, v7 h5 e0 h g# {& x, a% Y ' C0 ~* O4 d# a) m+ D
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;2 Y2 H: X: ^6 m9 r8 s3 m7 Y
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;4 h2 `4 m0 U: _+ g* F+ ^* o
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
3 u4 r. l. R( U6 O- G : o, a' y4 S* I+ I+ ~& k
for(i=0; i<1024; i++)
% ?- j1 z% m. E8 c7 W- X {$ M. D7 F2 A; l4 d" I
data_to_lpc++;
# k' u: J) [6 K8 R IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data
: n: a- E" D1 e5 G: w data_trans_req = ~data_trans_req;2 [8 K9 p) r3 H3 c* N5 _+ ~9 B
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;
1 T5 \3 G1 N: i W% A% B while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
* R: k" \; W3 N8 ^ {! y; L2 x0 d$ K5 \, L8 G2 R6 O
j++;
4 Q) S3 A# z2 e* S, h if(j>10000000)
: a: ?" B" K: u S& j' T- h$ E {
9 m; f9 v b1 G( v IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;: T! n/ W' ]1 z* b8 L% R4 b1 d$ s
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);! W `0 T d M) B" u$ B( _
return; // time out;
4 I/ W3 {1 M% a3 J }! V$ E, c& `; W5 |
} // wait lpc recieve data complete;
% Y& E# {% z7 `2 Q" W }
" H8 K: _& F0 }3 h IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans; $ M- j) I4 f$ e% ] Z
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
`( p' s8 I7 G
; g$ V) S. Y: F; d7 E+ R. \ return; 4 M0 [3 G& Y! L* `6 Q0 R
}
: y0 y1 h6 j B6 z# p7 c6 m7 w* ?7 w- K" B' Q7 e/ S$ e" A, V! w
int main()
0 { c& t. B" {{
1 n4 d0 H- _; b; M" g alt_u8 led = 0xF; ( F9 B& |0 u2 `. o1 {. w. g, n
- z: V3 |. _! r4 Y
int i = 0;5 Y8 [/ T" n/ y5 B0 K1 l; |
void *edge_capture_ptr = (void *)&edge_capture;$ ?) [+ _. E. K) C* N
//====Init==== $ c0 H) B; T4 J8 O% I
alt_irq_init(PIO_LPC_DATA_REQ_IRQ); q3 S8 K U& Y: ]
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);
+ d6 E5 x- c1 K. e; O+ M- g6 T IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;
8 o7 z1 W8 t9 W% c IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;# K8 ]; a: q6 o2 O; Y6 X
alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
! e9 ?% ^: Y I+ A0 Q( D( D alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
& Q& l9 o) o8 k+ A //============) |6 `- ?% v$ x8 s! Y
while(1)
% h( n5 B( I5 s# A) U1 H5 k4 X {
1 \0 G# P# z j0 ^/ j- } IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁: w+ N/ M/ b; i
led = ~led;
7 Z/ n5 c# e/ N i = 0;
3 i0 z% l0 ~# i0 w k0 } while(i<100000000)
& B' E* h- K9 ]+ c1 t- H4 r: E i++;% h ^/ |: i4 t6 V6 u7 ~
}' {* r' F+ C, ?/ ^* _: Y: c
return 0; C. y3 w+ e# p1 `8 d. ]: B* k
} |
|