嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 X+ o" y- J3 _2 `2 E1 R' b, V
Void UPP_TASK(Void)
; d: \! |: `! b. h7 _3 H D& M
{
) w' h2 N2 p1 ]$ x, I: c
; @/ ` g2 Y: E9 T F
int i,j,k,target_int_count=2;
' O( n2 W+ I2 ?
char ch[2];
! x5 N2 R0 |8 W) [# D
8 T5 |& F* `0 W# R4 U8 ?
; c& I5 r3 P1 ^+ w9 x
$ n5 [; p& }1 N; F5 c
upp_interrupt_count = 0;
/ H. h7 G% \' p9 M5 n
upp_error_count = 0;
9 `% b, h: v2 S0 x7 J
. j" y, c& u6 [* k4 }
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) E; B( E% L% g
// Initialize data buffers
" v9 }( J2 [) E5 j
for (i = 0; i < upp_frame_size; i++)
' e8 e6 k9 u9 y+ N5 T
{
I7 l. C; g: r) o" q( k9 ^9 y
upp_buffer_b
=i;
- c; f3 u7 c! y& U" v+ O5 j
upp_buffer_a
= 0xDEAD;
1 P4 c9 r) T) t, [: m. H- q
}
% J( l+ ^% U$ f6 N
: }( f: z( N e X3 q8 e# _
//for(i=0;i<1024;i++)
5 B( l4 E7 N/ S8 ^3 O) U
// temp
=0;
* q: G; F" z2 w* r' Z: k
2 E/ g; \# K% Y
//UPPReset();
- V5 u+ ^( F% y3 w3 e, V& L' r
/*启动UPP DMA传输*/
# a* ], ^8 e( D9 O6 s: A7 D
UARTPuts("upp_prog_dma_i\n",-2);
$ P7 a/ c% M- p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) i2 t: U n, W8 b8 k4 c4 Q$ b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ U0 c# y* Y$ P! i5 N' s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 Z5 p" ]8 c( b% v
2 i3 m: I5 o3 a, n, b% {4 F
UARTPuts("upp_prog_dma_i\n",-2);
+ k, t( x2 x7 u3 U
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 G) E: ]9 W# I* Q6 A$ r3 Q+ U
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) ], m- e1 Z& `5 N3 ?: @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. y+ r2 i6 y2 J! y2 a# k
, V& k9 K# O, @8 O$ R1 i9 O5 \
/*等待UPP传输完毕*/
; L' }2 p% G* F( {0 a4 o. X
//i=0;
U# |( ]7 T4 ^
//j=0;
9 }! A' y0 t5 Y8 Z, N/ b' Z& i
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 Z, D# Y& ^' k8 x
{
' u6 v9 H( y. a
/* 测试UPP传输的同时操作普通DDR数据
& t! K$ t( N( g6 P8 Y( ?
temp
=i;
3 [: `' y2 S! L, }
i++;
" Q" H& B. {4 x1 r8 B# V
if(i==1024)
- \# U' _$ {: C
{
$ w9 l$ z U! U5 z9 u
i=0;
. y) }( Q k( E. k
j++;
7 P9 D6 `: U. n8 O4 `
}
3 G) I5 O1 v Q' `
*/
6 \- K, A7 P; v% }: K
2 [" A9 E) `9 T6 M- e) t X) a
asm(" nop");
- u& @7 k' |2 h) T: g* H/ v
, [5 }2 ?4 y6 h; a1 v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 F' u, C0 B# {6 W2 x
}
/ `9 w0 }0 F4 s. c
4 j' o6 L; p, C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 [0 Z/ c* O1 z b1 M
//UARTprintf( "i=%d\n",i);
4 s% o7 S% F! u0 T) m, {8 a$ J
//UARTprintf( "j=%d\n",j);
8 l4 E; J/ a) {+ ~" f! o' g: `
UARTPuts("Data mismatch in buffers.\n",-2);
0 i0 ]& [, l- v5 a/ G5 |+ s
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 k( u: ] p$ z/ b4 B; G5 E
{
7 r. x% k* ]5 M9 D3 q
for (i = 0; i<upp_frame_size; i++)
5 L5 \7 f; [! V; l' T9 `
{
% B& S% e! T- [8 o) ~4 G. l+ c; n
if (upp_buffer_a
!= upp_buffer_b
)
7 a' H: |2 V8 p$ s+ V. F1 u
{
+ `& i& n. Q. U2 `
upp_error_count++;
8 r: T$ ~; F P% `8 X
}
& A$ v6 B" D( I# ]; e% N w
}
/ H9 C8 p7 { _8 s+ L
}
. [3 I. T6 P2 ]6 r) V
' [. ?5 Z4 e* L1 E
/* 报告通信结果*/
7 Z7 P( p2 |: S' s7 H0 c
if(upp_error_count != 0)
4 t4 l0 Y) B& v7 ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( _9 @2 i" x: D' z2 d
else
6 w" `& g O j
UARTPuts("uPP transfers complete!\n",-2);
3 h4 _# A: q; v3 d6 Q
. m$ x: b3 a0 E) N( y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% o% L- I( ^ U+ U
UARTGets(ch,2);
. o$ M, Q/ ^2 `; d7 S, i
UARTPuts("\n", -2);
; `, n) X0 O6 a- U* w% r( I* T
5 `! K# D0 W7 v* [# A
if(ch[0] == 'y')
5 V( I" R7 \& ]: q/ P& @; C
{
1 r0 `3 N4 {8 ~( C; L
/*打印全部读到的数据*/
9 X4 y3 }, z# Q- U! y
for(i=0; i<upp_frame_size; )
4 f+ p. ]: @! p- q4 i$ [
{
. Z- h; o; z8 u
for(j=0; j<5; j++)
. o! I! O( B2 ~% A. D
{
9 k) Y9 ~& r+ D5 F5 M! C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 M5 T* W! H! O+ Y7 O" I
i++;
' G. d! A' U5 D
//if(i >= 4096)
( j& F8 s9 G! _, _
// break;
' f5 O! I4 e7 N5 j' a/ s- ^$ R( a2 e7 ]5 b
. _/ q; h# _/ ]% J* G' a# _( U( ]
}
' i; z8 g/ B# ^; q; W8 v
UARTPuts("\n",-2);
' \" \' h0 R# o* q8 O
}
# w' t2 A/ d b8 c; ^
}
% \8 c k) a% O5 k4 L
; `( L! H, P0 a {3 c4 a+ U/ y
}
- C8 i9 @% t N( g
7 a) X9 f2 Q/ J& b% M ]
" p" K! u+ B$ `$ d) v2 h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: b) V7 F% z& M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: @' w$ f9 B4 N: ]
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4