标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) l5 P& k" E3 A% n+ W' O Void UPP_TASK(Void) 4 ?. }: F: p% Z# n0 b{' K1 M. ?( r( c2 `: r
9 X0 h8 {; P. r+ M
int i,j,k,target_int_count=2; ! n2 {- |* v' J char ch[2];" f; {: }7 b' ~* r4 t" K+ A1 K
, A% T2 |+ Q! p, a+ C4 Q/ S* V- q2 \8 m3 M
# H$ @) Y% v- i. z& K9 p$ Z/ w7 C upp_interrupt_count = 0; 6 _- ^- ]7 b$ f upp_error_count = 0; , [* t9 T1 E% T* t5 G V6 f k7 z6 N3 b: n% g- C
UARTPuts("\tResetting uPP buffers...\r\n",-2); 0 [/ C. y/ K& p6 b G- O // Initialize data buffers0 M, ^* }8 q! Z0 j
for (i = 0; i < upp_frame_size; i++) % a& Z& M. T& z5 N {; Y/ K4 E& Y% a j( A8 j8 I, w
upp_buffer_b =i; 3 M7 y1 ^0 @8 b4 H9 J) O upp_buffer_a = 0xDEAD; . z9 }% M$ F- [! X$ F } - C5 `/ [1 K# u + p# F: s. U8 m5 O //for(i=0;i<1024;i++) - @: m4 F& A& F% S3 P6 [9 g8 ~- J // temp=0;1 s |& A- {2 q8 F) f# }" O& W
/ M- ?! h& x" R, w/ M) e. Y //UPPReset(); , ^0 c% e9 M- N# ?" [+ O: u /*启动UPP DMA传输*/ 0 c$ U4 k9 _5 Y/ L- I+ D UARTPuts("upp_prog_dma_i\n",-2);1 F% @' o4 B3 ~0 Z, B# p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 h/ [" ?' N: o8 R: [
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 9 u6 B) L, k8 n5 {0 G- _; C upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); * F6 {) h4 [* P 0 V k* ]& v- d! [" n& _ UARTPuts("upp_prog_dma_i\n",-2); 1 b7 o* b6 U# p- n$ m2 B, M upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) t @) T" ^+ V( P* a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 o: t) e9 ]" H) v! `1 ^; w5 @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); 8 t' ?# P- ] r& U0 m+ S - a# ~/ _8 A1 ]: a" w4 A /*等待UPP传输完毕*// x# p) Z+ ^! S M$ D
//i=0; / H/ p8 N+ }, J1 R- ~4 I //j=0; 0 E4 f' v: J6 j+ z6 |/ M8 ` while (upp_interrupt_count < target_int_count && upp_error_count == 0)' b3 A& l2 C% p
{ # y4 k9 G& j: h6 i4 ~2 V /* 测试UPP传输的同时操作普通DDR数据 5 r* u1 k# m1 K/ O3 L" c* ?8 ~2 Q temp=i;( b& s* \1 n( S7 `6 W* } C
i++;/ y) ^0 D# I9 p* @- u
if(i==1024)/ y2 R$ W! }" u6 v' q2 z- L, T
{ . F) W5 {& m1 R i=0;( w: P2 c/ A* D" O: i/ W( B \$ b
j++;$ C( D; D" l) R3 |
} ' x4 C. g& a, h5 O7 e */ 3 y% |: C& {' Z# N' m. ?4 r6 `, f, r C; f8 [
asm(" nop");* A! f) p( _) o9 P8 L M7 |; q
! N) R4 `8 H( e7 X/ o
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 1 V" J! i m! E7 P& ^" E }' M5 U& H5 y: N' Q& L0 S
( p+ @2 Q& T& I3 K. x /*检查UPP传输的数据是否正确 (loopback modes only)*/ / t* |8 @6 n' y: ^( Z# ~2 N$ j3 @ //UARTprintf( "i=%d\n",i);2 }: z; ]7 [$ f7 q1 e( G4 U) k
//UARTprintf( "j=%d\n",j);( {7 ~, V2 t3 R; T3 t: P
UARTPuts("Data mismatch in buffers.\n",-2); ; A8 d' e7 L7 e2 v# @ if (upp_interrupt_count == 2 && upp_error_count == 0) " T% i# n u8 }) u# y0 }9 m! m( z {: D1 U5 _1 @1 }8 A+ a
for (i = 0; i<upp_frame_size; i++) 4 [$ d/ Q5 a: G9 @% Y6 m. @ { ( ^; F- o9 ^6 d) q if (upp_buffer_a != upp_buffer_b)% C% x/ B6 q, C1 a0 o
{ ! g7 w$ @" [/ o1 G6 {- v5 t upp_error_count++; 7 b$ H# x5 U+ K+ @. {+ M } * g' S9 b( J5 g y }. K0 @8 `. g- q3 k
} , s- n$ E% G' x' E5 v5 ` 5 Z. c! G2 f# i3 W$ h1 R9 Q /* 报告通信结果*/5 i/ {5 l g+ d' P- A3 k, u! X
if(upp_error_count != 0)5 K' d' `7 V$ |; u, g3 Y" |
UARTprintf( "upp_error_count=%d\n",upp_error_count);( C8 Z- _4 j/ c
else" v: f# B* K% J6 ?: X0 I
UARTPuts("uPP transfers complete!\n",-2);% g, y/ G9 i" [2 T
' e/ {7 \. M; L. Q UARTPuts("Do you want to print all the data?(y/n) ",-2); 2 q6 l* N8 f% e- G. e UARTGets(ch,2);+ p9 V1 E) l k5 \. Q
UARTPuts("\n", -2);+ x0 R% }! {# G
( I) s, |: }; j1 g1 D if(ch[0] == 'y') * v' [" S B. _, [! c {, d! @. ?2 Y$ e# o2 g
/*打印全部读到的数据*/$ G2 Y7 U1 R# D0 ]- h/ ~$ s
for(i=0; i<upp_frame_size; )7 ~' g: C2 s7 d6 c" U( _
{& s7 i% q) R$ q% @$ r
for(j=0; j<5; j++)8 z' L& I: V, Q- a: _& A K
{/ d% G1 }( q% W7 L4 y/ K
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);3 |# W! Z, p6 O2 G& h8 o
i++; " W8 C- ^/ Y S( v: A8 X0 @* ~ //if(i >= 4096)3 J# l) O3 d9 q* ^' J
// break;( [# ~/ `3 @3 k3 g7 B) S3 F. ^, {
( z' }) l6 N& g- m, m2 k. e
} 3 p$ q1 C. S$ D, T$ k9 X* Z5 ` UARTPuts("\n",-2);5 y- o. i C; K9 s2 V0 n8 O
}- Z- P$ F. q8 E0 w( i/ j- o
}3 L3 S2 p* k/ U( |9 L0 x- H7 c4 _+ |
; i9 l: e" p3 B' R2 j} 5 _5 ^/ N' o/ j2 p- C( G) `7 n* h
* A5 L7 C! ~, q, l5 n作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" q+ E( b J# R 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 S# F* D) L. i$ q; @) M( U; i