嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 W: w3 e9 d' ^5 c: _
Void UPP_TASK(Void)
3 a' j! h. A( Q* D# F# m
{
- O7 L5 W, V/ x* ]* g
; I Q! a o# @" C% ]0 F
int i,j,k,target_int_count=2;
- N, D+ p. U. R3 D2 X, }
char ch[2];
9 k/ ?/ f7 S7 }9 t% P
8 J: M4 T( I5 V* w
) e |+ J" g0 b8 X- O
! D8 j- r9 a5 ~
upp_interrupt_count = 0;
) p- q; L$ A2 A$ k7 p
upp_error_count = 0;
0 l. u0 v T. i% G9 Y% [ h
: O7 C6 \$ g1 E) \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, J" d# P; ~5 T/ k: {, s5 Q
// Initialize data buffers
, T9 I( A) ^$ L! V6 q1 @
for (i = 0; i < upp_frame_size; i++)
+ q' r% E8 l' i
{
8 l1 i- }: _" L+ C0 @4 W) Y: w
upp_buffer_b
=i;
) i: n, \9 L' r* N9 H- q
upp_buffer_a
= 0xDEAD;
6 p F- f* e5 g$ C7 t q& W, [+ |
}
5 E% H( Z Q& ]8 n" j
: y( T+ {/ q7 ^8 d
//for(i=0;i<1024;i++)
4 Z% f8 x3 C2 I( {" U5 J
// temp
=0;
( W8 \) Z3 ?! d& u, f% x
8 b! I* [5 e' Q% b# T# P
//UPPReset();
3 l9 {) ?: I1 x7 ]* @$ F. T. H6 s
/*启动UPP DMA传输*/
; ^( a- m- a! D
UARTPuts("upp_prog_dma_i\n",-2);
& O% k7 u7 [, L+ D2 `
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 f) x9 d2 J {' u! q9 s
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 U3 E: k+ H( u- n% m% r2 H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& `6 |" X+ z) f$ { ^0 R% I
1 }8 W+ ^0 S# t. R* {
UARTPuts("upp_prog_dma_i\n",-2);
' q4 @: V+ r! Y& ]2 s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! Z% z7 y& P! g( H1 R/ m
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( e6 ?, k8 \5 |( i
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 w! t B9 `* z! T2 g
$ s; I- X% p4 h- f) L
/*等待UPP传输完毕*/
( H9 l+ B# A: N1 `* q, {
//i=0;
2 t, }, B1 Q/ U& G$ ?) N
//j=0;
a; i* v% e5 t& m; ?
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: _- t$ T! C" q( y; E" m
{
8 S4 t% ~0 {1 e* |* Q2 k
/* 测试UPP传输的同时操作普通DDR数据
, e5 O5 z" X1 J5 h0 l/ F
temp
=i;
9 c: k5 y( d" D2 x' G$ v F
i++;
+ E8 O' V5 t% g- C
if(i==1024)
8 F2 F( p( @5 K2 _- J6 |- w w
{
1 F' [: T2 Q4 K! A: }' J% f+ S
i=0;
% e$ l$ d2 f2 a; M; L' ~
j++;
6 S8 Y! P4 K7 c. t% I
}
4 E0 z7 t( d. t3 t% X* ]
*/
! ]1 {( F3 n) D2 Y% M5 J8 @/ I
3 V5 D: W' }5 Q8 d2 m- ^
asm(" nop");
% E7 e- |* z' u* }( q0 |2 J' @
6 F- Q3 } d& t4 I9 l) w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* g a( S) v' N! d+ s N1 Z2 D
}
y4 f. R% ^+ d/ g4 ?+ i$ \/ D
5 K0 F! }' _0 b) c# T2 x ?* [
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( z4 G- }8 R! P4 d" X: k$ A( A
//UARTprintf( "i=%d\n",i);
! @2 h' R+ C! T, I3 ]
//UARTprintf( "j=%d\n",j);
1 i( i* o. q# Q/ a- T# v
UARTPuts("Data mismatch in buffers.\n",-2);
& u/ S3 G* W2 w& V" V" C. S
if (upp_interrupt_count == 2 && upp_error_count == 0)
& |5 A6 Q' I8 |% F" N
{
& b. E$ r7 z1 W# O8 ?; ?
for (i = 0; i<upp_frame_size; i++)
' l& c8 @+ {0 b/ N, u# }8 N
{
: h3 ^# Z3 z) P1 a; g* \8 C/ Y
if (upp_buffer_a
!= upp_buffer_b
)
$ z' s3 V* h/ R- s% j
{
' X2 X# ^1 s z/ B; c6 p3 D" Y
upp_error_count++;
2 n. p2 m/ E# l- X
}
/ H/ i% [7 R/ t% v! G1 M) m
}
3 h' n3 [' t& }/ C X6 j; g
}
i& h& b/ N& l1 Q
1 L" g- J/ ^ r- M
/* 报告通信结果*/
0 y0 p0 Y4 B2 }1 K8 U
if(upp_error_count != 0)
1 ]$ F1 Z) Q. B0 \& q& e
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 D7 g& }. d1 r: y8 v
else
: X4 i9 O4 J, c( s: g
UARTPuts("uPP transfers complete!\n",-2);
@2 B3 i& W4 L( W, \! C; u
1 c5 q4 Z, f4 Q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& \6 s# U# g7 c& M% U4 B
UARTGets(ch,2);
' J' x$ R& _1 g- o. H" q
UARTPuts("\n", -2);
1 {3 S$ A+ [# @! C0 X! Q
; Y! J0 _" T& S8 w9 [
if(ch[0] == 'y')
0 ?! c% G! T$ H1 N6 {0 B1 ^
{
6 d' I1 z& a7 K7 }) I
/*打印全部读到的数据*/
9 ^/ V5 W9 X& p7 c
for(i=0; i<upp_frame_size; )
! H; H# O, t- N, t) s8 L
{
0 o9 v. V$ l7 x" j
for(j=0; j<5; j++)
/ S/ M3 b5 d" e$ h5 j, [8 V
{
( m; Y) e; }+ f3 H8 [* X2 _7 l
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! o) q- j: g5 Y
i++;
8 l. x# I1 I4 V7 n9 I- A
//if(i >= 4096)
' E. U7 V' J6 o, Y [6 L$ n
// break;
/ G) [4 n1 ^) Y
( S3 W) `7 Y4 h! }
}
9 G; ]8 G$ }+ Y2 e L3 E& ^
UARTPuts("\n",-2);
* \0 }% _# `+ h: e" v& \
}
, h# ?! |" \- m0 s& t! O- u4 r) O
}
3 E* _/ r" T- N
7 J {9 w _4 @! s. J) O
}
* p" t! \$ W: q3 W O9 E
5 O& b; a4 K. ]( J
) g( L: A* P" T Y2 a4 W5 }7 ?. K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 b- W5 F- t' x0 e" Z$ V0 }, |
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; w3 l* I8 ~0 {3 i0 G
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4