|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h"
* B2 ?* g: j) c3 D+ C) {% Q#include "alt_types.h"4 N1 C H" p9 @) r: a% n* N& |
#include "altera_avalon_pio_regs.h"
) u, H6 _" B. ?* \" }#include "sys/alt_irq.h"
* _3 O5 D- s! U6 o9 w5 S7 V
4 d Y% \- |2 p/ ~7 }2 Pvolatile int edge_capture;
& T( O2 c4 |% e# E/ A1 a) y& i) _volatile int data_reset = 0;
2 M5 L, {4 `( g' J//中断服务程序,向设备发送1024个数据; x. | w, s9 A7 n, P; r' Y/ {
static void trans_data_to_lpc(void *context), n* M; b6 i2 i' g1 r
{: y9 n+ K6 X$ I! ?. R
int i = 0;* N5 g! \3 w6 g, X8 V$ l# d. `% g
int j = 0;' d. c& G- n; o; k% k
alt_u8 data_to_lpc;
" @5 ?! _5 @2 w# n& J alt_u8 data_trans_req;+ h, @# @: G* T" i: k, q3 ]
volatile int *edge_capture_ptr;
5 T* _0 }, Y7 F/ c* ]' x
* ]4 V& A' R4 p& f1 Q alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);
3 u0 Q, I5 A' o3 p% j , ?: f+ G5 x- s, ~
data_to_lpc = data_reset++;
' F& ]5 l, T! k& B/ j! @; D8 D9 P data_trans_req = 0x00;' f4 G* C) w- K p3 Y( k6 L
edge_capture_ptr = (volatile int *)context;
9 {* K0 E0 @" Z+ R" g
7 r4 @* z' j3 A IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;
7 M$ V" w$ w/ |& ~' A IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;9 I6 \7 _+ Z- ?6 y0 I! `% f
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
6 ^2 H9 U: h( [; U4 j, x v! C- f $ d3 J, ?, h/ u# Q: @8 V. a
for(i=0; i<1024; i++)+ h7 a2 f- X8 I2 ]
{; D/ ~, k, M h) }9 |
data_to_lpc++;% s2 v4 a9 ?" s0 \/ o7 N R9 U
IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data+ [8 ?, U0 D2 H" I( x+ I1 |
data_trans_req = ~data_trans_req;1 @! x( f; h5 ^2 m7 G# ?
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;& d3 c' e+ S" D$ q U
while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
, N" Q2 ]3 X* h6 s {3 `% t- E; N5 T( M0 r
j++;
$ q' J9 R" l" `( _! L0 j6 f if(j>10000000)7 J$ i" j# u: h5 k u
{
& ]1 m. h C9 K, C8 D IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;- T- o! o# y5 a3 a1 g9 L7 q% T
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
. z+ l) Z5 R* Z- w# X3 a return; // time out;
; }' o# V( s/ B3 v$ Y" B9 u4 @% q }
0 c! @+ k" i A( ?" G } // wait lpc recieve data complete;% \' G4 Z6 i% ]/ o- x- X3 q
}, H* _% ^* q7 O0 f) A$ n: f
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans; , f5 w: Z& ]& Y# z) ]3 N
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
! G! P, k% M m U
5 P+ h; ~# D, { return;
" M5 q% |( G m+ n1 A4 R: y# C}
- Q/ c& F7 Z- G: f F) @/ X6 k1 _0 \$ D' J& W& z6 P9 k
int main()9 m9 s% x& b4 a4 j7 R# a
{
7 m4 ]) o+ J) {7 P6 P$ p alt_u8 led = 0xF; r2 _1 i1 l% T% J/ |* t
2 g( d* u' Z! m' Q3 u
int i = 0;
9 a) t+ o m: T void *edge_capture_ptr = (void *)&edge_capture;; w: M; X) ?* b7 F s
//====Init====
6 N2 d6 k* W6 B. z- g4 t alt_irq_init(PIO_LPC_DATA_REQ_IRQ);
# \+ C5 c' r! t) e6 M IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);
' ]6 ^4 C$ w# c D# I/ G IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;
3 I; C2 ?$ C/ X, B IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;# S; g6 R, r( j [
alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
/ U) q! t" I5 }3 }( h alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
4 d- i3 L; B2 ` //============
3 V3 R8 I3 \# h( j0 r {0 F while(1)
4 k- W; U9 D9 n4 @) n) @# A {
( g/ |' k8 A, P8 Q# k z6 n IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
/ H' n: W/ f4 [/ L9 Y led = ~led; ' j: l+ c; x) a8 Q% D! o, O
i = 0;
% }' T# ]8 x, E0 S# T while(i<100000000)+ l# ~' y+ o) k# |0 a2 s+ L. y% I
i++;
, c" o9 u% O8 ^% p. ? }
/ H; J' H+ n$ H: ^% K% f3 j1 u- P return 0;
7 P2 E/ r D( a3 n% R% q' T) t} |
|