标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? ) H8 `6 J# O! S* Z6 L: ?5 IVoid UPP_TASK(Void)( K% i) _( P; ?# K5 W: F
{ - z* `- X/ R$ c/ b' Q6 F9 z; F1 r. M3 j
int i,j,k,target_int_count=2; * x5 ?- k% D' F& A2 O- c& } char ch[2]; + D P' B) P, D9 W' m4 c2 X9 _3 ?' _# Z* d" [: V. U
- p4 ~" r/ V4 U, j O2 V
$ ~ {) V+ G8 x+ a9 D+ }
upp_interrupt_count = 0;5 T& I" h# L1 Q0 W: K
upp_error_count = 0; $ s7 T: ?) a; m- b6 {+ h% K: C ; }5 d9 B7 z# H- [ UARTPuts("\tResetting uPP buffers...\r\n",-2); & V, {3 S+ A/ ^ // Initialize data buffers 5 G6 j" B6 E! g. H8 C0 T' | X for (i = 0; i < upp_frame_size; i++) 5 {7 y9 C- P+ h9 u. J. u {- u$ n$ l, o3 _; \+ D' V4 X& y
upp_buffer_b =i;' r: N- b3 Y, B& L- D+ Y1 U
upp_buffer_a = 0xDEAD; ( d: C! G- J8 l } " j6 |- }) j* j; E( V3 I4 ~ % b1 p+ P7 \/ O //for(i=0;i<1024;i++)/ Z' S X9 g- H& T! F& F7 C4 J, Q
// temp=0;( x1 T) g6 |+ E( f. i
- r5 C8 s( ^" r$ ]& m3 _
//UPPReset(); + l; E4 u5 M! E /*启动UPP DMA传输*/ 0 g1 B% J2 K/ P W& R U UARTPuts("upp_prog_dma_i\n",-2);2 x; H8 r$ J0 ]1 L# u- N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* _8 e* c0 m- L/ T2 I
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 S! I' J( M; V' \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); 7 A. C0 _9 S& I& S# G& E8 ~! ~; [4 x, v. B4 X- e
UARTPuts("upp_prog_dma_i\n",-2);6 N" r' h% W7 `- R
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, _) A0 M( `) F, H7 ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); : O8 a6 B, E/ |7 e F6 b upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); " i$ @: l) d# o$ ~ 5 H8 l6 `( \4 ^! Q8 `, Z& { /*等待UPP传输完毕*/ ( o. T0 @1 x) \& T, P% K //i=0;7 O+ d6 S/ T) k
//j=0;, F9 {3 R, q ~- V; Y' f* g7 A
while (upp_interrupt_count < target_int_count && upp_error_count == 0) ; c8 S# A9 d9 P' w' E' U; ?% B { * |* g! |( n9 j5 S+ r' B- l8 s) m /* 测试UPP传输的同时操作普通DDR数据 & u1 k) Y1 |2 l3 i temp=i; " v+ p( v# E# ]+ s1 C) f i++; 6 o' c( s* c: h1 L3 g if(i==1024) / X& b8 n( E: w) X {) F ]& E) g7 O8 q5 Y
i=0; ; ~9 R9 y' A6 f8 d j++;0 E. E& Q/ G, z; @) j" X& }
}0 n/ B6 m, x+ k( V
*/" g! _/ i+ L1 J& |( z; z: |9 \& }
5 y4 b0 d/ q1 L
asm(" nop");: v6 T9 V% T9 d$ v* v) h9 q0 ~8 I
1 U' E5 A4 b, |+ |4 g' n //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 8 \0 ~3 R& Z0 m5 H4 l } * Y% F9 f0 g" ]3 v6 o) K% v7 N: `8 y1 g5 O3 z! q$ v( t
/*检查UPP传输的数据是否正确 (loopback modes only)*/+ m. Q, ^7 \1 r# W* ~! M
//UARTprintf( "i=%d\n",i);; x9 f4 |8 r1 ?
//UARTprintf( "j=%d\n",j);, P2 o5 b% U- h2 i# M
UARTPuts("Data mismatch in buffers.\n",-2); ' W- l+ |$ ]2 I N if (upp_interrupt_count == 2 && upp_error_count == 0) ; N& X, J5 }( Q {$ G6 E2 E! S; s" R' @7 _7 K
for (i = 0; i<upp_frame_size; i++)! K9 Y8 E' @! q8 V; _) `
{ . i( o6 {& O* r# v7 P, Z if (upp_buffer_a != upp_buffer_b) ; V" e+ V& E3 X9 v& v {! ]5 s: n- m( P1 ]& [
upp_error_count++; # v+ U; Q$ ` ^4 {. c' X c } ^" _% |/ ]1 p( L: y+ `) q } % t4 M# X8 J& a( h6 r; t }' x0 o' S- A- n, J4 r) |; ?
- }$ C! y g/ c1 g; g' q
/* 报告通信结果*/" M/ {; T# o w: X: L
if(upp_error_count != 0); J7 z* V# g+ h( F
UARTprintf( "upp_error_count=%d\n",upp_error_count); 7 D8 p% H% ]$ ]3 L# t9 U else. k5 S% X# j" e0 E
UARTPuts("uPP transfers complete!\n",-2);2 h, I/ S. S- y- M/ N/ {8 n( d8 C
d# f+ b: W1 F! I! u5 c% C UARTPuts("Do you want to print all the data?(y/n) ",-2);' J5 }+ ]3 D' \7 q9 K
UARTGets(ch,2); ! G& L& z7 b/ Q# _/ L) m" T UARTPuts("\n", -2);2 K" W# [0 G) {" `$ c- T5 f/ L' U
/ l7 Y7 j2 P) x' k2 f$ G) J1 w if(ch[0] == 'y')$ q6 k( @. T. ^8 E) C) A
{ / Q3 b* l1 a( P( b /*打印全部读到的数据*/ : P3 p+ s) W- u: ?/ n$ I for(i=0; i<upp_frame_size; )- F# _' L& ?. l5 P+ Z/ h+ k
{ # e6 f7 Z( B' B0 n- n for(j=0; j<5; j++) ! @/ p+ F5 k8 H9 J! s% ~: V; H {. x% _/ a/ E& g
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); ~! t w# ^$ @3 @% _* C* R( o
i++;" C+ }( \* v$ U. \
//if(i >= 4096)+ a/ O+ [3 k' X) a3 p$ z9 s' A
// break; 0 o1 x9 d0 q' U* {8 m! G' |0 q; O8 @$ c
} - p& c0 ^& r# d0 j( c' N UARTPuts("\n",-2);1 T& e6 @7 _% K( f: o
} & x& [- |0 C D o } : u. Y- T( @6 o4 X) H 0 m$ w* ]( P2 q8 ^}6 D6 Y* f; N, x9 `% O o
$ J/ ^# D0 ^! U. J, M3 b & _4 ~1 U$ O6 q( \/ T! i8 y7 l: z作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 3 R, o$ j, m; T作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# v$ u3 y; f( r& z+ K; M