标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- L6 O, M& I* j9 U% c Void UPP_TASK(Void); q4 K: a7 E9 {1 S4 V
{3 ~5 y$ G1 r% l# S f1 u
6 `) w& @( w% s
int i,j,k,target_int_count=2; 5 f+ l0 J8 p9 y# N- ] char ch[2];3 N% B& i( g$ c
! ~: H; f0 t/ S6 U
2 O7 W; g. c% I ~ v
h- t3 ~0 _4 v5 g1 X9 ? upp_interrupt_count = 0; % M1 i% P6 C) e7 m$ F- Z upp_error_count = 0;; o+ M, N5 i3 j, ^ S3 B
. e M. k5 W% D
UARTPuts("\tResetting uPP buffers...\r\n",-2);- f) p3 e P/ A9 x) j
// Initialize data buffers : o6 k6 C$ S2 P% K& A* o8 M5 M for (i = 0; i < upp_frame_size; i++)0 }* }/ g6 F% t" i# z
{ ( ?8 R; @- _& t upp_buffer_b =i; ( o5 u0 q# }: f( r* {/ R upp_buffer_a = 0xDEAD;. G3 t3 _1 x/ i+ A- h3 c0 g E) l
}0 ^7 _# I$ r3 o, W3 Z8 y% c% h" F
/ I: k6 @; V8 S; F
//for(i=0;i<1024;i++) , k' y- d* a2 |$ {0 b- n // temp=0; 1 W4 d# O Q% r+ z T + _( ~0 E+ q; ] //UPPReset();* @, |- U, R. F- y; P% b
/*启动UPP DMA传输*/ 5 ~# _- C6 }' o: ~ UARTPuts("upp_prog_dma_i\n",-2);3 q7 m4 C1 ?3 J8 D; N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: Z. A! @6 h0 n" h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% i9 D" x# K6 f
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);2 z% ?9 H$ _! e: k* d
6 o, X. E7 }4 y7 {- { UARTPuts("upp_prog_dma_i\n",-2); ; c7 s3 x, ^# O; H6 D upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; 5 ?7 P) t& I# ]# p' Z upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 3 T6 W* x/ k0 @- T" P! \ upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); * M( F/ D; m. m* s) t: D' U, F # ]: z3 j7 b4 v+ H" p4 a5 Q /*等待UPP传输完毕*/ 2 p d z% |5 O W9 B, O$ ^; l //i=0; 9 G2 K* N+ _, @. b0 Z9 S/ ] //j=0; + H. a- O# t/ ?7 E6 N( v9 G while (upp_interrupt_count < target_int_count && upp_error_count == 0) 7 D) Z, @( `& q% i: h, x+ B { # Q2 p3 o( E" o /* 测试UPP传输的同时操作普通DDR数据 8 y$ F7 V7 I. } temp=i;0 Z/ h) x2 ^! u% f
i++;/ N/ V) x w1 C6 l( B' Z" \) t/ y
if(i==1024)$ n! ? m! V: h: s5 D# Y6 K
{! V- p7 a' `% j' Y9 `: ]0 E3 ^
i=0; 3 [9 z6 L& `: S5 T* { j++;3 P" A# `9 G* P( A
} $ @9 {8 x: @8 ]8 }" W */+ }) A4 N- E( V- w, l
. N! Z# x8 N. f2 |
asm(" nop"); - F7 l$ F8 a( A9 ^+ o9 ~. @7 D+ {+ ]7 [8 d" ~' R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) [4 Q4 u3 J3 n- D+ E* e
}4 ?6 H1 |$ L' P' I1 P. |% @6 ?* v
# ^6 T# z" X; ]& u% e- Y* W+ N- Y /*检查UPP传输的数据是否正确 (loopback modes only)*/ ! |+ c$ r4 C% V ?/ E //UARTprintf( "i=%d\n",i);# R9 p" [7 R' h1 R9 I
//UARTprintf( "j=%d\n",j); W4 p+ j6 I6 ]2 z UARTPuts("Data mismatch in buffers.\n",-2);1 k. g; h0 |( G% M6 I1 |! J
if (upp_interrupt_count == 2 && upp_error_count == 0)' j5 H+ e+ S' b" a8 X2 h% o
{ - S) s% |; Q2 \# C for (i = 0; i<upp_frame_size; i++)' v ?7 p( H y: a4 h) P
{ . `: p P$ _% l" T4 h' t7 e" l/ f' F if (upp_buffer_a != upp_buffer_b)# R3 x( i2 d: K0 ?# @) S
{1 b( J2 {# a* Z( c& a
upp_error_count++;) m5 G5 b1 ]9 Z* b
}; K& h O0 [! w. ~
} $ F& O8 O# i) R7 l/ W }& t1 r# O8 F* U. h2 ?9 l+ G: y
- A Z; {- P* k* L6 r /* 报告通信结果*/ / v. L& f5 _# C. p if(upp_error_count != 0) - r% V }: @5 l6 M( V UARTprintf( "upp_error_count=%d\n",upp_error_count); 9 Z/ k7 f- U0 N' M else7 ?+ L b! J5 ?; W5 _6 d7 F
UARTPuts("uPP transfers complete!\n",-2); % J D) i9 ]6 L8 |0 h4 W& X 6 U: f; C. B2 }8 X, [ UARTPuts("Do you want to print all the data?(y/n) ",-2);9 Z) ]/ K9 e( M4 P9 j+ ?
UARTGets(ch,2); \. B& p. \' _8 C! T UARTPuts("\n", -2);1 J2 c% \! p+ l7 y, F" Q( n: P
& ^# d; H3 Q! V2 O) Y& p4 } if(ch[0] == 'y'): i o& S; e" M* x! F
{. W/ y8 l$ F) `2 F4 |- i" y
/*打印全部读到的数据*/, i2 f! e1 U0 }! G8 i5 e
for(i=0; i<upp_frame_size; ) 8 {- h: R1 H) I, ~ { ! t4 W% u5 c4 c- X' c for(j=0; j<5; j++) ) W4 z& W9 \! g$ ^) W( ~; ^8 u {* x4 A, I, P! w% C3 ^: C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); * z6 d( _; ?' R+ A" [; R i++;5 R7 g8 Y( [4 V; H; @5 c$ u3 Y
//if(i >= 4096) 1 P: o* Q- D# x$ b // break;. p" ~: A7 {" c2 c7 I
% t5 g0 f7 \# u# c }7 ]/ P6 f, R& Z6 J. s1 @! }
UARTPuts("\n",-2); 5 i$ O1 w" M# n5 B }. w5 i5 N( N" I
} - G/ W. V- f8 {6 v) E / N, c5 e. q" X/ Y9 G% N. G8 C/ v}9 E2 S' P+ `9 u# n$ P
% J! m ~! i4 D5 t3 E$ g2 T1 A* Y4 B+ u( c4 X2 N: s1 g5 t 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 $ M) P' ]9 C) c& S* ?6 Y0 U作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 0 t5 J! c' g: ?9 O: u) r4 y; a! O