标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& R0 U! y# L9 V# N Void UPP_TASK(Void) 9 G! {$ z6 Q6 w{ & c0 w; I+ Q) F+ T0 z! E% L5 P- p$ W
int i,j,k,target_int_count=2; : |# q6 h6 s/ c, b8 |* v; Q char ch[2]; & s2 R) P! ] x% f( d6 E # l& H5 ?$ \1 Z5 Z8 L. |5 j" t , g/ q+ R3 q( t' f) Y , k5 R3 [) b: b+ b5 W" y upp_interrupt_count = 0;: P' M+ L) k1 `. y! y( o9 [; V2 N
upp_error_count = 0; # H, }7 x: e$ I; I; S! m$ _; d& B 3 Z1 u1 L; a7 a! [& ] UARTPuts("\tResetting uPP buffers...\r\n",-2);7 O* K6 \6 u0 K7 B
// Initialize data buffers8 I* t- v" v3 I, E2 x
for (i = 0; i < upp_frame_size; i++)) s& Q+ E& L! |& u
{. v2 Y; j! T Q. [' |! j9 D4 Q( k
upp_buffer_b =i;* Z- m! r( H( n2 p6 G3 n/ g, W! |5 ?
upp_buffer_a = 0xDEAD;+ W0 \' ? ]- P" U
} ' m' g# F& ~" m+ |9 A) U" H( `. K+ B6 P
//for(i=0;i<1024;i++) + \& d w; G; t6 d // temp=0; 4 ^+ Z5 |) s2 J + g/ u P8 A0 C$ v: y0 N //UPPReset(); . }& f8 B! K9 } L" G# m /*启动UPP DMA传输*/9 l# D) p& m1 a$ r/ b0 d. {: ^
UARTPuts("upp_prog_dma_i\n",-2);8 q- S9 _/ e, O, h# T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; 9 i; x* d6 |" Z upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 5 O3 B3 u q, O+ M2 L upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 Y$ ~! p: x7 h
$ K6 c# n6 ?$ G. U
UARTPuts("upp_prog_dma_i\n",-2); / V3 D- h4 }* z0 o/ t upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; # @5 j! J" J n, V, u- v upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 ]* ^1 |* H8 X: ^ [! X" k+ i
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 h' W: {2 _& c3 G, o
# b. Z) \# A& T. t2 i2 F9 s /*等待UPP传输完毕*/0 w7 u7 X2 C4 s' ]6 k5 j& W
//i=0;" S* ?6 N7 \4 U
//j=0; ' c+ j/ h- u- d0 I while (upp_interrupt_count < target_int_count && upp_error_count == 0) : A9 K, F3 |2 H { ( u8 {: B8 Z4 M9 Y! }# O /* 测试UPP传输的同时操作普通DDR数据 ) E! p2 x0 X; O, X% w9 ^ temp=i;0 o' M( E" g9 [( b0 t+ y6 A
i++; 9 A4 X& L' r& j0 A; D if(i==1024) 4 [) f" E6 O' [) |& G" T o { - @/ c) {& y3 v i=0;4 U8 S. ~6 a, u3 p% C, s
j++; I# j m7 i$ E0 T- F }$ }! P. h0 N5 Q n, C7 i
*/: R9 M4 }( [5 ^9 A
% h! I3 y- P% V ^, q. c. z: | asm(" nop"); ) @6 _0 ~ p9 n( z( u) n0 A ; D; \9 k" Q( h$ S X //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 8 x# B+ U X' v: [# @5 L7 z9 r: D }) l/ I* x7 N8 Y# j( w
+ G8 }5 n6 d8 u8 Q+ x /*检查UPP传输的数据是否正确 (loopback modes only)*/ 0 B" U. t( u9 A$ @: D- V$ B' p //UARTprintf( "i=%d\n",i); : |/ j1 a# b3 n( f# g: _ //UARTprintf( "j=%d\n",j);0 X v" X1 @& q7 N0 G' `: h
UARTPuts("Data mismatch in buffers.\n",-2); ?; k1 `& \8 U3 }& v if (upp_interrupt_count == 2 && upp_error_count == 0)8 j; m+ y! m' d. d# P1 s
{ s, m( t( T2 t% X3 E. z7 a6 o
for (i = 0; i<upp_frame_size; i++)- `% e7 G9 ~- {4 @
{' U5 i: O1 u- e2 y
if (upp_buffer_a != upp_buffer_b)6 g4 O {7 G G: h8 n
{# H5 F5 W3 m3 H" d$ j+ r
upp_error_count++; 8 X {9 y1 T9 Y9 O1 L# @) q% D a }$ R" A: a6 k* ~' a
} 6 Q5 s O4 j0 z- w } q/ Z8 Y5 v4 M
8 U, o9 t$ i+ W( z
/* 报告通信结果*/ , J8 ~- N1 |: C1 D if(upp_error_count != 0)9 a: }& F0 q& n) F4 e8 r+ T$ Z
UARTprintf( "upp_error_count=%d\n",upp_error_count);# w* V+ Q: p% ?3 M
else- w" T7 e5 ]! D
UARTPuts("uPP transfers complete!\n",-2); / T+ [. e% p0 S+ h6 D; f' n. R) X% @$ V* d. y
UARTPuts("Do you want to print all the data?(y/n) ",-2);, f0 {% O4 s% _# P, i: y& l
UARTGets(ch,2); 1 |; E1 i5 v* m+ X, Z Q2 Y UARTPuts("\n", -2); - I! X$ T6 d5 [4 I8 e; ~4 Q# f6 A4 n$ N3 ~- J1 P8 o1 G1 {
if(ch[0] == 'y')8 o) U1 ]! ~! C- w
{ 6 [" A( ]. x" N: Q/ _! `2 e /*打印全部读到的数据*/ $ a+ M1 c d! b; L8 V5 ?8 N8 i for(i=0; i<upp_frame_size; ) ; F, `4 R- [9 }. p: s2 B& p% M { 2 ]/ X& w' u3 s, p' z for(j=0; j<5; j++) ( c1 p2 y6 C2 w+ C { 4 @) P7 Q3 O, U' Q5 m" x2 j/ } UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); c$ h Q3 _" Y5 W3 a. | i++; 9 o6 G u8 L9 i! \) Q! R //if(i >= 4096). P6 t2 u' \, Q1 F' B
// break;) q" F4 e* q. K
! H% g) ~5 y. O9 Q3 f$ A! Q }$ y) h" z8 ?. L! q) D
UARTPuts("\n",-2); * U- n9 U' }: S8 z! T } & @1 Y0 ~9 s; s, q$ M; F" s% c- \ } / R ~! V4 I# t, I( O' e! J; b8 g, t0 H& x" e1 m
} {! Y/ m5 O% I" t' B8 C " K8 f8 B+ s( ^: m
/ g2 f% a' _# x+ t3 q作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 - L' G: u3 _; I! G作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 # K# D% Z- Q& ]7 y1 }, b. J