标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- x6 A& V, O0 F" V, u4 Z; Y Void UPP_TASK(Void)1 J C+ e: b u: f
{( ]: x3 W$ M' o
4 r8 ?6 V$ D- p5 h- I3 k. A! x
int i,j,k,target_int_count=2; z6 f- v4 X; T, r. _8 A: {
char ch[2];2 T# u* U9 @! `
3 n7 v& Z+ @& Z, D5 w) Z7 T9 S5 D
2 T9 Q; w8 z6 P: C. x8 V 4 `0 @, w- E O: Z8 J upp_interrupt_count = 0; , s8 i) C& m5 `1 Y. M upp_error_count = 0; V2 ` ?5 g9 J( `2 H) d9 c
" `0 x4 S0 k' \) B) [4 c; ]# _) f UARTPuts("\tResetting uPP buffers...\r\n",-2); ' `! }0 s) |* W W; ^1 b, A4 r // Initialize data buffers* e( d3 `3 ~# c$ D5 q
for (i = 0; i < upp_frame_size; i++)2 x2 G6 y' ^, Q) R+ Z T2 T$ l
{ 9 ]" Q5 G+ e5 r: i upp_buffer_b =i;0 q4 f {$ C( p
upp_buffer_a = 0xDEAD;9 o; @* a1 b7 R6 B
}' k% Y" Y+ Y" w0 B0 ^! Q: H. W
& {; M1 \* @2 K3 e8 N //for(i=0;i<1024;i++) 1 x6 p' G6 r, i+ X1 K // temp=0; ! _+ H; A' s! E( P, q, u2 ^# Y9 w+ w p0 a
//UPPReset();" l+ D& J# g: {* b
/*启动UPP DMA传输*/ + ^; y; J( Y0 \4 ~ UARTPuts("upp_prog_dma_i\n",-2);# q. }* p7 W6 ^- a7 s/ P
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 U9 R( [+ w i) l! D, ^! O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); ; t2 d) C) `& i0 e upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);* [' Y7 [5 Z q$ i# ]3 w4 V
$ Z4 A1 H4 ~8 Y
UARTPuts("upp_prog_dma_i\n",-2); 4 p; _" N$ q" D/ m5 u upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- d& r" f9 ~. D. y! q7 R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 3 m% {1 [; {7 Z* c upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! T; U: W s9 q5 |; K7 a& N
" }+ x8 d6 q5 A
/*等待UPP传输完毕*/ " e. S, v7 d& _- |+ a //i=0;6 Q: u, G1 J) ~! A! Y$ y
//j=0; ^' B8 S8 _; g* v4 P
while (upp_interrupt_count < target_int_count && upp_error_count == 0) : B% `2 z0 d0 ]9 g& T! y { * q! e% p1 ?4 R: T /* 测试UPP传输的同时操作普通DDR数据5 |9 i' Z6 k5 b+ w5 k
temp=i; ) J0 g6 l2 y7 ` i++;2 i- E4 i( V8 k: ]( b! [
if(i==1024)' x4 |+ j9 Q! P9 k1 ]$ H# G# Z
{ . {, B: H& y3 }$ @& |& g6 o i=0; . w+ w4 ~) a1 y. q: [! [$ Z! b j++;" P5 @* Q" _0 y$ T
}" q5 U2 o! v: u+ R9 m
*/# A X% [. `- V% s% ]% p6 J
; v9 O4 P8 c G y
asm(" nop");3 I0 l6 Q7 x9 o9 |
! e" \) y# n/ Y+ I/ ~" g //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); / N! {9 y. m& M+ M- A } - ]# s9 C# h5 S6 X ( _$ F; Q& C9 o% t8 q# Y' P$ }' y- G0 D /*检查UPP传输的数据是否正确 (loopback modes only)*/* P$ u/ i% k1 K6 h# o0 O# T
//UARTprintf( "i=%d\n",i);; X" O6 y6 z& Q0 ]9 R2 T y
//UARTprintf( "j=%d\n",j); + p, T1 g9 O4 s: a, ^ UARTPuts("Data mismatch in buffers.\n",-2);3 C+ ]- K: o0 j0 C7 f
if (upp_interrupt_count == 2 && upp_error_count == 0)( i3 n, ]4 s, i2 Z- t7 Q/ K
{: H, u1 X2 W* q. v( B7 `) A
for (i = 0; i<upp_frame_size; i++): T6 Q5 s/ t1 R) Y
{/ b0 k& D' C/ p( r- V, r6 |+ \
if (upp_buffer_a != upp_buffer_b) / q/ O& m3 b: E% F { 1 F, g. x5 N4 I: F0 r, a0 B upp_error_count++; . S2 q$ M K8 ? }5 S) G+ y$ v# q
}" G( Z+ W$ |* n5 P' b0 l9 y7 {% U/ o
}# n" A+ r& T9 [! m
* K5 U3 \" S8 ]4 d /* 报告通信结果*/ 6 R# ^) G/ d8 f$ b; U if(upp_error_count != 0) " B$ r; t2 N+ L4 D6 l; ] UARTprintf( "upp_error_count=%d\n",upp_error_count);1 d* y2 I; R& E! n* k+ B
else6 H" B$ x/ ^% A; L: o
UARTPuts("uPP transfers complete!\n",-2); 6 R) P& U6 o' o a) D + r7 P8 A$ O H. i( F6 r UARTPuts("Do you want to print all the data?(y/n) ",-2); 7 A# J3 X% v3 R, }; y UARTGets(ch,2);# s. C A$ A2 ]9 O
UARTPuts("\n", -2); $ o+ K+ \7 y0 S$ j& M) {+ _$ L# l# c! m" k8 j% h( [
if(ch[0] == 'y') 1 O$ H' r2 _$ q5 Q# Q6 R {/ I6 B3 t& j3 `3 V2 K, a
/*打印全部读到的数据*/ + O6 C: c, }+ I' ?! Q3 Z `' e8 l for(i=0; i<upp_frame_size; ) 5 P7 G& y0 W$ f+ K9 ^- O1 ?) W% Z { , t2 X; _. K! h% [; {6 g for(j=0; j<5; j++) 1 z+ F C+ J9 z3 T) i$ P {) d; R7 P6 Z, z9 m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);+ P+ L3 c& A' b
i++; ) D* M* s: ?, }! a, N9 Q+ r' w4 y //if(i >= 4096)# X" t6 P: n' ~
// break;' R+ t3 k5 K: M) e
1 W) i) }5 W/ H0 c+ b } ; E+ W1 S p+ N/ b UARTPuts("\n",-2);: }) \& E2 S0 s, {
}, K0 l1 j m4 ?# }
} 9 e0 ` w+ R* D$ O* }$ ]( b+ E, Y0 l3 j5 o* s5 f
} * U S6 {3 Q" _0 i ) ? e- J5 Y, T8 `) f / _0 J7 X9 u3 p6 k7 b( O/ |作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 $ z8 k+ m9 \- v+ K& i作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 # z9 P' y# `) ]% ~8 t