|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h"
; w; E4 \) i, P; Q7 o1 j0 B( T#include "alt_types.h"
& e$ o3 m. Q& t* o#include "altera_avalon_pio_regs.h"4 v( Z2 [ S0 P3 X7 |
#include "sys/alt_irq.h"4 `" P* y. q# [: G7 ~
3 V, F1 d$ D+ H- c6 j
volatile int edge_capture;' \% B. A$ A4 v' x; l
volatile int data_reset = 0;
9 W0 ~- p1 z2 Y- ^/ g+ v//中断服务程序,向设备发送1024个数据# f g1 G; |( r5 q
static void trans_data_to_lpc(void *context)6 U; t: E L" Q2 i& Z
{/ j2 L# @; y6 D8 D6 A: _
int i = 0;
/ W, h z; J2 Q7 t# m- Y! H4 u int j = 0;* V$ s+ f, ?( a$ N/ i
alt_u8 data_to_lpc;# a) b/ J- F6 b6 B0 P8 l
alt_u8 data_trans_req;$ @2 b2 a! h! d3 i* ~5 v n6 \
volatile int *edge_capture_ptr;! W/ ~! L$ y$ x% g5 \7 z
8 ?7 L1 V/ K+ W% l2 D: U9 y alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);8 P. K7 N5 D2 a. G
5 ?2 F# v4 r% ]9 q' H: C/ q2 H
data_to_lpc = data_reset++;8 }5 W5 j, ~; P) b! _$ G2 v% a
data_trans_req = 0x00;- ]" [: e8 j4 y
edge_capture_ptr = (volatile int *)context;
; y8 @! z, ]+ p6 }( \
6 X6 J: h/ f1 y K9 n" i5 v IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;5 T% t C. l% b
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;& M1 ^+ `: I6 m5 H' k
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
+ x% O0 C4 h; W0 b+ \
' a! Z* _" |# m" R( } A for(i=0; i<1024; i++)
" [" o0 B0 }, v2 g: |3 |7 @ {
* |* ?( d4 `; J( k3 W data_to_lpc++;9 |2 c: P s7 l
IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data8 l+ Z& [: A" z( Y$ V$ C; T
data_trans_req = ~data_trans_req;4 i0 M- d0 {1 ]/ M% {$ V
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;/ K; g0 L1 Z- i# k0 s6 X1 s
while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))- d3 U, W4 R+ R9 L# t& \8 T! {' M1 w) M- ?
{# f3 b" h, l* j
j++;
o' E+ V' \% _$ U. } if(j>10000000)
# G4 z6 j! H/ G: h' X. r {
2 z8 H! i- f1 t5 e4 } IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;- @4 }9 z7 t7 S: [+ c
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);2 K4 B3 j' @- P M
return; // time out;0 |6 Y( F$ e! @! h
}
# s3 B" I0 z* M- ^+ D } // wait lpc recieve data complete;
5 _; n$ u& a6 u! L0 [ } U1 r" n# w& i: s
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans; : l9 ? E/ C" [) ^2 k7 h5 `
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);' w7 `9 v( t" T- |
! B9 `. _3 e6 s$ R9 J, `( Y7 q. r return; + E9 T% q8 Y) U, ^# m
}- V1 L* v* M0 ?, g, b D
! g9 _2 s' |* @" G, c- m2 E! s! y
int main()
6 j0 `8 i% I; o' N E( P4 {# f0 I{3 |( c5 ^& O9 U1 i# E8 I) N
alt_u8 led = 0xF; * o( Q0 E; G, t; W
m# h" G* Q2 [4 C
int i = 0;
9 S3 n6 |- \: K void *edge_capture_ptr = (void *)&edge_capture;
0 o& y4 k0 _! C( v7 G0 i& q //====Init==== , f9 F M Z6 e) ]" q
alt_irq_init(PIO_LPC_DATA_REQ_IRQ);' t9 k+ _2 y; v# z ^
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00); I/ b, E# [# n+ A! e5 m
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;- O+ ~* M3 J$ q) L5 v
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;+ c% e4 ]: x: ~/ {8 _) \
alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
( Y" s' {# O3 S0 A alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);; H6 L7 j: D- @- V: P" X
//============: C; @) d$ M/ U; A) _: M' x! N
while(1)
4 f# g- }3 P. J) N0 j {9 z, b2 C2 f% p; i9 [- h
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
1 x2 j5 @8 G) S6 C( ^. j4 f led = ~led;
; k d9 I$ z Y7 \ i = 0;
0 S0 v- v9 y y( M while(i<100000000)
) l( C" i: p+ @5 f i++;
; I& _; d: `: a: J" r$ D. ]- ]2 s }7 D$ W! o4 F2 X7 C5 ?* G
return 0;
( p. ?0 Y- T2 }0 V} |
|