标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? 0 E: f% G! h3 y9 p, X' B9 S0 \Void UPP_TASK(Void)8 N2 {3 `# L. P6 F8 {1 g
{& u; l9 D- D! ?2 X+ Z# v8 x8 S
- G/ g3 w, p c6 u6 z) M
int i,j,k,target_int_count=2; : n, F$ d, d0 h# D char ch[2]; 0 @; H; e( j4 O6 j) J/ v! i * P5 P8 ^( Q' U4 ]* Y . t& q, Q3 S3 I6 O* v& x o4 j# w" N3 ]# v+ {' u
upp_interrupt_count = 0; ) n; d* o" @, v( J9 d( J* Z5 ? upp_error_count = 0;: d3 m4 S( k3 D+ u
$ f* M; e9 ]0 U4 K- ?; j4 B, r
UARTPuts("\tResetting uPP buffers...\r\n",-2);) K+ h. o2 B2 Y: J1 y n
// Initialize data buffers 5 M( `' w" s& q$ w4 I/ Q for (i = 0; i < upp_frame_size; i++)2 T: g9 w O7 R( z
{. {0 k/ \; _$ p( j+ k
upp_buffer_b =i; ; j+ v% h) L f$ v' c. @ upp_buffer_a = 0xDEAD;) N+ ^% ?; y- ^4 O* D
}; Z3 }. [* y$ r- w
, V, z7 }: I" T2 L3 g9 x
//for(i=0;i<1024;i++)- F+ K2 D- k" L
// temp=0;- V+ G" a1 J# i O0 T, c
, r9 Y0 {5 g9 l //UPPReset();2 J2 }+ e/ c9 R; I! U- p; y
/*启动UPP DMA传输*/ 1 P1 q) F4 Z. X UARTPuts("upp_prog_dma_i\n",-2);6 }5 z+ L* j2 ~2 @* ]
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! g3 g; Y/ j) X6 `8 N: }) j; D2 y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" C( z- Y; M5 H& X% E& M7 z' I3 e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 Z- a' [5 Q. C; ~) D/ i, d; B S
, ]& J2 Y0 f8 g+ W% R UARTPuts("upp_prog_dma_i\n",-2);. Y% u% ]4 A6 l3 T# Z; P/ u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 T* [0 E! w) h6 a- |6 V# [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 g; x! y: V& L6 X8 K% r7 v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 M+ l, q; r( ` k! S( D
% o: C' a% ?9 O8 o4 v+ B4 S
/*等待UPP传输完毕*/4 m" K: i& G$ c
//i=0; * T7 I. l- i: |5 m8 e9 Z$ w3 Y //j=0;2 g: G2 n1 Q7 t7 |7 w: a) x
while (upp_interrupt_count < target_int_count && upp_error_count == 0) , H( y0 k' Y1 Z { 0 }# }2 O, E q" h! c /* 测试UPP传输的同时操作普通DDR数据& x' G, l/ o2 N' s- J3 K* j
temp=i;; L& r/ \, w; {. p/ V @8 r
i++;2 u; ~/ X$ x4 E$ ?( p4 W4 F- x; M
if(i==1024) 1 R1 _8 H! O& p6 z; t0 B {5 [0 a/ g. ]4 w% \* c& Q# A) ^
i=0;) v$ E0 L% u) b. n
j++;# D$ ?- |8 O6 G- V% k5 n
}' G$ @+ `) c0 ~% U( }2 m
*/* v( I1 N# G% H4 t
- H% ?' P0 g. U) D7 N9 j
asm(" nop"); _" a- r1 p. e4 B/ ? p4 _3 b6 n3 Y% H- S3 \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 3 j- ~) p4 B0 j2 j. ], J }. G5 \2 w3 O# Q5 c l
6 I, I7 i9 z2 C/ @5 s) A B
/*检查UPP传输的数据是否正确 (loopback modes only)*/ $ D I3 s2 F- t+ Y/ ?+ c# r( Y8 Y //UARTprintf( "i=%d\n",i);# v* c2 g; F+ p$ w; }9 u
//UARTprintf( "j=%d\n",j); 8 R2 y8 N: [6 M- G* f; N& n6 V9 R UARTPuts("Data mismatch in buffers.\n",-2); / p* B: e0 v" G: T* a/ J" Q if (upp_interrupt_count == 2 && upp_error_count == 0)1 c2 s2 L+ U: z5 f) q
{- t6 X+ y% R( W2 `
for (i = 0; i<upp_frame_size; i++) ) {! ^. l$ f# [8 Y! f% v {* E9 v# }3 ]4 C
if (upp_buffer_a != upp_buffer_b): a+ c" D5 y7 D' j0 J
{ 7 f& n9 Y' ]9 r! ^# |5 b0 t upp_error_count++;* O- h/ a- v1 j' c
}. u7 n* U. \4 I3 B! O7 Y. c# O" n3 i
} 9 Q- z3 H. U$ t1 v' \ } " O' n$ y$ A' g. W. m & q! k3 g" u: G /* 报告通信结果*/ 8 x1 K) M9 V$ N: L G if(upp_error_count != 0), f5 }# X# U1 Q, {- _: d8 p/ v: M
UARTprintf( "upp_error_count=%d\n",upp_error_count);( n# Y8 T- t7 w. V9 E5 i( K4 c
else 5 Z. S8 h& \3 K* S UARTPuts("uPP transfers complete!\n",-2);7 A8 m9 {, K) h
' x2 w$ a2 E# k
UARTPuts("Do you want to print all the data?(y/n) ",-2);8 v5 `: {& W- D! e) S
UARTGets(ch,2);6 ]/ _; ?, P; k
UARTPuts("\n", -2); . X r0 c j6 k, i) S$ s9 E 1 p& K t$ ~' V( w. q) `. u3 i if(ch[0] == 'y') 0 b" h& `; p7 V {( v+ }4 f4 `7 m. w) j+ a
/*打印全部读到的数据*/ 5 c- V: I' \0 ~; \3 j for(i=0; i<upp_frame_size; ) . I/ t: \6 N8 Z3 v! s, s; d o' B {! R H5 Z1 X6 S% Q" o9 {
for(j=0; j<5; j++) & R2 P1 ~$ k# E7 c {& p) l( b8 O% o, U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);/ ~& J& A8 b' @( P: A' I+ h
i++;0 l6 u0 S) o8 b( l, S0 a, [
//if(i >= 4096) 1 I- _4 _. v" p v, b! {5 J! A // break; * X+ w: q; ?$ D9 h " M( O# I2 a3 o* U' I- Q }: V/ ` Q( L5 L: w) z1 p( @2 x
UARTPuts("\n",-2); : |5 r% T6 V* R& O2 D/ R9 } }) ?6 v' H5 U; W( u1 V
}: U2 K% [7 v- j8 |) j% ]
( T3 N0 A* T3 J9 Z9 u6 w8 s} 0 l! { a& b& g" _8 F6 w1 j" n) u; A # m( ^$ I ^1 m0 \- u1 T `$ I$ e0 j. S/ s3 K 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ P5 S' A7 J$ k( G0 C3 \ 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 k r/ P" s b' M f; w" W