标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: p8 x2 H! `% d, D9 Z Void UPP_TASK(Void) a% [0 I9 {5 k1 X{ # @3 U3 h; j9 g , L5 [4 A* `1 w' F/ R) J# i: W int i,j,k,target_int_count=2;1 ]" }9 @, Q& x8 |7 S N4 d' i
char ch[2];; Q) d5 X* y* @: \" M
( h: J8 C$ [2 J1 w6 \* S
$ C2 m2 h$ S p0 P# g# G4 V2 G# ^& E3 H+ N6 r) k4 N
upp_interrupt_count = 0;' o) M) Z* S& B# q5 c+ s0 `1 i2 V3 v
upp_error_count = 0;0 r/ A* B1 X- X% q- j. u
+ Q f4 B/ R. N/ H+ Q5 O UARTPuts("\tResetting uPP buffers...\r\n",-2); 5 S, F" R% y( B& y0 } // Initialize data buffers; ?4 S1 T' A; O2 u
for (i = 0; i < upp_frame_size; i++)" |2 y B, ]& i: c
{/ b9 Q6 C4 b" t* D1 l) s
upp_buffer_b =i;: s1 o* T l f2 u- v
upp_buffer_a = 0xDEAD; $ R! E# C0 {' B, e! n }! f I1 |+ `1 L C. _
6 s1 d6 |( B9 e# q //for(i=0;i<1024;i++) 0 J6 e% U8 N, M! ]& V' \ // temp=0;. c$ I3 L& K) N, ]" b
& q$ _* m$ q: l' v2 N6 z //UPPReset();! P% f9 @" F4 W) j: [
/*启动UPP DMA传输*/8 p3 Y) |+ y4 c# m6 j/ z
UARTPuts("upp_prog_dma_i\n",-2); R! n6 l. f: N upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; " D1 f" e, s9 W8 O0 _& a1 }+ ~. o* V" c upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( M, |7 L& E% N+ C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: a( I# y/ O- J+ ]6 Q. D* g
% A2 L3 h2 h( P, @8 H( X UARTPuts("upp_prog_dma_i\n",-2); & Z' j \) e6 E I8 ?$ j6 j upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; 8 T6 Q7 B2 S! w6 }$ `: Z upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% p: K. W" y! F& @" p7 z8 J, j
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); 9 F+ H3 d# ?9 ]' r' {7 ~ # |( ~/ D" E! N2 L /*等待UPP传输完毕*/ " L' I) u! `" v( N" v //i=0; ' w4 X7 y: V& I9 l3 ^4 R2 f //j=0; & F1 r" a3 _5 b8 f/ ~ while (upp_interrupt_count < target_int_count && upp_error_count == 0)) O* d/ s; [% B5 p$ D9 H
{2 |9 n1 M! S, H* O
/* 测试UPP传输的同时操作普通DDR数据 ; T! h& o. ?! Y& L) w temp=i;$ X: f- h) o. H, x
i++;( V3 n% g8 Q* f
if(i==1024) & P5 J. } }( @# P { $ I& Z, Y: k% Z; G* r i=0; ! p6 U3 {1 a5 Q: a j++; 5 o+ E k! a9 f# x6 j7 K } ) n+ d9 h. y& }0 f% Z" S5 j* k */ . Q% u. ~2 {8 c5 \$ J ! A4 O% y! E. ~+ S9 B! t9 ? asm(" nop"); * x+ u) L" `$ O' F& t j# y( s0 ^: d; D: {$ ?+ z- |8 E
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) R6 [% N. `$ V1 X& U* g8 b
}. |$ k) L/ W. X$ i, |
! E8 R8 v- o/ {- U5 M6 S /*检查UPP传输的数据是否正确 (loopback modes only)*/ , i; ]4 ]% q/ }0 ^. c) n) h //UARTprintf( "i=%d\n",i); 5 Z- u( g' u6 B2 {7 I- [ //UARTprintf( "j=%d\n",j);! X9 _$ u' _3 u7 E
UARTPuts("Data mismatch in buffers.\n",-2); % \$ o* i, z3 E if (upp_interrupt_count == 2 && upp_error_count == 0) % N- ~! H1 R0 V) ^ { & u7 {- @+ Q' {7 V for (i = 0; i<upp_frame_size; i++); o3 g1 r" O: B3 s( K! D* h( ~ K4 ]
{( ~ w0 a: x7 v* `6 D! l. V
if (upp_buffer_a != upp_buffer_b) $ v1 A1 r0 S& @- s { ) w+ }4 y' ?! r upp_error_count++;9 D% c2 W- y. b. n# r- @
}, D' j% ^: J) n
}! o2 {( j( _% v d2 @! e
} 7 @% ]0 S5 C+ O; Z, N w" B* Y5 }
/* 报告通信结果*/ & f' O3 [4 a3 [' w if(upp_error_count != 0) $ ^0 W: p; K. G- c UARTprintf( "upp_error_count=%d\n",upp_error_count); 1 |8 a. @, d! Z8 E5 T# N2 E# A6 d else 5 j9 h! a% m' T2 U2 o2 I! g2 X UARTPuts("uPP transfers complete!\n",-2); ' O0 J/ b. e* X& f Z/ _8 C% C/ d; i9 b& m1 u
UARTPuts("Do you want to print all the data?(y/n) ",-2);/ _7 A% a. M- f% N! I
UARTGets(ch,2);9 E' w1 A+ E. Y4 h
UARTPuts("\n", -2);* k3 f6 u. U" J W0 l3 }
" M6 A+ r. W9 T+ b* Z2 w7 C9 f' l f: n
if(ch[0] == 'y') : S5 }7 C. s' i' K6 [3 ? { 0 D& _ X! n% j: i# E$ I4 K /*打印全部读到的数据*/% O( Y2 {+ Y4 N5 S% p
for(i=0; i<upp_frame_size; ) * K) D* s$ b& D: v8 y n {" U- G0 K) ~, V# q) b% j- A3 v9 t
for(j=0; j<5; j++) - `7 H! l3 y9 c) A$ T {5 M: i, [) n& P
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); ' g1 n9 |+ k. e K i++;) i' @% h3 n. V* f, X
//if(i >= 4096) * K- [0 B1 w+ z, V( W // break; " K& R: B/ o! Z5 H 5 r( t, W: @: E3 j& X } & s- R. ?8 R" h/ g" c0 | UARTPuts("\n",-2);& G! g' m. Z1 g; }3 L( k8 v3 t2 B
}* n9 z0 r( g& h
}$ o% B/ K: `+ l
, v$ E D$ r# d/ A& [
}* n/ e% q2 M$ }" g$ ? 3 J- Z: [" x' a
2 N7 u# B8 X @# I作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 0 @" `+ T6 z$ k' G# z作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( t% x& {4 U4 I2 \4 b