|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h"
* k9 F$ x( }& f$ P& O#include "alt_types.h"$ ?) w' H: {8 q }9 O3 i H7 o
#include "altera_avalon_pio_regs.h"5 h! h4 Z( a( i J
#include "sys/alt_irq.h"
7 W0 d9 O2 q/ F; t, i
1 _* W! {7 |+ K& L! Bvolatile int edge_capture;
1 ?7 ]$ ^; x, l( `3 G8 tvolatile int data_reset = 0;$ X1 k3 D+ s( ?( F( G, n
//中断服务程序,向设备发送1024个数据
0 O: @" b/ @5 b2 w1 F v7 Hstatic void trans_data_to_lpc(void *context)3 N! } q0 l& Z7 @% a, D
{
2 e: I! B( Z7 N5 @. V4 I3 T0 t int i = 0;0 b' g5 L* @& ^7 U
int j = 0;/ V) ^, U3 R! C3 P
alt_u8 data_to_lpc;2 [6 ~' y. a' j% ~
alt_u8 data_trans_req;
2 k) F8 G0 G' b! `: n# ] volatile int *edge_capture_ptr;
/ T. u2 f H+ W7 D- R _5 j5 ^# k! ` ) q% r9 I, [/ ]# H4 E1 }) {
alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);' r& s4 {' M0 }( i$ {( O! S) P
( Z3 m: _& T" i- ~- e data_to_lpc = data_reset++;2 D6 z% o% J% |1 J8 H% y" n
data_trans_req = 0x00;7 H$ S# W- R& V" M/ i9 P
edge_capture_ptr = (volatile int *)context;
& F0 n+ P7 A0 t* U6 M$ ? 1 h( R( O# i; F& }6 d
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;. z( G/ O4 {0 W7 Q% Q
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;
3 g1 J W" r* I: P, j) R IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
$ M7 `, n' p! V
$ N( u" @( S0 P for(i=0; i<1024; i++)
4 k& z& N8 |' i' E" s4 e3 S {. A5 T4 B8 t: [1 x; K- C, C# N
data_to_lpc++;) k5 c- X: Z: Q; k* c
IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data
; y( z* a5 B, _( I data_trans_req = ~data_trans_req;
9 _2 [. N0 v! A IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;
% a" Q( C( N# t5 @4 |- ] while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
- X: e( r/ h8 X! S- y9 O ]$ C% J5 J {
4 Q$ j6 j0 J# h6 h8 }; s j++;7 j$ I% j; l# o s
if(j>10000000)
: }) }7 R/ A: O1 ] l1 ?5 a( f7 S+ ` {% K( I9 s. c2 s
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;
& R8 Q4 O" e) A, f4 H* p- F, O alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);% g) D0 `4 S4 B8 a' f
return; // time out;
3 S0 r+ H9 `: I3 ~7 L! T! d }) e3 ]& b( r; I- o+ }
} // wait lpc recieve data complete;. {- n# h7 c; n4 c X, U! \
}
3 ~& [1 |' B. G; Y+ M- F4 ]& T IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans; , |! n+ p6 X r9 j
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);4 L" r8 s4 u" z8 P; l
, |3 _+ Q( ~3 N( P4 _* O6 N
return;
# j( n5 a- [2 Y/ t; Z- n: b% ~}7 {/ ?# L% R4 J
6 C8 v0 v( Z+ n; P; y! [
int main()/ v, J7 r' N, I$ b4 [
{4 E, h7 K/ n8 C+ t
alt_u8 led = 0xF;
- y f) z0 W- `9 L9 F; g - w4 U6 A9 x" Q6 u: O
int i = 0;
5 n- h) n& z7 r* [3 z void *edge_capture_ptr = (void *)&edge_capture;
8 N& l/ L; H! ^. p //====Init====
- _0 S! q* Y( `4 Q5 X# g alt_irq_init(PIO_LPC_DATA_REQ_IRQ);+ n+ S C7 k; \" R+ q* D/ F" i6 b
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);) P/ p! F1 c! g; s! I
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;8 `9 R/ Y9 ^0 e
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;$ C0 r/ q: b" k, p; E5 o/ ~3 }) Q4 }
alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
- h( ]' D+ L8 ^ d3 E. P alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);: N2 k# i* h& `1 D! v( l
//============( P0 f, S! S; e) O N, \( O1 q9 n
while(1)
( ~4 Q4 s! I @, e" v+ X( C o" T+ \ {9 c! N7 F2 \ O! x( y$ V/ H" a
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
# E$ k' k6 A/ \0 H* t& G. U led = ~led; 7 _0 b7 {: c. P3 t& v; V) {# j8 |
i = 0;
: [% D" u2 o/ \% b/ A4 F. b while(i<100000000)
* E6 |- w8 }3 b* [9 ~0 r i++;5 M: I f+ U: E: M z, \
}
/ u8 y# I6 R; B3 D k5 J4 I return 0;
' e: }; u* L0 @! y* J9 V0 h8 P* s n} |
|