|
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) w. N- I1 y v( m# W
Void UPP_TASK(Void)6 w% e# `/ _5 D4 \9 p" @3 b* O
{
; C0 L) y% I( N% k3 ?( C
( ]) o, u" f5 o/ L: { int i,j,k,target_int_count=2;
6 l4 I9 P6 \ N/ H4 \4 S" G" F# b1 a! T% a char ch[2]; e! [4 k% U+ a, f% _/ w
@8 n0 C5 c. C* E3 i/ Y/ w
- t+ T7 L" ~ E) p1 x) z0 k/ v: y2 f2 r2 O: W4 v' Y8 m' E$ Z
upp_interrupt_count = 0;
* g7 D5 g4 b _. v) B5 Q upp_error_count = 0;( X" h( ? i9 g8 K8 H9 P( z
3 U' |* x: u) j! | UARTPuts("\tResetting uPP buffers...\r\n",-2);: I( X6 Y# ^, r' t# Y Y
// Initialize data buffers
U1 b2 F. U3 D$ I& D. | for (i = 0; i < upp_frame_size; i++)9 B4 _2 M2 H# w+ P8 k
{
) Q. N) B8 D- f6 I2 P# \, I+ p upp_buffer_b =i;
3 ]+ J5 O+ `3 n( C" E upp_buffer_a = 0xDEAD;1 \* F' t O5 `- m
}$ i3 |$ Y: T8 h; n6 k) q; ?
# K9 n$ z* L& S" B+ h //for(i=0;i<1024;i++)$ q5 F1 l: A" u: |7 k/ c
// temp=0;
$ s5 }; R2 ]% C' B
4 Y5 s) v) l/ ~' j: u2 p6 p* J //UPPReset();
2 {9 ]: Z0 C- ~; w0 X! b /*启动UPP DMA传输*/
F) T/ ~' w; d& ~0 s2 ? UARTPuts("upp_prog_dma_i\n",-2);, n9 K, P) i9 @2 M; H3 q
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;) k4 R" X) ~0 Z( @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. P7 l( W6 n/ ] upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ b" v3 N* B. \5 f
7 Z7 S, p+ g% w4 E" u# g+ _& A( g UARTPuts("upp_prog_dma_i\n",-2);8 Y; B* z5 S8 X( e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ k" X/ C9 g) L- e! N- s upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 |& T) ~) @: R) f/ l; x ?1 \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 w9 _& a1 a k( d6 \# t* H; m( E& v% X. B* |8 C$ w. O
/*等待UPP传输完毕*/% F W( w( i# x
//i=0;& P: }$ M' [- b0 Z4 P! i
//j=0;
/ x% F( E* U9 o" A* c# ]# J while (upp_interrupt_count < target_int_count && upp_error_count == 0): @. @2 |- a9 M* \
{4 p( U. T! Y0 P- `
/* 测试UPP传输的同时操作普通DDR数据
8 Z r* V8 K% O8 E# D9 [; Z temp=i;& ~2 k7 K3 \( D
i++;
6 ^; |2 j3 }. K% ` if(i==1024): V6 R( D9 L4 H& m0 b
{
! x' I2 v# P- ~8 Y0 I$ f i=0;+ U8 Q ^+ a( `2 r
j++;
' o) z$ \! R# f. @ }' C) \; Y3 f5 S' s
*/$ [+ j3 h1 c% l- W8 ?/ ?
+ h$ U0 n' p2 T: v asm(" nop");$ g, O- r) D" S+ p
" m1 w2 c) K! f3 O! S //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( m* c0 N! G' ? }
6 h0 {3 H t% y. A ?% H' z
: t0 i( s7 h( _! l% J /*检查UPP传输的数据是否正确 (loopback modes only)*/! J1 I% Y) e/ G
//UARTprintf( "i=%d\n",i);1 c% P& O6 Q9 l+ V6 G. }$ a
//UARTprintf( "j=%d\n",j);
: r" J X3 G9 ^0 ]' k' ^ UARTPuts("Data mismatch in buffers.\n",-2);
* c% f" ?$ ^3 `/ A9 _ if (upp_interrupt_count == 2 && upp_error_count == 0)
, g8 w$ u0 ~ a- q( A7 z {( e; z4 H9 J0 I- h. F
for (i = 0; i<upp_frame_size; i++)$ r6 k9 ^0 c, U: _! _( D
{4 j( L- p* u& U, i, v
if (upp_buffer_a != upp_buffer_b)* w# j# ~: h2 `+ `2 B& U8 D( A. Z
{$ i. k% ~& `6 j& V
upp_error_count++;: D* V( s, x$ h! r h! e: Y# }
}& t; U& o; f3 } Y4 Q2 u- H
}1 x1 s) |$ b4 v+ f- j$ ~
}
" N: v" z, I8 ?4 ?) u" H
& _5 n* U/ V+ L; g! \1 G* ] /* 报告通信结果*/ H6 _$ m, X6 r% k) L$ `7 q
if(upp_error_count != 0)
8 [ A5 G- O3 c UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 h& O0 x# g( L5 @9 `( B, T else
8 Z* C/ e0 E g UARTPuts("uPP transfers complete!\n",-2);
! Q/ o* R3 M: D P+ k X7 M0 t3 Q) Z" w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- O; |, u7 R" G) E UARTGets(ch,2);3 u R" X3 m& P# V+ [
UARTPuts("\n", -2);
! p& l9 `& ^# ^9 D5 G1 }( _; h' l9 ?- D' g
if(ch[0] == 'y') F! Q7 M M2 ^8 L! H! r+ ]
{
$ x& U/ P$ q7 i# z7 [ /*打印全部读到的数据*/3 [* N+ ~% Z/ I5 `
for(i=0; i<upp_frame_size; )
9 x. W3 u4 Z; D6 B# q {, M# f; z' l2 O) B1 e3 H
for(j=0; j<5; j++)
; l3 X' x4 K5 @- p/ W* u {
+ L# p; s- p9 D UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);
& a. X( i5 ]$ z( c8 N i++;
5 G4 Q8 `; o1 |& v1 d6 Z" w //if(i >= 4096)2 D$ e- q* b* s' W5 c$ ~
// break;- ~! Q0 P. Q1 q6 c
: r7 W3 C- |# D' Q% p# }, L }
9 W4 A' T- p+ f2 L- u2 } UARTPuts("\n",-2);
0 H' P8 d0 a7 e2 l5 X5 ? }
4 _0 A# C& C! K" T }/ c/ |) Q! _- P' f F' C/ [' l9 L
5 n. f D& z/ f( j _, @' M! s
}, @$ `0 ?% u; w0 H
/ Z8 L/ L$ _( V/ s$ B
+ R& D! \/ F& w" \8 \ |
|