标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? 6 @+ }' n) ]# w" Y$ NVoid UPP_TASK(Void) 5 U! l# L0 m Z& Y{0 c, w4 B% Q0 P; f6 c V4 N' o
3 o1 I0 a9 s% R3 @' G
int i,j,k,target_int_count=2; 4 V' S8 H& z' v- F( f char ch[2];# ~2 A9 |4 S+ x( b
^- v, i4 [. D4 r. n
w ]9 `) o1 b2 |" o; R) h8 `1 Z V2 j1 ~
upp_interrupt_count = 0; 9 s0 ~9 S3 K, J upp_error_count = 0;; w3 s _$ m8 G( g' `) k8 r+ O" U
7 k; h, d/ C0 q( u( V4 R7 c) B: [ UARTPuts("\tResetting uPP buffers...\r\n",-2);: M" r5 T; O( U
// Initialize data buffers 4 Y" R- h, q6 L# V for (i = 0; i < upp_frame_size; i++) 2 k/ q- }7 f5 x$ Q k {. h, Y' W4 F7 z' T% H! T9 g
upp_buffer_b =i;5 X5 @* C( n/ h3 o5 o
upp_buffer_a = 0xDEAD; . d+ z4 W2 v0 [+ j, T+ z `9 y } 5 C3 p5 d0 u& @" e s( L( W1 q. t: q* V, T( v" ]
//for(i=0;i<1024;i++) 0 B( }2 Z: s! y9 L // temp=0; ; A: ^0 {1 R, { ) `% V! P& b; S //UPPReset(); / y: o9 r2 [+ a. o' ` /*启动UPP DMA传输*/9 N5 {, z7 E1 Z/ I1 s/ W
UARTPuts("upp_prog_dma_i\n",-2);% C# r4 Z0 n- u1 p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, h+ T7 s$ h$ l7 b0 q8 k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 1 K- `9 y1 L) j0 ~$ L2 Z upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); - X/ Q( b- p, U( |5 j! I/ d0 P1 \4 v, T% S6 `& Q$ z& p$ g/ B3 J
UARTPuts("upp_prog_dma_i\n",-2);5 }% S$ O: J# R# C& z! r) t. K+ L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; . p" j# i* G+ A# X- i @; j upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( {* U+ [0 d: k4 {1 h( |8 Y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); x4 K T, s" P; p
. e2 U8 a6 s( j' ^+ Q* X /*等待UPP传输完毕*/& H" `) `: s' d" I, g' A- b
//i=0; 8 ^5 h* v7 g$ C //j=0;$ G# m6 K1 a" j/ j* m
while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ Q* x0 O2 ^0 x! L0 |$ T! p
{ 2 a- i8 Y. X" Q0 K' o# V /* 测试UPP传输的同时操作普通DDR数据 , M3 r! c: \: z m) N* | temp=i;& @" P; F# y( {/ f1 W( s
i++; & K4 C% s# g N8 n if(i==1024) * w, |$ f2 U' ?7 ^( h { 9 z1 r2 ^, Y+ ~( e" w i=0; ; j2 d- q N0 @ j++; 2 R& W* W0 u9 U+ Y } & w5 m: p5 W. I2 @" U! q& G */ H$ U7 w( }. x2 M9 n" |0 u
6 j! F9 V0 v3 {' ^' a. X asm(" nop"); 6 u' a) ^* \* `& l2 y* E2 v- [, ]- D0 S
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); / |: y$ S2 V4 K) b+ G }5 f4 j' i* n) b, p1 ]6 h% s3 A5 \& E
/ @) x9 X& x9 X! R" `5 ~: }4 b1 B
/*检查UPP传输的数据是否正确 (loopback modes only)*/6 z: r! o8 X2 u; e& n, e1 ?" k
//UARTprintf( "i=%d\n",i);8 U* `! L5 W1 b( Q) w; j
//UARTprintf( "j=%d\n",j);2 ]2 d0 G7 K8 r
UARTPuts("Data mismatch in buffers.\n",-2);/ a4 X& c) ?$ s( l
if (upp_interrupt_count == 2 && upp_error_count == 0)) U0 _2 k8 b! k4 K$ K* h
{ 5 A( V* d* z3 z# C6 } for (i = 0; i<upp_frame_size; i++) 0 d* G! Z! W" F5 A1 V { ' w7 |5 P" Y1 c! c: Q% a, F if (upp_buffer_a != upp_buffer_b) % ]9 U8 u+ Z/ z9 a& w { % Z) y' r' I% {. o% i upp_error_count++; 5 D: Q& S# x3 [3 v ^ @: d( q }% s V* I: m2 x: A. Y
}, B7 `4 n& _8 |4 a
}5 I% W# V, V. H, B
- w) L- Q) S6 y, c /* 报告通信结果*/7 v W8 K& j6 {* D$ ?$ i! m
if(upp_error_count != 0) 3 E7 v. u. t3 N4 Y, T% i( V UARTprintf( "upp_error_count=%d\n",upp_error_count);' {" S* P- J# a& C
else $ p0 c+ I8 q3 {' x2 f4 N6 b" K UARTPuts("uPP transfers complete!\n",-2);7 {1 ]: n \5 k: s% Z/ G6 V
) ` Q1 ~7 e( Y/ | UARTPuts("Do you want to print all the data?(y/n) ",-2);5 Y& p3 c6 z& H1 b
UARTGets(ch,2);- y9 F4 W' i* u8 T( W# v% C5 l$ t
UARTPuts("\n", -2);) G) @$ [* u* S6 [
+ I3 M1 p9 Z7 n1 [5 f0 J+ s# d4 q9 w
if(ch[0] == 'y') / u5 |3 K, x* t& z T, ` {% D# g' M& l+ ^ I: n4 f
/*打印全部读到的数据*/* j6 p' A& [- i) T
for(i=0; i<upp_frame_size; ) 3 K8 B* T p5 A" a3 \ {' A% g0 f8 c3 z; c: W
for(j=0; j<5; j++) : O$ d6 v) Q$ w6 r' O { @# f+ |# a, F0 O
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);2 c6 x, i0 _) H7 P
i++;4 M. Z H) ^! W4 z, y3 h4 m
//if(i >= 4096) 6 A( \6 v! O1 z // break; 7 z9 g2 E6 Y5 c2 U8 _/ j, M! ~% J( B x
}$ O" x+ [- l4 |
UARTPuts("\n",-2);% ~2 @5 A: v, s2 h" U; h( X, q4 q- f
} - U' A* x7 l# b/ h# n }" H3 @' t7 Z! x: R
* Z, |6 `1 F4 U% T
}3 X. V9 R8 [5 G$ q# O B, k/ D ) x' k. d6 }9 S
1 |4 A3 r2 g1 m: @ z6 C 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 6 r$ G2 X$ p0 ~& s+ q& V" Y) A作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 * ~1 d2 ~7 Q+ f: a& h% J