标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 M% N, \5 z+ G4 W. K Void UPP_TASK(Void) n2 ^, }# T1 T. X% m r{; H0 r. J- U7 D4 F" H
8 s: ?8 @, h1 F" v int i,j,k,target_int_count=2;8 d* b' R* z8 R9 k; \( J* v
char ch[2]; 2 ^8 F; @; X0 Y - C! G1 @9 K7 d. |, r7 I / u9 |9 c$ P, p0 h1 S; p3 p( y; Q( ? \7 b
upp_interrupt_count = 0;8 @- |. v& E5 D2 Z0 ~
upp_error_count = 0; * Y" g4 @. Y7 H. d, ]" Z/ ^ / \2 ~, y6 j7 Y! |# o! P/ V UARTPuts("\tResetting uPP buffers...\r\n",-2);) \5 B# ^6 P' m& N, o
// Initialize data buffers% g* `9 x9 ?+ \1 B" n
for (i = 0; i < upp_frame_size; i++) & e2 W* ?) R9 s+ B/ e2 E! M0 | {) x! r z* A7 T E- q! g# T1 s1 y
upp_buffer_b =i; : y( W# x! |" Y5 J$ L; h& I upp_buffer_a = 0xDEAD;/ M, A i' ?6 Z3 \9 j8 d
} ; g1 @4 S+ E' l- V, R ] . t7 l/ o# v% `& q3 ^; ^ }; D //for(i=0;i<1024;i++)3 q! K' L5 n! F7 N* p+ k
// temp=0; 2 O" w1 c: ^( Q3 ^8 }4 V& v6 O3 q9 p( q! h) ~6 i) T. {1 O; a
//UPPReset();2 _ |5 L) F! ]# x' ` i: u1 ? D
/*启动UPP DMA传输*/ " ]% _& Q* z3 ~/ V j1 z$ `8 i3 B: z UARTPuts("upp_prog_dma_i\n",-2); ) \, o; F# N7 W4 }# G4 t, G' u upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( K- B: s# a2 D3 U' l K2 C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); ( A0 K, T7 O8 B5 z7 t' ?% ]' d upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); 0 z2 [% S# t) e+ a: \+ t 7 m% }0 |6 L, l0 Z$ J; b UARTPuts("upp_prog_dma_i\n",-2); ! L& s: J# B- |7 Y: l1 q( [ upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; " K. \9 ]2 x0 b/ `5 ]; k, w$ Z: q upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); " X, {) R) ~; B" Z* _7 n upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); 6 q5 |' u+ Z( `0 y( ?4 A0 C1 ]$ B$ {
/*等待UPP传输完毕*// F" G! u3 N' c
//i=0;6 R: B. r9 e5 @- O
//j=0;6 k# u1 Y5 A5 A* j2 ] ]
while (upp_interrupt_count < target_int_count && upp_error_count == 0) + p9 d! r0 u" l9 y { 1 h% a3 z( q) `8 R# q /* 测试UPP传输的同时操作普通DDR数据 ' t9 B# ^7 l/ D- A. u% I, \& }, M temp=i;9 [7 v$ j" T& Z
i++; * l( L! c# }# j/ W% h; | if(i==1024)' U( I2 d7 j( I4 z6 V; u3 R
{ D D9 y+ N5 h# K i=0;: V- b. b" C& d1 S' w8 a. \
j++; 6 t2 E5 H7 ?" b7 C: j# I }( J! F6 D: f% M' K8 Z9 U8 j# g0 q
*/ . r. H0 ?, f/ x {" M a6 E/ ]- c" |2 t0 ]
asm(" nop");' o$ R1 [# a, Y6 N
: S" }. I& a: q3 T& x7 T, s2 q //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); ' ^: S+ e: |' k }& n8 P% O- p* m! H
+ s* |; ~& w9 ]: C' {
/*检查UPP传输的数据是否正确 (loopback modes only)*/* c/ E K! J T' A% f) ]$ q
//UARTprintf( "i=%d\n",i); 3 f' |8 f' U$ o* Y. v //UARTprintf( "j=%d\n",j);& n& ~0 `# W6 m2 B
UARTPuts("Data mismatch in buffers.\n",-2);8 G$ L) n: k% b. q# C; w3 y
if (upp_interrupt_count == 2 && upp_error_count == 0) , p, F/ F. }2 i Y$ u {; h# ~3 a( i1 n; [0 j
for (i = 0; i<upp_frame_size; i++)3 \, r0 O* }& q$ W! E: t# `
{# t4 `! P* e$ o
if (upp_buffer_a != upp_buffer_b) 3 N& d1 y% p* s! S { ; v$ l$ K1 H3 {6 P* _7 g upp_error_count++;8 p9 J, a/ U7 G. F" ~
} ) N0 ^1 o; P6 g' k) A+ p4 q } " A; f# B, E, o+ ?4 ^* F }5 n0 H5 C7 t& t1 o( o G5 U; m
7 H, B3 h% t! b! b* T) N
/* 报告通信结果*/ / [' \9 {7 f0 Q" U if(upp_error_count != 0) 7 `: @2 K6 ^' v8 U3 p UARTprintf( "upp_error_count=%d\n",upp_error_count); 5 X' {& T+ Q$ p6 [, Q/ I0 j4 E else : N/ ^( |8 D% x; K* _ UARTPuts("uPP transfers complete!\n",-2); , x2 B8 o$ p* Q4 \. N' F! |9 D9 b1 `; ?* n/ p" d& j
UARTPuts("Do you want to print all the data?(y/n) ",-2); 3 m) t4 l1 b# b8 [5 \, r UARTGets(ch,2);8 ? ]( e+ L$ i7 i2 O
UARTPuts("\n", -2);8 n/ ^3 r5 n( ~( a) F( j0 P/ E
( _( p1 Q; X5 u1 \; g
if(ch[0] == 'y'); Q4 Y9 J% T ~ H
{ ) D7 a- Z. ]; Z /*打印全部读到的数据*/" M: j z/ d! t' x2 r* M+ R
for(i=0; i<upp_frame_size; ) & v' x9 H+ o7 B P& u { $ V, W) _: j. L- |4 O! X1 `+ I1 L for(j=0; j<5; j++)( A/ p& ~6 v5 f, O" S- d: }9 @ u
{& {: A4 W9 {+ g) a! n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); $ H; _; j7 M9 O% X4 ~0 u" v i++; 9 e( N0 q+ k* w5 Y //if(i >= 4096), s9 u" ^# T0 I+ b* a9 I) m. ?9 Z
// break; 4 ]8 ]& q; B6 J7 C; }! N- T7 l0 y
} * g d, _ L8 U( S, k5 Q- S UARTPuts("\n",-2); 8 M: p8 k6 O3 I* z. X } 5 l/ S. N% E1 m2 ~9 H! N1 B } ) ?1 l: K u! {. `- \5 I9 r4 |; x, F. C# l) G1 V
} ! f1 W7 M; X2 a- T / @+ F. m: o* @& u7 z& r+ a( X) {- i O0 e* C# s1 u, Y1 ] 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. A( M, v/ h3 ]; S1 U9 t9 ~ 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 l! w" Q/ X/ }- u7 P