标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 O7 e4 J, y( M& d, p. P5 ] Void UPP_TASK(Void)8 v/ S( ~9 V0 b I
{ + m, U2 y1 w3 ?/ _0 ~4 ~! t! ~, {7 [. @% m# ?. L* Y3 |
int i,j,k,target_int_count=2; C5 a5 I, a, A! o: Y' \: O char ch[2];7 x& z( h( G5 C" N" }, H
" M# b. h8 S" O! y# ]+ {7 \
) y5 G' o4 d) t7 F V5 f
4 A3 m8 M u0 E$ O, g( e9 J upp_interrupt_count = 0; 0 _8 S2 X( E: v; A upp_error_count = 0; l0 {. j# f9 W& f8 h& g Z 9 x, V$ q8 ^! [; u0 S* S( ` UARTPuts("\tResetting uPP buffers...\r\n",-2); , `) F; ]; x) { // Initialize data buffers $ h. S$ b$ U5 J+ M0 H for (i = 0; i < upp_frame_size; i++)5 }/ n& I' ? G( j y. f
{ f& m! ^9 i7 S- z, R8 i9 G- F upp_buffer_b =i; 8 e) h/ E% d5 }$ v upp_buffer_a = 0xDEAD; - h( N3 T: b6 m2 M! U5 F }. a1 K8 W) Y3 F) @
$ q7 F& P( L* S% e6 q //for(i=0;i<1024;i++) ' r+ ]4 N; ~( u // temp=0; - t& r+ ~; k" V2 I 7 u( K! t8 c3 M7 ` //UPPReset();5 U6 K4 b( o/ p( C
/*启动UPP DMA传输*/4 H4 N% h E0 H/ L- e) v
UARTPuts("upp_prog_dma_i\n",-2);$ W. }+ w) p3 w+ f4 T) T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" k! O2 m& B0 m6 O, R6 h; `6 c: M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); " B- K: \8 s. S# ]% ~* ] upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); ) D+ f0 W1 ?9 ^ E- @1 e. } 6 ]9 [7 j; ^7 p) z* t$ q1 l UARTPuts("upp_prog_dma_i\n",-2);1 z+ M3 t. F2 m9 V$ {+ ?. @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; , w' u+ p5 M* u/ f) P3 @ upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 v- u/ L+ `) L4 Y/ @: p- _
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); 2 H& z# B# q- B! A8 D$ q" e) {) _9 f! s6 K
/*等待UPP传输完毕*/( X; ]. S. }0 ]" t3 ?7 O+ p3 t
//i=0;' |' Q0 j6 Z- y) K
//j=0;+ F( Y- V6 q* t8 P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 O, r" y& x! c) |% m6 D6 |
{ 4 k- k" I$ T9 l3 ~: C8 `7 R /* 测试UPP传输的同时操作普通DDR数据 * `9 y6 W* s: M% `: f; J temp=i;( P5 o$ f7 }( M% r% U4 {* g. \# o! S
i++;4 k8 I+ o$ t* Q) Q* ~
if(i==1024) [6 D! O% K# a) @: J: @ W { 4 n) q! {* l' ~% X i=0;$ A1 @6 f$ o4 Y2 n7 \
j++;1 d1 s e8 F% q, `1 s. k+ d/ L
} + a- g8 t6 O( J7 j */ : J9 @8 f8 ?: Q0 {: x# X- d' p% I5 F4 p
asm(" nop"); , `) G3 U, Z% K3 @ ) _2 n# U# F% T# y //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); p) \" A2 I5 h7 l( ^ } , W. W, q; B* C S8 V" v+ q2 l2 S. [3 G: p
/*检查UPP传输的数据是否正确 (loopback modes only)*/ 4 y1 ^7 I$ f. B$ t& ^ //UARTprintf( "i=%d\n",i);! r; d/ u4 ?7 R0 G7 A
//UARTprintf( "j=%d\n",j);1 F- k# o" A% V& e! \. A8 Y
UARTPuts("Data mismatch in buffers.\n",-2); ( ?3 x& |& h4 x9 R5 L if (upp_interrupt_count == 2 && upp_error_count == 0) 6 c- P3 H: m, y A! k+ s { ! T5 l' A) z/ n! @/ r3 n! x for (i = 0; i<upp_frame_size; i++)/ U: l8 @8 S9 y% p9 Z
{' R' N( V9 h) S# e8 d# J1 h1 I2 T
if (upp_buffer_a != upp_buffer_b) 2 D2 P. ]6 @& F { + @! @1 c) L: z& b, O7 o( o. G) c upp_error_count++; % y/ H2 |' d0 {+ k2 o1 o- X } " @. R% z) c' f% }2 e5 N; _, ~ } 7 C8 U+ j1 Q" B( G9 ? } & E+ I$ z8 S# G1 L% h P3 }+ h- W - Z' j6 H* J* ], J& a /* 报告通信结果*/ ' [1 E3 H# S6 g1 t; m+ r* w if(upp_error_count != 0) ; ]( X& Q2 u% e: N UARTprintf( "upp_error_count=%d\n",upp_error_count); 9 J e9 X8 h8 A' a& I, b; y Q: _ else' p" H# z# d. R+ v: N
UARTPuts("uPP transfers complete!\n",-2);3 n/ |5 {( O& x6 i
% w( y- j9 A& L: B { UARTPuts("Do you want to print all the data?(y/n) ",-2); 0 I, m$ Y M$ r9 K3 B UARTGets(ch,2); $ Z: ?0 R) [* }1 b6 [ UARTPuts("\n", -2);* v7 R; W9 B# ]. l
9 n$ T" X& T6 E. ` if(ch[0] == 'y')3 m; u5 U7 U5 M8 b
{8 @* s& ]5 e' S
/*打印全部读到的数据*/ - i& A' h' ]" l4 e( V" N& B for(i=0; i<upp_frame_size; ) ; X' u- F0 x0 b { : P- [5 h' P, p4 T! }" m3 u for(j=0; j<5; j++): w9 C2 T" p. z$ b t! D
{ N0 ?2 A* V( |. ~7 y3 Q3 M UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);* V; f- g! n8 Y1 j# ^- b
i++; ' j6 D- A3 l: p4 |6 _ //if(i >= 4096) % Q1 q/ H/ Q) g8 ^ // break; , M$ A- q3 O. ] $ U3 Y: @. e9 w" H6 \" V7 C5 d: m }5 R5 ~0 h# q6 L/ s- [- e
UARTPuts("\n",-2); 6 A5 M4 Q, ^% U, t$ N# y8 Q }9 w2 a: [, R* K: [$ c' b
}/ K5 _5 _, Z: M# f. l
5 G4 g0 C+ K& e+ t m+ V. b}9 O1 S5 X) `. i; Q6 h & H7 s( Q3 z8 w3 h
' u- a- f- A" V% c- h作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! `& G5 ~! K: ^ 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 2 T1 t N' k9 R3 H