|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h". |' V6 U) i T* X7 \/ z
#include "alt_types.h"
/ F" E1 U9 j$ V7 R2 i+ r#include "altera_avalon_pio_regs.h"4 k1 X1 e3 u4 B4 E2 S
#include "sys/alt_irq.h"
* s& O3 q$ c( j* H3 `( a% d; }$ P4 V. N' r- m& W4 f% c: q/ I% C
volatile int edge_capture; o! g2 P4 v: n
volatile int data_reset = 0;
7 u% ~# W$ y3 A1 A) i//中断服务程序,向设备发送1024个数据" N3 P( f$ N* p% [" @
static void trans_data_to_lpc(void *context)
) ]2 s. f. y: e, u, Z1 l2 P( s! t{2 h' N/ L7 j/ ?; |
int i = 0;
8 w4 n0 s8 }6 F- W int j = 0;
1 l4 G R/ v: ]3 X$ r: n alt_u8 data_to_lpc;, L) n# T3 W& O
alt_u8 data_trans_req;/ n, x/ ` i# f+ @4 V7 u
volatile int *edge_capture_ptr;
+ s0 G; w7 D x! W8 o 4 g, i% {0 D; S! h; [4 r
alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);
6 n( V1 g, l: z. B" r
+ [/ k* k4 Z) d k g* }& D" A data_to_lpc = data_reset++;
, S! f7 u7 [) g9 P4 m3 i9 r# A data_trans_req = 0x00;
, N3 f/ b1 b% I, A$ {5 \. Z edge_capture_ptr = (volatile int *)context;
; |0 j2 K" h; I( q' ` 6 X. O) T7 {' G$ ` f4 ]1 w
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;
/ X5 H3 X. d% |1 m4 D2 U IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;
+ i. H; f f) @, m$ {& w# W9 s IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
% d( f2 b8 s9 W8 f0 g; V - k3 A$ S C. ~' M
for(i=0; i<1024; i++)
+ n/ P2 U0 `1 G& k8 P: N$ Q. z {
" y7 V+ y! M) ? data_to_lpc++;
# m- N5 l/ i, E5 t IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data
+ D& ^+ ^: S( v" Q data_trans_req = ~data_trans_req;
/ b/ h- i/ R* J2 ~9 ^9 v IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;& m& v5 c# S# Q9 H; z2 b0 O
while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))( P0 G# {/ ]& T4 q" T
{
) C; Q5 L4 }4 `) t) Y j++;; d( t' b9 u% `# D7 D
if(j>10000000)4 M! _1 w v8 f3 G
{) ~, O, K3 e9 x6 \7 T
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;1 G! m% P5 }8 ?( {0 {
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);. f$ E5 G a w2 r. l! |
return; // time out;* m7 k" |5 C- \8 L& f) F0 J* J( l8 D
}8 m6 [/ P [! R6 s# `& q! ^
} // wait lpc recieve data complete;. x3 e& l& e6 G. m; h
}0 O, ?( l m5 w* H9 K" V6 u
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans; & O$ N$ ^+ r% A; V# Q
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);2 Z5 h: B! _% I
4 A, p' @: D1 ^( Q/ \8 q
return;
6 ]0 }1 f7 W# U' |" h}
# g3 e: Y& G4 H' C9 w- r& g5 t% p- `' P9 S* y) d
int main()* \5 G+ V- z7 F1 ^6 [- x
{; ^# N3 ?+ x& c. o. p9 i+ y
alt_u8 led = 0xF;
- N4 Q! z5 S8 A( f# @( O
: t$ @/ t4 j, R7 q$ a int i = 0;
* P5 f2 g H( e& P1 U* b5 a/ S void *edge_capture_ptr = (void *)&edge_capture;& E$ W1 G* e" J- x* g& t2 X* G
//====Init==== % m2 w# Z- t. h
alt_irq_init(PIO_LPC_DATA_REQ_IRQ);
$ h2 M5 |4 h T) f' l IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);
% }* W* J2 D0 B! [ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;
( o7 i$ J( F3 R1 v IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;
. ~, V" ~4 a! g2 v% C/ s alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
, k; n. T& ? _3 o7 ` alt_irq_enable(PIO_LPC_DATA_REQ_IRQ); a7 Y% P7 U3 J: u- y Z
//============" G6 @! _6 O$ w) N
while(1)0 l9 |) t3 }% v( Z* o; s, M/ h
{& J+ T4 h; _/ s5 b
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁8 h! E/ Y& U, a# f6 E3 d+ O
led = ~led; ) b$ n4 v$ h6 u. R$ |
i = 0;
8 E$ f! g3 b: w. }' A while(i<100000000)6 ]1 d6 `/ |, u6 g% @
i++;
4 Z7 }0 u1 d$ l* P }1 s, o1 X4 z% T& t
return 0;
7 W6 |! H; m+ c% u- x} |
|