标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( B% Y3 H; V9 I Void UPP_TASK(Void) % Y% n/ k7 ^: r0 E8 a{0 Z; c. J% l! m. D5 @; y, c6 R; I
9 q9 \3 L, D4 S0 v7 j8 ? int i,j,k,target_int_count=2; $ }& ?$ l) m$ t0 \/ x- }% o char ch[2];' c7 w9 M3 M9 H3 }' G
( {1 p F; p& A$ [1 P1 U
' M0 { _9 {3 h# ^* K
A2 z, b- p6 d' @& Q0 Z
upp_interrupt_count = 0; ! t* {4 L4 i) z* L upp_error_count = 0;8 Y) e1 S9 T v. e
, w: O0 p f8 v% S% j UARTPuts("\tResetting uPP buffers...\r\n",-2); 3 F+ F3 E# P/ K- U5 x // Initialize data buffers * B' Y9 \2 t& d+ G& d# J for (i = 0; i < upp_frame_size; i++) & \/ x8 H7 ~/ l) I, {& K6 C { 1 S( W! ?3 s$ N upp_buffer_b =i;3 ~" h' ^1 s- c4 B0 a4 b2 I
upp_buffer_a = 0xDEAD; + |' `. Z6 i i6 h } 3 A6 I) m* N- h5 d3 G, M. i, w) @& ]/ f: W
//for(i=0;i<1024;i++) 2 X* f% f0 Y- g // temp=0;) s& {. L. X Q- y* L: s3 Y
( Y+ ]' ~6 B, ^9 I) Y
//UPPReset(); 1 g; ^' ?+ j4 A% Z1 ^% \ /*启动UPP DMA传输*/ % V% J* {# Z) v& ~7 [9 v UARTPuts("upp_prog_dma_i\n",-2);! j6 c& g/ \. k8 y2 _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; ) Z% j& _( w1 g- R* u0 _5 _ upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) L8 \- n9 _$ V! T0 q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' K/ c( U0 a3 }1 X& t! E& ^5 b$ {
2 @* l' a/ N$ P+ W8 T UARTPuts("upp_prog_dma_i\n",-2);0 A, Q. f0 p& u$ u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 u( u: M5 N7 I8 W3 {9 O# @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); , r( W# l1 G* P upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); , w$ E* B& t9 v' b R5 ^. G) M 7 e3 \) [ U9 J0 {* U ^ /*等待UPP传输完毕*/. h/ e p% u5 o: j
//i=0;' N" B5 V) k- w, V& t) S" x4 A
//j=0; 9 P6 `" a: b7 f b1 ?+ _ while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ Z s, I& Y* Y* O0 b' X- V6 m
{+ `0 }3 n F1 L
/* 测试UPP传输的同时操作普通DDR数据% f% t; ?. z T! m
temp=i; + P! |0 \( ^9 q; ?$ z( ^" C- n' F i++; 1 W- ~& ]+ |( P; I! |* [ if(i==1024) 8 a& m x& y3 Y) @" X {1 C9 p: R% i6 j$ q7 w! T1 M
i=0;* h/ ~, H7 @3 ?8 j- G
j++; " e- K- B. i: a1 ~ }( w9 h8 s. V5 b% K0 P
*/( i t/ k3 t1 c9 T
5 s9 c. }9 q( C( n2 O' O. O
asm(" nop"); " P* Z7 z b" y) r2 h5 D 0 }4 f0 L# Z6 f+ {8 k. T //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ c) a: b7 B5 B O1 |
}; y+ Z9 a! ?5 V( B* @1 }- M, E, W
0 n6 r; X) k6 z& c7 a4 a
/*检查UPP传输的数据是否正确 (loopback modes only)*/0 P% w3 S1 z0 v2 h2 W
//UARTprintf( "i=%d\n",i); % s! L2 d$ I- L& g //UARTprintf( "j=%d\n",j);& _2 E1 D3 w Q( u
UARTPuts("Data mismatch in buffers.\n",-2); 2 M2 o& H0 c5 e if (upp_interrupt_count == 2 && upp_error_count == 0). w3 A7 k6 n, ]0 s! X( C" }
{ 2 l( y: Z2 U' @) r5 T) P for (i = 0; i<upp_frame_size; i++)/ y5 ~0 P( z' \! H
{ . t4 X/ f* Q# J: F M4 J# K5 d9 ] if (upp_buffer_a != upp_buffer_b) & C" ^3 S8 @$ h3 Z& g, ^ {! A5 W( [. F% t1 z; C1 I: y
upp_error_count++; # _4 ^$ e/ ^& F' }3 Y6 m } % d/ B! p2 j, h5 u9 e4 x& F5 I } $ a& i% y4 \, E5 L2 b% Z }) R# p. r: u0 V4 O
! Z% w; ^7 C$ {( w; y, p' U; F /* 报告通信结果*/ 8 u3 n' F) j4 m2 K/ Y4 a if(upp_error_count != 0) : U+ s7 c m! G# X UARTprintf( "upp_error_count=%d\n",upp_error_count);1 p: j' x/ e" ?/ F6 Q
else5 q9 b: Y3 X/ t+ w0 s
UARTPuts("uPP transfers complete!\n",-2);% U& V) z, V1 {: q2 I7 _4 _, |
5 A2 ]5 N) l: k) ~) D UARTPuts("Do you want to print all the data?(y/n) ",-2);! z' v& z9 ~* i( Z; f9 n
UARTGets(ch,2); ; g3 M8 g. }# c2 B UARTPuts("\n", -2);( z" _' m, a+ a2 }+ F! {
# G+ O( Y- T. W A7 g if(ch[0] == 'y') + d9 X6 J9 ^! e# j' | { 2 ~" p) ^9 z; j n( L; X- @ /*打印全部读到的数据*/ " r; ~8 W) v% O6 ]( C for(i=0; i<upp_frame_size; )4 d- \4 R. Y; M6 X9 T/ }' H5 S( }
{ : f# l) s% s! v% n# S3 S) E for(j=0; j<5; j++) 4 ^& _# |0 S8 ~ {4 [0 o7 x r; N, }3 u& U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);2 @, D1 o- K- X8 F
i++;2 Z5 Q5 u/ z* v
//if(i >= 4096)* q9 L2 I, ^+ e/ k
// break;' Y, m: ^5 a/ M, X
3 ^( }& i H6 c# c- i4 `
}" Z, O' M* Z0 W" G' ]
UARTPuts("\n",-2);# y6 A$ a% s. T, I: v
}" ^4 a" _7 Y( u; \* Z
}# _3 {8 y% [ l) Q
* p# g" j+ ^+ {. h$ _} - W( }9 N, j0 \5 Y4 f 3 x5 q- z1 I: N9 a7 a+ Z. C. A5 Q; e; F! u6 {0 \ 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 ( k7 D" G" @1 e: q/ h作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! ^! v- F# k- r$ _! A n5 ^. x