嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
^& U) S1 k# u1 W6 b: p, u
Void UPP_TASK(Void)
" v& O& e6 K0 ?4 A/ c
{
* h- s" k8 y5 H
+ q+ `5 S2 y8 ?8 k# R
int i,j,k,target_int_count=2;
3 \& u0 G; f$ d/ y. Z; G
char ch[2];
3 X4 P% {. t# x$ f6 r. B& Z# m' E
# `1 b. M4 s; m4 y
4 [7 v# b% F! M
" I# b! x" `: ?/ _, y# E& H& Z% b2 T
upp_interrupt_count = 0;
2 D9 X, ^7 \1 C* _- j+ C& e
upp_error_count = 0;
! M6 E+ B( a; h' d* n" }* u
Y4 Q! [& u Q3 _; j, D4 T9 W3 e
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( [0 p. r' L% O1 f* L% o" a- o
// Initialize data buffers
6 y: @- t# i- C. N
for (i = 0; i < upp_frame_size; i++)
+ r6 {( J% K" s( `+ b2 n- L
{
7 A9 `7 C2 r/ w% E
upp_buffer_b
=i;
7 e4 P% c1 \6 T( s3 r
upp_buffer_a
= 0xDEAD;
9 F: _0 u0 Q& Z8 C. j4 _
}
5 `# `5 N- w4 f" u3 F5 e, M; ?: D
7 E) C8 H5 Z9 K% u
//for(i=0;i<1024;i++)
) m' M" E+ L ]. i
// temp
=0;
6 F7 z2 i0 y4 i7 r1 L
, D# b6 c7 V% \0 R; S( K8 U
//UPPReset();
/ x' a4 A" D8 i3 p* X2 U
/*启动UPP DMA传输*/
/ W& e' g; ^7 }
UARTPuts("upp_prog_dma_i\n",-2);
% s0 U* r% M, _6 }. W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 |5 K! @5 z/ J7 H+ h8 v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- ]& S. s) L+ C' }, O9 [0 ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% D. _! Y+ t4 G7 Q# u
0 G! W, k& V% @+ i! m6 v4 m! p
UARTPuts("upp_prog_dma_i\n",-2);
9 i( d- C: ^: p- ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 J% l. Y- e0 X% r# {0 m" |( s, ^ O
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- t; T* \; g, K3 D7 C0 S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! j0 f S" O8 B6 x& g/ f% Q, D
. E$ o! q5 c! ]. @: j( z% r q$ W+ r }! f
/*等待UPP传输完毕*/
! ^' i3 b$ U7 d% z
//i=0;
, W8 g4 T6 A4 l, s" i2 r! C6 s
//j=0;
5 j1 z0 ]9 Z9 c" V5 {6 H9 n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# z% \8 a8 Y! S! ]7 @$ b
{
" R; o6 T. ^- n# r6 B
/* 测试UPP传输的同时操作普通DDR数据
2 k& C3 n1 b* d& q% B i
temp
=i;
' O8 x' p; m# V' `
i++;
5 h2 w5 l. d. s/ q
if(i==1024)
. J! | N: H6 s8 A
{
, D( n5 j6 `( ]+ F. Z3 {; Q
i=0;
' Q( E& I$ ?6 G7 g* ^& J, `. M
j++;
/ S5 d, W% e1 A( F& @" C0 W Z
}
( R8 w6 k: v+ R0 e
*/
) n* k: `+ q3 c. ~( e
, O P2 Y. j2 `* v7 \4 f
asm(" nop");
: r1 [* h8 u* i [* d; ~
/ [8 F( f/ a& S
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 y6 |. Q0 ~. o* k
}
8 ]$ x8 [' X! l- V# b6 t/ Z) d
y/ `8 _9 L( @- ?! O5 b: Q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 O7 T$ W U, G( D0 E% c. Q
//UARTprintf( "i=%d\n",i);
9 x! A$ a G2 h* O3 b0 |
//UARTprintf( "j=%d\n",j);
- e; M: h+ z$ m" b/ F' ^
UARTPuts("Data mismatch in buffers.\n",-2);
2 B& T' Z. m0 j8 d* M6 g! D; L" X
if (upp_interrupt_count == 2 && upp_error_count == 0)
) p; q; u5 e4 O! n" i# A
{
$ q) w0 E; d3 [. [
for (i = 0; i<upp_frame_size; i++)
! J# O5 ]7 e! \( i, u" ]
{
, K: B' F: U, U
if (upp_buffer_a
!= upp_buffer_b
)
) F; t. s3 i. s* D z' x
{
9 |, M' I* g- N. |' G
upp_error_count++;
' j. n8 \7 k9 a8 b2 @. }, {. |: k$ }
}
" R* S# j" d0 z0 O( L
}
3 G+ c9 b8 z) K1 ^1 |* f" ?
}
d; }+ A- \7 q/ C
8 l7 Q* s8 g4 e+ J0 ?$ N
/* 报告通信结果*/
3 B. C" f( |# ]& L9 Z4 U/ z
if(upp_error_count != 0)
, o" M- ]1 ^/ B+ G+ y9 q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ T7 R% D1 w- ?3 S/ Y. H. f/ L# ?# ?
else
- b7 O: S4 {6 @0 b4 @$ e# Z |
UARTPuts("uPP transfers complete!\n",-2);
7 D: ~& ?; R3 s2 F6 ?3 v }
# H3 {3 _' i3 R( K5 b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* z8 }6 d9 k0 u0 x3 m: m7 A
UARTGets(ch,2);
J: q3 o) O4 b6 q( u( o9 {
UARTPuts("\n", -2);
F# o3 q; q/ @) {! o J% G* F% `
! g: g. J, F( q/ S) n% `8 I% r, e0 W$ Z( ~
if(ch[0] == 'y')
" I: z/ M$ L( u, Q
{
2 d) v' y* u9 x& Z3 ^) U
/*打印全部读到的数据*/
) r7 M5 A% L N8 I8 {* U; X: ~
for(i=0; i<upp_frame_size; )
' y; m3 D( d/ y: i: Y
{
- c5 G3 i, j# f: {; h
for(j=0; j<5; j++)
! X, ^5 ?) s# ]
{
* h9 K( w% D3 n; m) x: O5 a
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. ?* ^" l4 y c2 E. Z& {8 V
i++;
- A5 h( e, l- Y; o r- s
//if(i >= 4096)
: u0 I( S% n$ I: g9 b
// break;
9 W# b4 q* N0 ~2 a$ i+ r. @
( C3 g/ C4 V$ `9 L; W( B4 u
}
9 @- J9 _. o1 t; P1 W: b" C- M. B
UARTPuts("\n",-2);
4 ~0 l/ q% M' @4 c' v5 p$ ^
}
+ H! F9 F) [) `" V/ ]- B
}
- e0 W y+ Y$ J/ Y$ g2 [( ^
0 v3 A, a. p. b* G" l4 [
}
& @" G% F4 y. @
, t$ L" S% I1 K f( S/ }
, O/ x/ b) U5 L" x4 M/ b( ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 Z+ G6 |& P6 Y0 A8 D' ]
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 n# H1 h. D, |! R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4