标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 ?/ T: w: a1 Q Void UPP_TASK(Void)( B# `! _% d. j
{) g8 g! P( l$ j! v. b$ D2 ]4 L
2 ?! k) F3 Z& X8 P7 M; e8 K
int i,j,k,target_int_count=2;* F. j0 |; t/ ?4 T
char ch[2];. S# v7 w6 x- M7 A5 _
& V. B- N4 ~5 t( d4 i- F% c; H# \( c5 |- _/ d
9 x" K2 N$ ^8 s0 Y4 J0 J; |; d upp_interrupt_count = 0;7 w0 x5 W U, X8 r) h: `+ Y% L, f
upp_error_count = 0;7 N; @, m. d8 Y! |
3 h' B" S/ Y. u, ^5 }, D; g UARTPuts("\tResetting uPP buffers...\r\n",-2);1 s) r# G- I. ?5 ~ k" n1 M
// Initialize data buffers 2 ]% u7 I% x+ m" q/ Y' |3 K for (i = 0; i < upp_frame_size; i++) , y. {2 g* Y" `' p0 {% l+ F9 | { / o( P! N8 ~+ U& O. L upp_buffer_b =i;4 `- \ k3 Z, S. U k9 U1 x
upp_buffer_a = 0xDEAD; " o' x( i, ^* I; t2 z5 I }1 l+ J7 M% K9 J2 R
: r* m7 B! _+ x( P //for(i=0;i<1024;i++) 4 R1 ]! A4 P3 k1 S9 T+ I // temp=0; % z9 G0 B5 `; {/ _: {" i! D5 F; ?, H y, P% r. o; h# f' b7 i) {: L( B8 z
//UPPReset(); - U f+ M8 {( g2 q, S0 @1 G /*启动UPP DMA传输*/ % i1 f5 ?5 r% p8 R G5 C% k* A UARTPuts("upp_prog_dma_i\n",-2);: }5 @+ f* X( o" m% P, E6 \
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! O$ O! Y: W. }0 o1 g5 W4 E: B" O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. Y- ?5 [3 ~* S: ^
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" ?& A B* Z0 C0 {
2 M* j# P, n& h4 B" W+ t- B0 ?$ U UARTPuts("upp_prog_dma_i\n",-2); ( R- y% w( @; T3 R, k/ f upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' {+ j) e4 G: t6 i
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" B% B. N) `$ ^- ^" N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 {+ k) {) l: c! c6 ]
7 ], b; D; T4 w" F8 W1 @ W /*等待UPP传输完毕*/# Y5 X! O6 T; P, T, P) }
//i=0; + j& n6 z R- P9 |. a# l //j=0;1 U$ ~9 ]! z, O3 w! [$ s2 @: r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 W; p! _! Q1 n! b
{ 6 F: ~8 X, g- d- Q6 w /* 测试UPP传输的同时操作普通DDR数据 9 o* }. E u2 O+ }* B temp=i;, i+ a5 o! B4 K
i++; 7 C2 W$ I! h4 B: m- h* H if(i==1024); B7 V8 @( T1 R N
{% [+ t# i+ V& G, t- l9 G
i=0;4 \1 b- l* T+ s& E
j++; 3 r8 V5 k1 P' r! \ }0 F) s9 {3 t+ P; A3 N( B; F
*/: X% L; @! `# K7 V
: S6 a& Q% [; C" I+ R2 G L/ l6 { asm(" nop");& A/ J7 r2 _. z6 C. ~
0 y7 Q/ v6 {7 }. b) t2 D1 n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 ^5 o, n$ G( z( d8 n3 p
}. S# S2 i P2 T
4 w9 U/ F+ N+ d i% c( [ /*检查UPP传输的数据是否正确 (loopback modes only)*/! M; S: x1 o( L. Z' I
//UARTprintf( "i=%d\n",i);) a* i+ P6 p4 p
//UARTprintf( "j=%d\n",j); 5 O( _2 A5 f$ p0 G- O' i+ t9 ? UARTPuts("Data mismatch in buffers.\n",-2); 2 c2 o4 Y* S, u4 W: c if (upp_interrupt_count == 2 && upp_error_count == 0) ) n$ N1 A `! O2 | c) e# { {( t! F1 {$ E/ A6 V( U$ I0 t
for (i = 0; i<upp_frame_size; i++) Z" y3 l& y' {8 n8 {, L {2 C* e1 t6 P9 P ?' e( u7 U
if (upp_buffer_a != upp_buffer_b)0 ^, L+ ^; q: w) Y. c
{ $ `4 ?/ O3 x8 D9 k. m6 Q upp_error_count++;4 u9 I0 p' @0 Z0 o
}7 a2 x- G G% K, d) T
}& d8 @: d7 ]$ R5 D
} 5 `2 m1 l) Z i# j5 [5 H# V5 {: y . B2 X' Q8 g- o/ W/ E) P& w5 H /* 报告通信结果*/ % y3 j8 @1 B7 D! d' Y; U if(upp_error_count != 0) * {& B6 r3 C3 @& k, V0 t( Y3 v5 Y UARTprintf( "upp_error_count=%d\n",upp_error_count);2 Y7 ^( g" g$ [; {. j$ K
else4 e7 Z* A+ C/ K4 I
UARTPuts("uPP transfers complete!\n",-2);0 w: O. s% ~' |: o/ M N
1 y1 X8 q3 a# y) D3 r) O8 }
UARTPuts("Do you want to print all the data?(y/n) ",-2); 0 J2 G& m, o2 [' j/ d' H) @8 V UARTGets(ch,2); 9 O/ i6 N; A6 q7 l, W+ Z8 p* a UARTPuts("\n", -2); * v I2 g0 j) v6 s$ y# `' V1 y; u0 E
if(ch[0] == 'y') ' M: \( d* u# w0 i1 H { , z, ]: E9 C: K* ?! c5 N /*打印全部读到的数据*/ 8 A1 f8 S9 I9 R- _9 D- w; Y for(i=0; i<upp_frame_size; ) ' b9 o% Y/ t' C- L {2 H0 D1 E; M1 D
for(j=0; j<5; j++) $ {; [* c* F' {" P6 Q) W3 Y' r; k {5 ^: F) U8 E G6 q6 G9 c
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);5 l H8 M! l0 G8 b; s& e
i++; . M1 w+ Y- h/ q$ t O, K //if(i >= 4096) 9 U+ D* j9 K' S" L' t // break;% b" w3 d5 ~ I' z0 X
0 A" z( L7 ~5 v* I, j( f }) T3 q! _6 k" x! y5 Z5 ~
UARTPuts("\n",-2); 0 E! m) }5 A4 r+ k n: C w/ `7 z }* U; _7 C2 M* x6 p- r& _) V
}) y0 _% H0 Z" J4 _- ~# |
3 O# k. z# D+ t
}& J+ m) S2 G4 c* [, T 3 `0 Z- x% j3 C: A6 t" v6 b
! b. _ d; a; N1 s7 e9 a2 g作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 V/ v4 L, _9 [$ y% k 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 i3 p8 C' u* J2 J