标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? $ G% {4 Y1 h0 [0 ]6 h* H1 dVoid UPP_TASK(Void)* |) M7 J6 @( r: q3 i2 Y
{8 N- j$ Y/ {. [/ H5 F$ j9 N
: p3 o$ M( I1 i, K8 F N" ]
int i,j,k,target_int_count=2; S5 D' W7 w/ { char ch[2];2 v+ m& `; t' v5 v% Q* `
" l+ c/ X6 W& d' u# v, }2 U9 }
$ N' u- A$ N( v0 x+ L( v; u
- P: j9 \+ i' ^) P8 p4 E L
upp_interrupt_count = 0;% U2 {1 y6 A* i8 Y9 {7 P
upp_error_count = 0;0 D2 `7 G6 u$ j3 T2 J$ ]
% e" \. f4 d) P ^ UARTPuts("\tResetting uPP buffers...\r\n",-2); 5 q D+ Q' y" l: n // Initialize data buffers, K) t7 t* u" |% X4 Q: g: K
for (i = 0; i < upp_frame_size; i++) 3 u9 A5 a% x+ T: Y0 v( s" } { & \2 ~4 N/ Q" P upp_buffer_b =i; 4 k8 A& ^8 g" }9 z2 m0 E. g% h upp_buffer_a = 0xDEAD;. `& O0 c5 F$ q+ ^" t/ z- H
}/ {1 o0 l( K) Q0 ~
# U- @' d2 F R Y3 Y/ _ //for(i=0;i<1024;i++)- a: I8 D, ^* `$ P0 t ^; W
// temp=0;7 ^& o! p3 K, y R% J$ }2 H
/ c7 f+ @. v* C
//UPPReset();% r8 g* _2 F F( a" [1 A
/*启动UPP DMA传输*/ " b# A3 b. ^& r9 z3 d$ R0 C5 a UARTPuts("upp_prog_dma_i\n",-2); 5 ?3 _4 t, R/ \. y9 P upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, p# I7 _! n! X# p3 m, s8 V$ @$ x: I
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); z: k7 d! |: d/ ]% g( [ upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 r8 g6 B2 ~1 `
+ G- S P6 S7 @, O+ A! Q% T9 M
UARTPuts("upp_prog_dma_i\n",-2); 8 ?3 `/ J) E5 U: E' M upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& s; z6 v R) h$ ~# @9 r
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); ) o/ v+ `7 n1 h$ P/ y+ F x# q& l upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# G1 ~; C" A7 q0 P& B/ H v
9 g# y/ M! c0 k" X! Q
/*等待UPP传输完毕*/: d7 }9 a; p3 N
//i=0;5 T7 ?) _1 f: c& F' M
//j=0;. t; s% U/ @; I, m5 _1 _
while (upp_interrupt_count < target_int_count && upp_error_count == 0)* J& X; {8 s+ W7 U
{8 k& ^* W9 P& I9 o$ ^. |: Q, t. g( F
/* 测试UPP传输的同时操作普通DDR数据& v9 J/ Z( k+ t
temp=i;% I. \( K6 }+ @
i++; 5 C5 n9 P7 {+ `, E, o- n; M- S if(i==1024): X. \0 l$ H* u W1 S) c) \
{/ O( k% j! i/ Z0 v
i=0;9 m; G( }6 C$ n. e# ^
j++;6 T' }8 H l B! E. `3 b: k$ l( R
}( ^! f9 O# e+ ?* y1 x1 z8 N
*/) r5 P/ c4 ~5 n+ T% Y F: b
5 x. E3 a4 ^% ]* o5 A) k
asm(" nop"); ) \0 n3 ?" ]' Z- V: U, x2 h , u2 I* q0 C$ W8 S) q; } //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 0 }! w1 h6 y& Y } - X( I$ ~( m: i. @1 f# w! G$ k9 t- e4 ~6 B
/*检查UPP传输的数据是否正确 (loopback modes only)*/ " j3 H% A9 r% v, X3 t4 m- Q //UARTprintf( "i=%d\n",i);* ?& o1 f* M2 a# V/ [
//UARTprintf( "j=%d\n",j);* O( A5 R1 I h9 u5 E8 X3 k
UARTPuts("Data mismatch in buffers.\n",-2);# l& S# O/ |9 m; G1 l5 ~6 m9 ^
if (upp_interrupt_count == 2 && upp_error_count == 0)* i: m" ?3 l' j, d
{ - \+ f% |! W$ N( m; E$ ? | for (i = 0; i<upp_frame_size; i++)$ v2 D. }% s; U3 b1 }" X! J( a# _3 z
{ 7 A% }0 u6 |4 h- Y5 S2 e& ]$ y if (upp_buffer_a != upp_buffer_b) ; e, |+ [; z* ?1 y { 3 `1 O" o8 z6 ~& g( B upp_error_count++; 8 w8 m" h% w0 m3 G, f8 h0 g3 k" U$ m }3 D: G& X9 H4 Q7 S$ G
} . q$ J8 u/ E2 y1 W+ i# V: H8 C }+ Q9 e! f" u: |" K" {. @" Q
4 q; b1 |! U9 V# Z- n /* 报告通信结果*/% h& C, P( Z, W% \. A6 G
if(upp_error_count != 0) " p" {5 G! o0 k/ K6 _. v UARTprintf( "upp_error_count=%d\n",upp_error_count); # V: p* R2 Y2 A9 h else / l% p) k, ^8 ^( G: @0 T UARTPuts("uPP transfers complete!\n",-2); " T0 P; C/ u( L0 P2 B7 f: b* l3 o8 E L- w2 Z' K5 M" ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);+ G0 ~% }/ H* \1 N1 h
UARTGets(ch,2); * P3 ~6 \- Y/ L5 ?+ H7 N UARTPuts("\n", -2);% J5 \8 f* i/ l% q
8 a R* }. k* k8 o Y3 a if(ch[0] == 'y') 3 | R/ Q2 p, U$ t {$ j$ u* w* ?" D) t+ u
/*打印全部读到的数据*/9 w7 d. B. M. a) P t
for(i=0; i<upp_frame_size; )2 L' P& S9 d6 f2 H
{ 5 C2 r- H9 J+ ~3 ^1 R) y/ w( X3 J for(j=0; j<5; j++)0 L# C d2 |0 G% Y. m: K. m8 b i& A
{ $ Y: |; a0 G. {, v UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);% \1 H, I( w! Y/ o, n
i++; " k. C- c( }- G //if(i >= 4096) ! }8 i" h& [- b$ g! A // break;) C& h0 K3 c* ^
$ z: P3 X! F; z6 o5 _% D } & ^ H$ L7 k& |" }+ F UARTPuts("\n",-2); 3 i( Q0 f, {, ^ r# ]# d }; `9 I* R# ]5 m2 j, ]* W2 O* x
}" m/ \1 ]4 `, d. x7 ?# P
: r' n# U- ]. M$ H! s o1 h} , M, t3 Z- y" k7 m * b! i5 ~4 {0 m ~6 Z1 K6 o ( R# O2 d3 l! ^作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 2 p6 z2 N+ r8 }4 t4 g+ K) x作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 T& C' a& o0 f# I& }