标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. @9 B; s y& _ R. ]. f: u Void UPP_TASK(Void)) r. d+ Y. Y6 r) U; |2 j
{ % D/ y% _/ ^& J$ T& i- W # b6 `) T1 h# F6 ~7 c# f! h X( n: d int i,j,k,target_int_count=2; . h) a2 Q v$ S [ char ch[2];3 ~# t. [1 e( a
0 N9 |! ?. n7 O
- U+ W9 ?# ^3 q0 g6 E
4 Z6 D* _1 ^+ j9 r6 |7 Q$ Q upp_interrupt_count = 0;5 {9 A; Q9 P' h+ b
upp_error_count = 0;/ s3 Z) P q8 p% l4 o# p* h; Y4 h
" i' Z/ {. g2 o
UARTPuts("\tResetting uPP buffers...\r\n",-2); ( s: Z2 ?, c2 ?/ } // Initialize data buffers 2 q7 j' H( H3 _' V for (i = 0; i < upp_frame_size; i++)+ T% z1 p; o% |6 t, r
{- b9 j ]8 L1 c* |7 u5 t
upp_buffer_b =i;! j9 W1 ~4 N" I0 b- W5 X1 [
upp_buffer_a = 0xDEAD; . N' p* \- `& m6 [. ~& A: D } . F: u# i- q2 P" A- B! r" H' `: U1 O0 O6 Z- I
//for(i=0;i<1024;i++) / _/ Q u; e* \2 D3 o; P' Y; Z+ u% ~ // temp=0; " h5 @6 b' E: Z/ ?$ ]2 S" ? T+ p2 p" M& Z2 M1 s5 ^
//UPPReset(); 3 Q0 V9 V& z' S+ ~ /*启动UPP DMA传输*/ 7 h* m2 U$ ?; U3 k4 ] UARTPuts("upp_prog_dma_i\n",-2);; L- b D& C: J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; 3 o7 ?" J* b" e2 O8 ~4 I upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); , \/ r) N5 G6 v' ~- v upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); 8 z2 e& S& c8 R/ A8 Q' V/ D + G7 D+ T; n6 x+ I; e UARTPuts("upp_prog_dma_i\n",-2); l/ `1 s8 R8 u; E( N1 w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; , w$ T; }6 W: v4 k ^( D" m; K3 G. j4 S upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); + u: \5 \2 }7 h upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); 4 L- o! @/ Q( j8 d4 F. w. U2 | 3 l9 Z' p, W* \/ K( s1 h' O /*等待UPP传输完毕*/+ K! Y0 F4 Z9 L
//i=0;1 f: v2 _2 G$ B5 X" E9 i/ M; c
//j=0; ' e7 l, P+ f S( `# L" B while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 {9 S6 L- R! g" `' O$ [1 \
{ 3 ^0 e7 j9 i( p* X8 Q2 _$ M /* 测试UPP传输的同时操作普通DDR数据1 s4 q2 g/ L( _. T5 o; r
temp=i;4 l* x. k+ `9 _6 {9 K
i++;0 w @( M# ?1 b
if(i==1024) , L8 k& C2 \# M2 F { / O3 {6 }) ^9 Z. ^+ G i=0; 6 m9 D3 j! Z: N) y, S% Z j++;0 G, E- n4 u+ p. v2 n* X7 t
} ) g6 J" V/ K0 ~" }" z1 j4 f) N! g */2 V- v7 U8 ]: `' Y
1 R( b) u" w, b7 q9 m$ n# @& T asm(" nop"); " y6 \% c+ G7 g# @+ q+ \0 L2 T- g p
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% T6 u1 y, D& i7 O
} & P% S$ h7 D- J+ @* H& a, Z* ~) j6 g1 ]5 _: I" k& ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/, ]* ^/ [, D3 f0 e& R
//UARTprintf( "i=%d\n",i);3 G0 A/ I: I; E
//UARTprintf( "j=%d\n",j); 4 D- d5 d* W0 H+ o$ n, N UARTPuts("Data mismatch in buffers.\n",-2);( M8 x) A4 |' e$ A
if (upp_interrupt_count == 2 && upp_error_count == 0)9 H) u9 V# N& ?/ w! v( f
{4 F/ S/ v* p t
for (i = 0; i<upp_frame_size; i++)4 o) V# s3 j+ f: _# S
{ 1 K* ?, v0 }3 `+ q# V" |# N. ]' M if (upp_buffer_a != upp_buffer_b)# Z7 x/ w; l/ c# A2 D. d
{ & ~' ]' Y$ p' C. B* A upp_error_count++;" T! D' P! d. s. ^7 x
} % F/ U. t% N' Z1 B+ x# p8 A3 d } 9 p1 _; k+ S6 ?0 B }* F' Z3 n, p5 U
) g i( z8 L( D9 C/ |& X; s /* 报告通信结果*/; I' ^: h S( b& y7 W2 ~9 ^/ {) O
if(upp_error_count != 0). d5 F4 ?& g8 x+ P% {+ Q3 m& ~7 z
UARTprintf( "upp_error_count=%d\n",upp_error_count); 9 ]- V" [) P: q u( y3 r" S else " U% ~; A: f# W. P! C3 c& t1 x UARTPuts("uPP transfers complete!\n",-2); : W4 o+ g* g6 a" g0 ? 2 F% N7 {$ i4 [; L, e5 n7 n2 u, V UARTPuts("Do you want to print all the data?(y/n) ",-2); r t8 |! N, k$ p8 m& @
UARTGets(ch,2); A9 `8 c* y5 E3 q o& H' `
UARTPuts("\n", -2); % [: ]( c( ]! ~! L$ l0 }( p: w) f% w+ i3 M0 H2 ^" \
if(ch[0] == 'y') 9 U" P- c( P& z9 G { % C9 Y% {( A( m. G4 O /*打印全部读到的数据*/ $ c7 P# c1 o$ B; h for(i=0; i<upp_frame_size; ) ' P9 [3 F- d* U: @4 y { , c) Q3 f( O& [7 Q2 b: ` for(j=0; j<5; j++) - n" v: j/ p9 I+ l; v: Q. C { # s" L! s- k: g. O7 k UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);* N( U5 _: V3 ~4 a0 y' c5 s- ^& W
i++;4 k Z3 f, D' j; E" x( ?4 k* S+ L
//if(i >= 4096) " Q8 {2 c! k; B; L // break;$ Q& Y2 V9 p) `2 u7 o( ?6 U
) @. @, e3 s: ?( @* y }% x6 d$ Q; a9 r( x! D+ ~
UARTPuts("\n",-2); 4 p$ }! H) v- B- ?% E0 r: w } ( m( h# i! ?* U5 Y+ I r8 ~' X } ' U) B s4 S6 {& b$ A, w- \; E+ r# q2 g' }. ]
} ( A1 L. q- u, c1 I: {$ F6 F3 Q& u% |- Y2 w: _. m
E& }5 D, p3 G8 |* B z 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 ; S5 q4 ~0 b2 T$ q1 s' i/ n' B5 B作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; r. k0 ?3 s4 S9 W