嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 I' S: N4 m4 b" e3 }, N, g0 [
Void UPP_TASK(Void)
1 u/ s9 v, R* M4 J0 c) J' m) `
{
, H$ M- S+ h, R% r0 ?$ U
5 V1 H' p8 J$ Z: H; x: @. L' X6 `/ @
int i,j,k,target_int_count=2;
3 ]! S7 ]2 L4 i' {8 I4 Z
char ch[2];
) p" l4 x1 o8 o
3 p1 l* [4 s2 X7 E4 o2 w
* z7 O( {# P: }8 Z6 g& ^
# ^8 }1 O; V- z
upp_interrupt_count = 0;
$ O$ S; v7 l8 m! o# l7 U
upp_error_count = 0;
: }% N# `9 \5 K' E
+ R' y+ r2 `9 n- a3 r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 n# U2 M, I" _. i' B, T( k
// Initialize data buffers
7 G- K2 |9 |. a" J" ~9 Q
for (i = 0; i < upp_frame_size; i++)
: N* p4 x; u2 t1 j, L
{
/ v3 j0 l& _& ~* s' W
upp_buffer_b
=i;
. {2 B9 E- r K0 N- a
upp_buffer_a
= 0xDEAD;
0 m$ z0 [+ k* l5 l& R
}
; c9 M' [6 p d
# A9 k7 O0 T' P% K9 B; z! t2 a
//for(i=0;i<1024;i++)
) _1 q9 W& |5 L6 s+ n4 ?5 D
// temp
=0;
. r! e9 h1 _ h* S
) ]; |1 e) y& V% J
//UPPReset();
4 R7 u; U N" U/ h5 v
/*启动UPP DMA传输*/
8 s8 G1 O4 _( k
UARTPuts("upp_prog_dma_i\n",-2);
6 Y4 v) r9 K' @3 p7 n' }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& h! z2 V, c4 `$ }! C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 o8 y* ~$ P% D* Y j
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; ^2 {0 P& c. {4 |
) q6 y# j7 n7 R9 W9 S' ^, j
UARTPuts("upp_prog_dma_i\n",-2);
$ {# p+ C5 H. H8 B" t" ^" D5 x0 |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" m- @4 ?. N O7 T. R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( O: q3 p5 O9 h9 o5 m# j* Q0 t( r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& v9 n: T4 ?! g4 r; |
8 b, C% E9 C$ o( V) n
/*等待UPP传输完毕*/
+ w$ Q, l) W4 `
//i=0;
7 Y# k, s, O x5 o( F
//j=0;
" u4 |! S0 ?0 S/ S* j7 g7 x2 l) N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% }# t9 t- n& w
{
J" z" T, h; A9 P
/* 测试UPP传输的同时操作普通DDR数据
/ l8 k- X7 ^3 ~2 u, `$ F& G4 {
temp
=i;
$ E; W6 K3 k, Y% v
i++;
* A; n1 {% W5 b
if(i==1024)
! W2 Q3 d3 V0 a( l' L
{
# Y$ W; C% U% W
i=0;
' `% W( L5 z( T
j++;
+ @' x: Y" B( C. O" F
}
- e6 e9 x4 d- z9 H+ Z( u
*/
% g! l; J! V1 G D$ g( Y' ]& {& Y% G
& @6 s' Q5 [0 N9 f8 ]
asm(" nop");
& m+ e8 B8 t% I
$ Z D/ S. Z( {$ v0 u( R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 o. Y, q* y$ `& @& e/ b
}
' [; A1 \; a/ k- V9 ~
% i2 `6 z8 x$ m9 ]- w/ v: s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
: t! |2 F0 H" T- i4 S; f
//UARTprintf( "i=%d\n",i);
) M% f3 Q2 N* A0 g7 w C
//UARTprintf( "j=%d\n",j);
* U6 O2 Z( r- N1 u8 ^
UARTPuts("Data mismatch in buffers.\n",-2);
& p7 U% u0 Q( V4 {6 |* ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
. d& e& I5 s. w. R- p# V
{
. L; ~, F7 |8 K9 ?4 X
for (i = 0; i<upp_frame_size; i++)
4 M( \8 m& M4 D8 ~; F
{
' ]& O( {5 f4 f9 Z' X# |# {% \
if (upp_buffer_a
!= upp_buffer_b
)
" k% |$ v7 z+ E/ q" g
{
% d! w! j3 k8 S5 q9 R7 T9 ?" L* s! H
upp_error_count++;
( s+ C# b1 g5 T2 E. A/ B+ `
}
: S* D8 z" Z4 C6 @2 m3 _
}
4 A1 @1 B7 d# j3 I% E$ H6 V2 W0 h
}
) T! B' Z2 ]* j
" B6 B4 D3 G6 `& R
/* 报告通信结果*/
( C( C3 A) P( C/ V; @% B
if(upp_error_count != 0)
" k2 B9 q" P% `5 }: i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; g% \# L3 O+ J- y
else
" O- A }) a& O* i- X
UARTPuts("uPP transfers complete!\n",-2);
+ q; L, N) s* ]! d( d) S
7 ]+ W7 O7 F3 @! M. p( c' c
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( t! B6 P7 ]! `8 [( t- t; z+ X
UARTGets(ch,2);
" [% R. K6 j! p% O
UARTPuts("\n", -2);
$ z+ S* [7 H1 i Z+ ?
: v- ^ S( h* \) t$ s8 F0 x
if(ch[0] == 'y')
# o, O( i+ z# t0 l- j0 h
{
3 Q/ O# N* i8 O) j4 {
/*打印全部读到的数据*/
@/ q$ g; A: W" ]# H; l
for(i=0; i<upp_frame_size; )
2 e+ {; C; `( C5 A" C% b
{
5 f4 Y8 r& u6 I5 T N+ A
for(j=0; j<5; j++)
( ~; [ \/ C2 _9 Q6 b, o& Z
{
9 a! z) V: _+ ]& n8 S6 q j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 h0 L) U4 t' ^+ J
i++;
/ m- W! w0 K, [; I8 B. v& D
//if(i >= 4096)
* a' a1 C5 k. u3 Q
// break;
; @5 O3 s8 l" T
9 h E- ?5 S; @4 S, [1 k8 R
}
7 E' {' s8 S+ ?' f0 h9 q. J' c
UARTPuts("\n",-2);
, l6 s ^# ~! u4 e5 ~3 K* n
}
0 @% g8 h }0 v3 [' r
}
% g: f3 m- C9 ^% Y: W
' l( F& c% u( A- q1 G) _
}
% W: a: V6 p) H, X
* t: n& E" W; ~4 j1 ^9 I# ?: M' |) N! l0 @
9 X1 H3 C' |' `7 d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) ~' _" l+ C! d% j0 u; Z, V
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! l7 G K- z: k" _, N1 L
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4