|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
#include "system.h"
7 N, Q- A# b; W8 }#include "alt_types.h" I5 M7 Y& P# q9 i/ G% s- ^% m* F* u' r- x
#include "altera_avalon_pio_regs.h") j+ r& O: c- |
#include "sys/alt_irq.h"$ Z0 y: k; s( d" f. y* H9 X
8 e3 e9 B+ _7 e6 q$ |3 ]' V8 C- J9 W Jvolatile int edge_capture;
) L1 P- L' r% X( {! zvolatile int data_reset = 0;
; \6 q7 |+ u0 ?5 J% C' k. l" O//中断服务程序,向设备发送1024个数据
3 x3 z7 m0 [8 N* C- gstatic void trans_data_to_lpc(void *context)
4 v1 ?% L& S8 B( Q{. {! @, j# w) P" H
int i = 0;6 D8 q* K- ~5 z8 l/ Y4 p( b
int j = 0;
* F2 q: B; v" u' q+ q2 P, t alt_u8 data_to_lpc;1 X9 G8 ?' u6 ~3 b) Q4 q
alt_u8 data_trans_req;
+ T8 ?$ q, @7 x6 j0 _' }0 ~ volatile int *edge_capture_ptr;5 d o+ N3 U1 a4 _
0 z) W* U+ w- i, W# Y+ ]$ @; u
alt_irq_disable(PIO_LPC_DATA_REQ_IRQ);! g2 s- E' z" }- P$ o5 s
& }6 X3 E) F* d4 O6 t# o! | data_to_lpc = data_reset++;
7 U1 V5 O+ F" j- K$ D0 c data_trans_req = 0x00;
( I1 l; O+ g: w: K edge_capture_ptr = (volatile int *)context;6 w% D+ ^$ [& S/ J- a+ o, N2 S& p
% Y6 \5 j2 d: k3 V
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0x00); // clear syn_clr;6 ]5 J, P! i4 [& \) v
IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_TO_LPC_SYN_CLR_BASE, 0xFF); // set syn_clr;$ y# H) K# Q: a# ?8 O
IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0xFF); // set irq, start data trans;
4 _: @+ {( a3 F; Z$ M" b 3 F# \6 {$ N5 i/ t1 v8 v
for(i=0; i<1024; i++); \6 i5 r$ K" @" ?2 _) y
{
1 _2 I! w6 _6 K. d6 V( H0 j data_to_lpc++;
) y' U7 ~2 K, X$ }- L IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_TO_LPC_BASE, data_to_lpc); // write data
* M" w8 D2 {( ~) `; K" u b2 o data_trans_req = ~data_trans_req;
! ^; b7 T* I4 l$ Z/ C IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, data_trans_req); // set or clear req;' k1 U& s% g* w. u: Y% X
while(IORD_ALTERA_AVALON_PIO_DATA(PIO_COM_SIGNAL_BASE))
, h( Q4 C% X# y% y/ m( @4 `$ r {5 @# i- i/ d; C, a8 P1 u* a. i5 f' n
j++;+ I6 {( g) x2 W, R# z( P: O5 ~4 Y
if(j>10000000)
' h/ V( \8 u$ A2 U1 ?& z {
8 F3 S7 I( Q, \6 o, S6 A' i IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans; N; p0 p# s% O1 Y. C0 b b
alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);8 `) C; _$ ^+ {
return; // time out;
3 F" |/ Y0 }5 _+ e }( V' j7 i+ z4 o
} // wait lpc recieve data complete;
$ D& `. s' B6 {; @ }
# _, l9 I- L, V/ G) W IOWR_ALTERA_AVALON_PIO_DATA(PIO_IRQ_TO_LPC_BASE, 0x00); // clear irq, complete data trans;
# K1 ~4 @" k- }4 @' ` alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);; D# N; Q& j+ [( y# v- H; n9 l m
5 v3 x& P9 K% K4 ^& v+ {4 _ return;
/ M5 t& ?( z6 P3 u8 _; b}; g; X0 }; j) {* R
$ U2 ^% Y" Y: i( Sint main(). P8 L& [8 ?' g4 L, g1 u, a8 b9 M
{8 Q, R+ h! q* {& v
alt_u8 led = 0xF; 4 l \ V2 e0 v- X6 w0 l
% a: X* d3 w7 j# | int i = 0;5 c/ g4 @- K$ W* z
void *edge_capture_ptr = (void *)&edge_capture;
7 W* E1 c1 {( [( o //====Init====
- D0 L- o3 k. @" T alt_irq_init(PIO_LPC_DATA_REQ_IRQ);
# L4 h+ m, h5 P, A2 L# U IOWR_ALTERA_AVALON_PIO_DATA(PIO_TRANS_REQ_TO_LPC_BASE, 0x00);* W1 V/ h' t V: w9 U. K
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LPC_DATA_REQ_BASE, 0x01); // Enable LSB interrupt;% R3 X% j. G" ?) W) i6 f& e
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LPC_DATA_REQ_BASE, 0x00); // Reset the edge capture register;
! q/ M( K! h% A( ?* N, Q3 @ alt_irq_register(PIO_LPC_DATA_REQ_IRQ, edge_capture_ptr, trans_data_to_lpc); // Register the interrupt handler;
: A7 a: b/ J* M4 j x9 y alt_irq_enable(PIO_LPC_DATA_REQ_IRQ);
! ]. L) Z& Q+ V7 ?$ {: l //============
/ B* i. r& V* p" D( P$ w# g7 e: u while(1)3 Y4 y+ ]9 n9 x/ ^& r3 {3 o
{' r' R" J) t; l& W! g
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led闪烁
' H- Z# v6 q# d led = ~led; & h3 \; Z6 o! W) e+ o1 ^ \; Y
i = 0;
8 u' @0 f" J: Z while(i<100000000)
# l* K3 w9 @1 t- q3 ] i++;. X3 p; V3 t( _! L4 ^
}
: [/ x$ @6 c5 C: ]6 _ return 0;
- c8 y( A2 A, V' ^5 u# _( D} |
|