嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! Y& E8 V& W! v
Void UPP_TASK(Void)
3 r1 \9 ]% |$ z; ~' Y! g: S
{
8 {* o$ _0 e" g
' T2 j0 A: w' X+ G
int i,j,k,target_int_count=2;
7 S4 ?, y9 E: D6 ~$ B4 ?2 s; N' U* g
char ch[2];
8 F- o% H! Z- S. l1 t& M) k
. Q; \$ O: `% L' w# B2 e/ n
6 v2 j" @: W+ j1 ~- ^9 A, C% [: A
/ [4 @) b, Z& D' k+ q* Y N$ M4 r( X
upp_interrupt_count = 0;
+ ~, k9 A" l1 @: I7 Y
upp_error_count = 0;
$ F; ? N* Q. u) n
- E& D* l. w6 Q" w i
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: J/ |3 i# B2 S! l
// Initialize data buffers
+ R3 h+ \1 \9 V8 n( Z
for (i = 0; i < upp_frame_size; i++)
2 H" P/ E4 `6 t9 U* Q) _6 x
{
! @* ?* B% C0 `. ^
upp_buffer_b
=i;
) Q' f. G% K& l: d s
upp_buffer_a
= 0xDEAD;
6 N' ~: {% a, v, I5 e- F
}
: d4 `" x6 S# T3 F# C
. v: y4 I/ V& d ~
//for(i=0;i<1024;i++)
2 \1 |2 P0 Q! ~
// temp
=0;
. v4 ] a4 ?0 `) J
& _& g, G2 v# d1 H9 Y9 J- B# n4 E. J( ?
//UPPReset();
2 G& E9 I+ S+ d1 b( B
/*启动UPP DMA传输*/
9 I- ]! O( X1 |# z! `# C3 w4 n
UARTPuts("upp_prog_dma_i\n",-2);
' n- e, _+ a7 ]6 Q3 U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 A. [: u0 K `4 t# t" j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# N4 q \% J W/ \6 r `7 N2 _
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ E4 G" v# {' i# T# Z
h) J0 H* Q) p/ d. Q W
UARTPuts("upp_prog_dma_i\n",-2);
' y/ s, w8 }8 f, s& V- H7 ^, j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# O5 K7 W6 ]. O& a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 l& [; B- V# \4 k1 Z' T: q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ K6 I5 \5 l6 y) u& [
- L8 J1 J K' \$ `$ s; B
/*等待UPP传输完毕*/
# I, B# ?" u# n' |/ I
//i=0;
5 M6 R! w3 ^' T2 F3 _, A
//j=0;
8 e# ?# g/ ?% W3 r: E4 F: q5 w. E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* Y4 F* {! F' N4 I" X
{
. V( x5 G E3 i' i
/* 测试UPP传输的同时操作普通DDR数据
; ]& p, e0 ?" L4 h8 f
temp
=i;
# y0 c2 g7 F; ^
i++;
' ]4 A7 C' [, S8 p/ I' j
if(i==1024)
" i3 ?" K0 _: s( l& S
{
3 M! Y" _7 y0 }9 c
i=0;
0 T( C* P) i5 y+ h" Q, H- [
j++;
9 h d: i; A' [5 ]: I. \# m" p
}
6 U# \+ x. p C) [/ _
*/
" x7 T! }( d/ P
( H T! W" ], ]
asm(" nop");
3 s; L7 n8 A5 z) g5 O
( A q7 F- s4 m; ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' \ y ^/ V, f3 n4 ?
}
4 Z* o4 T% x1 A( c T4 C3 Y
: U2 n) X5 }, \* u& Q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 y+ X$ K+ a% ?4 B
//UARTprintf( "i=%d\n",i);
5 T5 o9 o" w3 b1 Y/ H$ S
//UARTprintf( "j=%d\n",j);
5 B9 ]2 i- T+ N0 z, ?
UARTPuts("Data mismatch in buffers.\n",-2);
% V: B! w% F1 w/ G
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 b/ J; `/ T, Q% b
{
; s6 j( j! x. q0 p: T! I3 O
for (i = 0; i<upp_frame_size; i++)
( R2 |1 O. q1 i/ i' G# H
{
- U0 f3 \) F' A5 [' ?$ f% i6 N
if (upp_buffer_a
!= upp_buffer_b
)
5 ^! D) q2 V6 v
{
D$ ^* |1 X) Q) [: }
upp_error_count++;
2 ~% u% n/ v6 P- Q0 J5 {' O, a
}
S8 U, o5 b5 B- w( J$ Q! [$ H2 _
}
7 Z1 p5 \( y f7 |; ]5 P- W" i/ m
}
9 `4 |2 Y2 F& K" [2 L1 V4 A
% E; h8 b; _9 i U! z
/* 报告通信结果*/
s3 {' z; Z6 \6 M
if(upp_error_count != 0)
3 A! ]! g9 [" Z# ^
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# I$ J7 {0 d0 p6 k% U
else
L0 Y8 t' D: Z% w- |+ T
UARTPuts("uPP transfers complete!\n",-2);
4 C, a9 B4 M0 L4 F+ |* J
e0 c5 u3 Z; s& \! D
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ R6 i% |$ n6 w& Q3 G. k( J
UARTGets(ch,2);
! _( L( @7 c9 T) X8 A6 c9 T2 B
UARTPuts("\n", -2);
0 M8 R: b% L1 V: O0 l) j1 ~( n; S9 V
% ^ Z4 ]) ^# d* Y
if(ch[0] == 'y')
$ R, L" x9 }4 {. a
{
3 @6 Y9 T* J, c3 k$ A* R( r! p
/*打印全部读到的数据*/
* ~* h2 q5 e' T& G" {% W
for(i=0; i<upp_frame_size; )
- z x5 M. s. r$ `( F
{
% h( R, q! Z9 p, M
for(j=0; j<5; j++)
9 J2 V% y. G5 r" z
{
4 l1 y: q2 f o. U+ Y+ d" \7 ~! o3 d' d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% A' e0 N/ b; x7 H: @( p5 |
i++;
% I6 x) Q3 s5 J/ ?' C# t
//if(i >= 4096)
`1 ?5 r- \% U: O+ J- N1 h$ G
// break;
# G3 X3 C0 a5 u. U$ m
3 g+ _: p& M+ {1 {/ D
}
0 l: G# U" \8 c9 N1 q1 Z
UARTPuts("\n",-2);
5 j, M+ K" h% U; A* I( b
}
. J0 y. x8 z0 X% f; ]
}
* F- ~4 N- |& p. ^! N( H
5 L( @; [0 r k
}
. }7 K- Y" M9 S3 T1 A% u' P
5 D& X/ w( B! h2 k# |% ~
9 ~( j4 m; L+ m2 Q! p/ x" L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 R5 y; g. [# A% M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. l& ~: }5 ~$ n- R) O' f- \
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4