嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! M1 J# Q1 Q; N S+ H
Void UPP_TASK(Void)
; Q( M: o* v2 o% j! |+ [
{
# l, N3 u% C- Z
/ W% h0 F- H3 u D3 W3 I, e! ]
int i,j,k,target_int_count=2;
3 T' C' A& V9 M
char ch[2];
2 M3 J5 _5 _. ~4 E9 [8 M
' x" G9 D' W9 w
3 Y" K% {- M# z: i/ l4 @3 h
& ^7 {5 d, E1 z( T
upp_interrupt_count = 0;
" T' a0 M4 `& q' I, ?8 d
upp_error_count = 0;
, F2 ?. [$ c+ c# P! J
" A% i" a D4 k, H5 i' p' E" ^
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ B0 n; @/ [& ^* ~8 h
// Initialize data buffers
) Q& w1 A8 S2 g; u* M+ _
for (i = 0; i < upp_frame_size; i++)
2 Z" z$ Y7 @; z; s1 r6 Y0 R
{
- O8 g! \5 d0 I( B9 I7 t5 U' ^
upp_buffer_b
=i;
) Z" ~+ d2 ^( q7 O! G
upp_buffer_a
= 0xDEAD;
/ j/ P+ E7 n8 Z6 S; e5 @
}
& C {, J- c; P/ O" N. P7 a! m
5 }6 [8 d/ J/ u9 B; m/ a6 V
//for(i=0;i<1024;i++)
1 e% d0 J4 E ]1 L
// temp
=0;
. |1 p* ^! Z1 X3 c% ]5 p
8 T6 [3 x7 c' O2 P# U
//UPPReset();
, g; v( S% W, Z3 x8 X
/*启动UPP DMA传输*/
& U0 u: B. O9 c M, }9 ~
UARTPuts("upp_prog_dma_i\n",-2);
. g. g4 O0 x2 Q9 S4 V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ ~! m: Z3 M9 q( G1 J1 R- I
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' v! X8 d4 j) B1 K+ h
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 a! O$ V4 d L& G5 l
5 `' z% w" g0 A
UARTPuts("upp_prog_dma_i\n",-2);
- f5 T, e' ~8 a* }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 w! ?3 Q3 ?+ |% d, E1 {3 x
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. r/ `$ e$ A ?! D8 m5 K+ q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( `; j0 L9 T7 ?& q
! c. A* I! p3 b$ h; s0 U
/*等待UPP传输完毕*/
" i$ Q/ h0 r+ Z, m; V. L$ D
//i=0;
) S' t- E2 o: ~: ~8 m- m. c
//j=0;
P/ U, O4 t- o0 }( p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 R0 p$ c D+ \5 k
{
$ t% k1 q7 q; O6 ?0 [( k! f
/* 测试UPP传输的同时操作普通DDR数据
1 a) K$ q& U/ C0 W5 y0 q
temp
=i;
4 R; z9 ~5 W7 {
i++;
( |4 k2 z* M% H) l2 j, X2 @6 ]2 G I
if(i==1024)
8 ~$ S6 ~0 e, c" o
{
4 g4 X& C1 [1 T, v8 _
i=0;
& F* Q* M+ x0 r0 y0 } D4 E
j++;
) A! u& _. d7 X8 ? P+ \1 n
}
8 p! X! x6 A- z k W5 \
*/
; b6 _6 y7 j1 K
6 ^9 O( f- y* z2 Z; Q7 d* d
asm(" nop");
+ q4 A0 x/ g7 s
$ _+ L7 z$ p& ^$ _7 q; ~; [& K- ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- }3 \4 w* K$ n4 {8 I+ O" |
}
2 a, O5 W! b4 I& ^7 G' @9 S' m: x
8 `% T1 @2 l$ _; ~5 W. k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" V' }, i1 {* q. K# T# B
//UARTprintf( "i=%d\n",i);
" J$ k; F! G$ o* J7 a9 b( Y# p
//UARTprintf( "j=%d\n",j);
8 T- `3 I6 ^7 S0 Y( l
UARTPuts("Data mismatch in buffers.\n",-2);
4 Q& M9 E- f& s8 ]. w* G5 Z; }
if (upp_interrupt_count == 2 && upp_error_count == 0)
V5 T- I# o- E
{
I+ l7 C6 B" u' U8 Z* [
for (i = 0; i<upp_frame_size; i++)
* F/ _7 P% M. [- ~8 [/ y: }: E/ x
{
. M* L! E" ?0 P
if (upp_buffer_a
!= upp_buffer_b
)
: j7 h5 Y; i! g- z, N% r$ Y
{
( V: r& K9 W/ O3 i
upp_error_count++;
6 i. T7 W" S/ p/ t
}
3 j& w( @* u3 r6 m
}
* S9 c* a+ k) X- C) u0 R5 m$ P( q
}
$ B: Q: n% T6 L
, Y. B. T& r) S% f
/* 报告通信结果*/
& u" C& Q0 }( k
if(upp_error_count != 0)
2 ~/ S' Y! J4 Q, j
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 t% |0 n% w% Z: b' e
else
7 R/ C k, J. }- G0 v( q8 |3 {: K6 Y
UARTPuts("uPP transfers complete!\n",-2);
3 B( U+ D- m n" b/ |
9 B# v6 H* J9 w- b1 E/ ^
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 z7 t X) s! u6 J7 G8 S# _
UARTGets(ch,2);
9 ~5 ^- @1 |" j% J g/ \# t' @
UARTPuts("\n", -2);
( V+ A, Q7 ?4 i# @2 Y4 r( z
! ]$ p! j% e; F, `' s; r+ W# A) K% p) v
if(ch[0] == 'y')
7 l9 i& [( c L. z' `. N. B; m
{
8 a7 p5 v* ?: |
/*打印全部读到的数据*/
8 y0 {8 A1 r0 _3 c6 ^+ u: w
for(i=0; i<upp_frame_size; )
) v* A3 n5 x& X
{
E7 W2 [3 l3 N3 T4 B
for(j=0; j<5; j++)
2 T) h$ R4 a# f: H
{
4 r) E5 V+ J1 M6 r5 _5 h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ D. l/ @7 Z, {, V+ j8 |$ m$ a
i++;
, u1 B/ K0 O* j6 y3 A9 v
//if(i >= 4096)
8 y) c( u t0 D7 [
// break;
8 j+ c+ ~& X; `: m6 R- K6 A, q9 Z
% T! P, ? Z- l1 R6 E8 o8 j. Q
}
" V% _# [; n3 p0 D4 C8 y8 M
UARTPuts("\n",-2);
7 Y; \% p6 u& k1 n8 L( E
}
% w X% o. `: N; w/ s3 M( Q
}
& Q; ]; [/ n1 X% `7 Q
' H4 Q2 B# r9 s/ @/ @7 S
}
1 V) a* z7 b+ z* U
3 |2 z& V3 ]6 R6 @7 @0 O% ^( b) z/ Q
8 |9 }. Q$ P1 q9 p% `
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 Z# P" z) W. i" F2 {; ]% _) V
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! B1 ~( y1 y/ W( k0 p" I p" p
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4