|
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 y7 m& `3 ]4 L, {- YVoid UPP_TASK(Void)
8 }& E/ E8 T! ~5 [" F{% w& p6 m) G0 m1 c+ V0 v1 p
6 h6 f1 I' U* j+ Y
int i,j,k,target_int_count=2;
8 i0 d$ k" W( M1 s char ch[2];
$ b8 \! [5 j1 w* f
/ Q- Z6 ~# u. `
2 E6 ~+ F) t( a4 N6 `( T- |8 |- J$ u/ n
upp_interrupt_count = 0;
- y3 X4 ?2 C6 ~ upp_error_count = 0;- t+ Q$ R E& j' _8 P* H
" B0 y& ?% ]# Y* N* c UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 y4 K; Q" ]0 b6 t* O9 ~ // Initialize data buffers
4 |7 \# O* H& @" K* o7 o! j for (i = 0; i < upp_frame_size; i++): { O+ k4 f' u2 b
{/ R6 G/ K2 W6 @4 R: c
upp_buffer_b =i;
; I& \# Y5 j; i( k2 M upp_buffer_a = 0xDEAD;5 M' c* e* t7 R `# g9 `6 c
}1 H5 I; v$ [1 I* ~) A# Y
2 T) X5 L5 D& B' k
//for(i=0;i<1024;i++)
+ R+ v6 e9 D: J3 W; Y% ^) v // temp=0;
- J3 ~* P& v! E5 i
, w1 a. R, ^8 J6 p8 Y //UPPReset();
E' ]$ C# @& E8 N. w /*启动UPP DMA传输*/
" j# J* r6 t2 m% C' G9 a- e UARTPuts("upp_prog_dma_i\n",-2);
6 A9 B! Y* u) a' _* V2 M7 g' K upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;3 a- Z$ T5 o2 s4 |7 C5 F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" W7 R( w- M# f+ ?0 C upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: r( D9 _! o* ^4 d2 ? m, p% X& ^. J0 N
UARTPuts("upp_prog_dma_i\n",-2);
0 a1 P3 b. P) o) z" t upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 @: b4 a) B ]( ^( |/ n6 A; _ upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 U) Q) g! i7 @) M upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& `, m! r4 j$ C6 ^9 A( S. x s( _. N( }1 z; N' |
/*等待UPP传输完毕*/; G6 e' h0 S; ^2 z7 {
//i=0; a; s# S5 g$ w1 O
//j=0;! Z2 g7 N+ ]( u3 Z: ]6 a" W2 s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ C. g( M% I! m: x {
/ o$ D# Z! d8 q! Q$ h0 s /* 测试UPP传输的同时操作普通DDR数据 p4 c( M5 R6 ~* c! p; \% a
temp=i;# U9 m1 E. \2 q) _3 F
i++;
5 C- d+ e* t' j5 [6 C if(i==1024), Z- h* r( _+ B
{0 G# ?% @- {3 U ]* `
i=0;
# r6 {% o, V6 k- N$ u j++;
Z0 n/ v1 c4 H* K8 @5 Z }
0 C2 {" V- B6 ^5 a) x */" v& g3 r" v( [
3 \/ S0 ]' [3 g+ u+ J+ x6 s asm(" nop");
) h1 }+ I. i) R7 K* a4 r
( g" F5 d# _8 B% x //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( Y+ P5 r! {9 a' W }
2 q* Q: I% }$ x+ q5 ^0 V- v4 F" c6 `" i+ {
/*检查UPP传输的数据是否正确 (loopback modes only)*/2 @; `8 Z$ u0 _+ n' A$ x0 ?
//UARTprintf( "i=%d\n",i);0 N# R, v4 l3 a/ S
//UARTprintf( "j=%d\n",j);
" s, n U W9 q' x; U% H UARTPuts("Data mismatch in buffers.\n",-2);
6 R( V) m! C* p& ?( b% ?# z7 ^ if (upp_interrupt_count == 2 && upp_error_count == 0)' Q/ D' e% s m D
{5 b2 q% t I3 Q; ?4 Q
for (i = 0; i<upp_frame_size; i++)
& l4 j. T$ H8 V) x5 X& K! V+ [ {
$ a2 ^8 g5 j0 c2 z if (upp_buffer_a != upp_buffer_b)9 n! S3 n' p/ a5 N$ r6 F. L9 P
{7 s* n6 V1 K& ~: Z: c8 C y7 m" k
upp_error_count++;& m7 ?! p' R: C
}) b% {( Z1 X5 Z! B$ h+ _ h# x7 k/ z( |
}
2 ^, D w. ?( G }
- ?# _5 j9 d5 B' K' U g2 X% a$ m+ I
/* 报告通信结果*/! L9 L. @- b2 E5 }5 [
if(upp_error_count != 0)9 A1 B- b. d/ A
UARTprintf( "upp_error_count=%d\n",upp_error_count);. z3 {3 i; x% d5 ^# d
else
6 o, N& x& ~. L# p! x, H. \ UARTPuts("uPP transfers complete!\n",-2);$ U* a6 H% I1 m( Z9 L' [
' p& {. ^, ]' @ v8 m UARTPuts("Do you want to print all the data?(y/n) ",-2);
! D& H2 K v1 t/ ~" ?' `1 I+ J UARTGets(ch,2);% x* F4 [' D& P, z
UARTPuts("\n", -2);- j+ n: z [7 M
5 n+ f. U4 m; k' T/ n2 e
if(ch[0] == 'y')
* I* g, B5 E; m: G' R {
. F! X' a4 s3 m6 @2 E( u8 _2 l /*打印全部读到的数据*/8 Z% Q8 {5 M& }, E
for(i=0; i<upp_frame_size; )
1 k5 L8 }+ M4 i! A/ O E( f {
2 A7 U2 [$ d' ^: c3 K: Q- u F for(j=0; j<5; j++)
1 M( L$ a7 q% U6 s1 A9 y {
+ P( {4 v% c. X9 y6 K UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);
. p8 |# B# X1 e! K A5 S8 V i++;- n6 F# b2 U& l% }
//if(i >= 4096)2 E8 G3 p: G/ H* \( M4 E# Q, I
// break;
: O9 _5 F% W( X' `7 B$ W
' `5 Y8 \- x+ P4 E# x! A5 x4 h }
: G& h2 i4 U1 f UARTPuts("\n",-2);( _; c2 S& }# `7 X9 n+ N3 f
}0 I; _3 o4 x# N; g0 D9 h: q
}
8 ^& q' _. w# O% Y' F& v- m7 M/ `& z I( X3 N& @1 Q& b
}
* |6 E" L9 \9 |( ^2 }2 [* M& ?6 W& @' z, W: f, [3 ?; c& A
4 l: C/ M% }, M! f9 m
|
|