标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?, ?. Y- s5 Z% ~) b9 M9 t Void UPP_TASK(Void)7 N) J2 i- O3 R1 T- m. U
{ # P( H/ X4 [+ V7 ]: q1 Z 8 y1 h" W+ V& g% k. j) } int i,j,k,target_int_count=2; % u& I- `4 T9 s8 l9 ^3 R# [ char ch[2];$ r. V j/ q K, \
3 g p% k; B" j5 H {2 o Y ~% {$ t$ |& v
9 c }* Z9 G9 R. G8 e; @7 j/ T' b) @
upp_interrupt_count = 0; , z' K l1 G6 j9 U8 Z5 L upp_error_count = 0;" J8 @. h! ^1 S6 t, y" |0 E& f! O
8 ^ p! H& _6 O2 g
UARTPuts("\tResetting uPP buffers...\r\n",-2);! A8 u! Z4 Q& m$ S" X/ G
// Initialize data buffers5 \! u( }" {; Z/ H% e
for (i = 0; i < upp_frame_size; i++) - d( |: j$ ^/ J$ n7 b# O: {. q5 f) A { ; v2 v$ M+ h0 O K( k3 {' K8 |5 R J: C upp_buffer_b =i; / O# `7 ]3 V/ X% h' [! _1 F# H4 o0 B. ` upp_buffer_a = 0xDEAD;, {* W# y2 Q5 D2 @7 _( J' P" o, p2 m
}, Y$ L6 A' ~% a9 w: B y
$ `1 C+ F: J. d- P //for(i=0;i<1024;i++), ]; u" T C* |
// temp=0; 1 Q) w+ R+ b: m& Z7 g& n; |+ n/ t; C: L! J
//UPPReset(); ) L; r4 z! Y: a! J6 T /*启动UPP DMA传输*/ * {7 K# p3 |( a UARTPuts("upp_prog_dma_i\n",-2); : k* K: K$ b" L+ I! q upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; ! m6 F% r* f6 |6 k upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); $ ?7 c) b. Z1 e+ X0 Z upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# ?' ]) n! r; `; ?0 I+ N5 G
" F& L" G( ?; _
UARTPuts("upp_prog_dma_i\n",-2); ?5 M3 E, z! ?6 v- o upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: F" ? r7 ~7 P3 b2 T+ d
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; P5 h; K0 D3 O' ?* V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); ! H9 o' c5 I4 N8 M- x8 O% C- w* P
/*等待UPP传输完毕*/ 9 D+ t0 `% _8 B8 r" K //i=0;+ s$ ~4 l9 }7 q8 Z2 L& d
//j=0; 1 A& M/ F5 t6 B/ |* |4 a while (upp_interrupt_count < target_int_count && upp_error_count == 0) / x. `1 T2 d, I1 y4 P8 V/ x {; ?$ C) y/ O1 L& n2 n) e" y4 n1 u
/* 测试UPP传输的同时操作普通DDR数据' O' }$ @! H% r0 d* P) ?
temp=i;1 B# H; M, U% n% s, r* w
i++;; p5 U1 {& J' g! h ~. J
if(i==1024) - a+ m, b. H7 s7 H: b {: J7 e2 V2 E* N
i=0; / B0 d* t# |- g: V: s9 ~& J j++; . U! }- V& p' Y$ o( b } 1 \% j9 k1 s' k: R) S. v */% A \$ s- g7 R. C4 |* s
! n0 c. P/ C. Y( T
asm(" nop");8 c8 o0 o# m4 j! A
2 u: ]$ R. `! @+ {# J) Z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 8 [( `7 i3 n; m' o7 C }% ^+ l6 e6 ]# c* `& Y$ \
' y0 ?8 z( t. k3 O2 ?& j /*检查UPP传输的数据是否正确 (loopback modes only)*/3 |- c4 t' m# _* r1 s# d
//UARTprintf( "i=%d\n",i);6 k" O$ e: i0 X
//UARTprintf( "j=%d\n",j);1 K2 v' K2 |& j. T/ R, x; H
UARTPuts("Data mismatch in buffers.\n",-2);/ n) W4 Y# C9 x4 Q# C+ u, `
if (upp_interrupt_count == 2 && upp_error_count == 0)6 V0 Q) m1 W2 W. y3 T
{ ! e. R$ O4 Z: \" Q6 T for (i = 0; i<upp_frame_size; i++)" A; b3 ^# ]2 G
{ 5 B6 W) C! K" }6 F$ ? C if (upp_buffer_a != upp_buffer_b) 3 {# ?% A( e5 M { % R4 e5 h7 k$ ]$ y6 q/ s upp_error_count++; $ y4 w8 G9 B# M }: k% W. K- p! _# T7 `6 ^
}7 K9 R5 E8 B, N. P& E( D7 g
}! L/ l% y4 E4 ?$ n" W. ]
, ^8 W; O* H) M0 d- Z /* 报告通信结果*/, q3 p0 c' F0 c7 }
if(upp_error_count != 0) , a% `: m4 `7 U% J7 }" c) f1 G UARTprintf( "upp_error_count=%d\n",upp_error_count); 2 P; j2 Y- |4 K9 @: G& l# x) e! [ else" [1 y7 M9 m0 ]& w2 R4 ]* C5 X# i
UARTPuts("uPP transfers complete!\n",-2); 1 w' z3 S, c& \* b+ v 3 |+ c; }1 g- T" k+ g UARTPuts("Do you want to print all the data?(y/n) ",-2);; K/ Q, }! @4 l5 a+ s
UARTGets(ch,2);' N/ b. r- r n' k+ {% ]4 G
UARTPuts("\n", -2); % W9 c$ v$ X" A' S5 O0 n2 C6 ~ ! E2 [6 |9 {" i% M9 u! q$ N" j9 ~) v if(ch[0] == 'y')! q7 I: r# o# |3 ?: M6 R
{ ; p+ M! F d% j. I# O& v /*打印全部读到的数据*/7 m# Z; a& I2 W3 F+ U* z0 w
for(i=0; i<upp_frame_size; ) $ d7 i/ h8 x: T9 P4 r; i8 I% v {8 B) h: Q" e4 y! S: x. K
for(j=0; j<5; j++)6 C% J$ k4 z, J6 L5 X
{; Z1 u" Y [: i7 e# f @! B2 V4 @
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); P/ ^( U8 W+ S, T8 F2 F4 b) X( B8 F
i++; , q6 y+ G/ r }" b //if(i >= 4096)0 K8 a# u$ o/ b9 `, t3 e$ Q2 E
// break;9 N G7 ~, y5 ^2 I3 e
( \ m! A! e( \3 w } 2 P3 b9 x, M p: o" u/ ` UARTPuts("\n",-2);4 ?( @8 h5 A9 R0 h; o2 \
}( Y3 V I$ \9 u4 Q" i- g* U
} ~$ L, I+ v& }
$ _. s3 d, p0 L* N& B) x
}8 H4 L/ I7 j5 Y) M
# V7 j9 ^$ e' I. |: T3 [6 A8 g- Y2 L0 d0 C _& e& d 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 % U2 \1 C# I, B( L作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 a L; X$ a* _( y8 A' C. z) v