标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? 0 S( Y1 ^5 p! ^! F4 Q7 D% YVoid UPP_TASK(Void) + R" {* `( y+ H5 c# ^0 _; d! W{# d6 v }$ P$ x) n- |
6 z2 t7 o& U( s. v5 @0 W" S# u1 Y- E
int i,j,k,target_int_count=2;# J; r' S: y8 @4 U2 v8 u
char ch[2]; ( ]5 j/ Y4 j/ k* \) R ; f6 `$ [$ Z" A- Y 6 v' a9 ~7 V" {' r( O1 z& `7 P. U8 u# j0 m t
upp_interrupt_count = 0; + }' z/ n# Q6 R( R& i* ?& m. W4 o upp_error_count = 0;% `. k; u/ [. S7 \. Y
* V/ f5 \/ m* U- |9 ?' x0 k: ~- G UARTPuts("\tResetting uPP buffers...\r\n",-2); " q K' |8 @: u9 a7 l& H // Initialize data buffers2 h- G- c6 M7 X; ~9 b v0 G* t
for (i = 0; i < upp_frame_size; i++) 1 `. N0 Z. b$ w6 }; y { Z0 S1 t! R* |6 F) ~& E3 w( \& a
upp_buffer_b =i;/ w0 h9 Y( k: ?4 w& F
upp_buffer_a = 0xDEAD; & j# m9 B/ F% |& h/ ? }4 w# `) x$ @! I% ~/ D: O, t, A
4 F( b$ l2 i0 W8 S; v# B" h0 _ //for(i=0;i<1024;i++) : N; E, S: _) }9 i4 Z3 h( H) Y // temp=0; ( B8 [3 s& z4 D5 ~5 l3 o # o/ K" N$ M5 y# g //UPPReset();5 Z: N7 R9 G5 b0 {+ f
/*启动UPP DMA传输*/ : w$ l0 a# w0 ^ UARTPuts("upp_prog_dma_i\n",-2); + p N4 j/ z, i# ]6 r# s$ V! u upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; 8 @* c0 b2 J" g' ` upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ f1 y. L" x$ l; F# o2 Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); ( B& p8 o- m& y* ~ _4 `0 e& o$ q* \# v: J UARTPuts("upp_prog_dma_i\n",-2); , p/ _1 w( k0 Q3 u5 b" e upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& W! Y S+ c8 Q$ [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, D( o" g2 q; X* G9 E
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! z8 z8 L4 P* q, E# r9 p
( A6 _( a# h b
/*等待UPP传输完毕*/6 c5 G4 W8 @+ _3 }% n0 u2 T# a
//i=0;8 O, V; H& S- r
//j=0;/ G6 S, A4 @% d& `# n3 r
while (upp_interrupt_count < target_int_count && upp_error_count == 0) . ]- `+ p- I% y4 J { 5 c$ \1 j3 C' o% d$ C/ c /* 测试UPP传输的同时操作普通DDR数据. d8 g+ g; h# [
temp=i; ' I/ z1 z6 t @0 w i++;) V2 v) U+ B$ N: {$ J! [
if(i==1024) + N7 E2 [1 U5 x2 J4 d {* x# H9 t9 |, K1 L- _' {( A
i=0; 9 P# ~4 I) ?; ~/ z+ V) u j++;. |0 u: {5 y" K; }
} , o- ~" T/ E# ^9 K */1 y' i/ z) {, |
0 m% \" ]' [7 M) u9 `% [" V: o9 I$ o asm(" nop");$ m. A4 }( Z4 o' c8 \
/ S- L' z3 X+ Z% a6 K, v! G
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 q4 K2 O) `" e. M5 ?$ e3 O
}* v/ V; G; U" p+ ]# }0 C* m# z" w+ O
5 X/ D" Z1 Z) f6 y& e3 Z
/*检查UPP传输的数据是否正确 (loopback modes only)*/ 0 P0 e6 j D1 v //UARTprintf( "i=%d\n",i);- l3 U* z& m& T& g- n Q
//UARTprintf( "j=%d\n",j); ! c! [9 x( r: N5 |, j v UARTPuts("Data mismatch in buffers.\n",-2); 3 s; A% c& N: o1 @5 T# \' U& P1 ~ if (upp_interrupt_count == 2 && upp_error_count == 0) V6 H6 P9 S+ \3 g; @, \3 w# A$ p
{2 |, |' |1 l$ o# I. N7 g
for (i = 0; i<upp_frame_size; i++)3 [; x# I8 B, S+ d: ]
{ * V9 l* p( k) s if (upp_buffer_a != upp_buffer_b) & g; g" p( [: J- t: U. h6 O {3 y' G8 \2 y; d+ D
upp_error_count++;5 [5 C+ [& O( @7 D
}5 m" N- Z% F8 J8 B0 u
} 8 i: L) F. ~" m$ H" u, b } 4 {! }1 P: ~0 w7 n3 q# Z3 i ~6 N3 Z8 ?$ ~
/* 报告通信结果*/ * N: @% t. P/ q* d4 c if(upp_error_count != 0): z6 r8 p8 K* c5 |- x0 M
UARTprintf( "upp_error_count=%d\n",upp_error_count);! x. N; l7 }& d' s# {! X
else 9 h. |1 _& B& H9 G9 V UARTPuts("uPP transfers complete!\n",-2); * z4 P6 [- n$ ]0 D% X8 G5 Y% X- A9 K/ q
UARTPuts("Do you want to print all the data?(y/n) ",-2);7 K4 I4 e6 ^2 C8 I3 C% i$ m+ B
UARTGets(ch,2); + n3 ~# _* j) E0 i1 H UARTPuts("\n", -2);! H' F* e+ r9 f K1 F, I9 P
1 J, [$ {- D, S; w8 B* T8 v; ^3 W
if(ch[0] == 'y')0 \( D* e2 {: [/ p! q+ q+ g
{4 G# z+ y8 \; h3 k
/*打印全部读到的数据*/+ L- K1 m: t8 n3 T! }
for(i=0; i<upp_frame_size; ) $ R" `: R5 z' n" z- x { , {4 _' t9 I; W4 h2 h6 p( q7 h for(j=0; j<5; j++) 8 u5 r4 c2 C( G* a1 t) [ { ) w$ z1 z& ?; G9 w! Y& e, j+ } UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); : V0 |5 u; ^: o8 I! d. V i++;9 h: w- W6 s( l1 M9 Z, S; z9 q& F2 p
//if(i >= 4096); ~# y9 \! P3 ?8 h) F
// break;; B9 J) Y% ]" r% R% u, O
8 e- u8 m4 O) S
}& A9 V! ~+ X' Z- i$ \( }
UARTPuts("\n",-2); ' S; x- l; V8 {( t" v8 u }, A1 h; |' _1 e) S3 R9 {
} & u- v. B: W) ]' N; U" V; u' ~4 b. v6 Y& U' J+ s8 l& L
}2 H* ]# _: J! i+ {& ]
+ w. \! _, y, y, x " L S5 v: {+ C. v3 m作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 , L4 q) W! R) P; n9 e i作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 ' M4 o w. q: U0 \$ \9 r" w