嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 b, Z' K5 a% [+ A3 Z8 B' Y; W, {3 y
Void UPP_TASK(Void)
( L6 j: K6 H. x) f
{
' f3 R* P1 e: i* ]
8 j" }( c+ u0 ]2 L7 l
int i,j,k,target_int_count=2;
" J6 k- \+ y- Z' ^
char ch[2];
9 { G- e0 S$ |! Z9 F9 n
/ t, Z3 r* {1 b- X" ]4 R7 K
' V: `6 q) v& K! H+ @
9 E9 N: K3 Q: s( M2 t
upp_interrupt_count = 0;
5 ^# z0 y7 z' F0 J
upp_error_count = 0;
- n) M3 _7 W4 @( t6 k7 J
% ]3 s7 \( E) l3 @' b' ?& ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" b. s, }- i: P" Y
// Initialize data buffers
0 G: f& X! b7 S5 M" N4 n
for (i = 0; i < upp_frame_size; i++)
' V: m5 r; c) T/ M) H% j; M3 @! F4 `
{
3 ]) }4 ]8 c2 |- j" _
upp_buffer_b
=i;
9 y& G' {; P* F/ F" ]1 V
upp_buffer_a
= 0xDEAD;
4 V8 g) z$ P& W! I. I* h3 C
}
9 k% P" _9 [' Z- A
& D! ]: b' B# Q% G6 Y3 ~
//for(i=0;i<1024;i++)
) v6 j0 V$ f+ g; v2 G( P# R
// temp
=0;
0 b+ c* ]. I L
2 i, K' M e- A% ~! T. @$ ^
//UPPReset();
* |( Z$ p! i) i0 R6 M" F
/*启动UPP DMA传输*/
5 s" D% v. Q2 a# A) a
UARTPuts("upp_prog_dma_i\n",-2);
6 r& H) V8 I! p7 |6 {: W. t
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' k0 l- u1 \- ]6 I6 {0 J }
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 y: R( Q& j5 w* t7 z& h
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% Q d& B' \5 M8 L! H8 p3 E
" j7 I" k4 n# q3 S" u
UARTPuts("upp_prog_dma_i\n",-2);
H1 {2 _, A" ]: S7 c+ O A/ J
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ J A! u# }6 P& k3 h2 e
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! O9 H! y0 } o( e( v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: _$ }! G4 Z7 d* }- Y
4 i, d. Q( {0 p# C2 O
/*等待UPP传输完毕*/
$ Z- a4 f& |0 k) ]" }
//i=0;
3 f& _/ ^7 P1 z" [
//j=0;
+ n. ^0 m- [ `: N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( \/ ?& w' F, c
{
4 \! T' E/ F( x0 O4 |" ^
/* 测试UPP传输的同时操作普通DDR数据
7 Q- i+ [/ _) M3 s" Q0 ]" L6 J
temp
=i;
1 i3 U' ?$ s* C- ?" ]; {+ N; o& n
i++;
% A: I! ?" `" W
if(i==1024)
" ]9 I5 L! T+ @, m6 H
{
) u/ _0 h1 k$ N. E+ M# m
i=0;
) [% ?+ E. K& [( a/ d
j++;
0 k) a e" W: G
}
9 r |# A4 ?0 v# \( V, y+ W8 n
*/
0 r! T$ u2 Y( U6 _* L
: t a) t. O$ |1 {# M! j: H, R O" R
asm(" nop");
$ G+ S3 R5 e) {! d6 H9 R8 G
: Q; t" P& f* A; K, p# n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 a0 ~3 f! D- A
}
% X+ y; U" w- g2 [6 d9 A% t( k& i6 F" z
* o" G) X) V e1 t9 P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( T+ \( L4 j, z% ]' V! D1 R6 W0 X6 L
//UARTprintf( "i=%d\n",i);
/ d- c9 ]2 D$ T3 g2 x4 b
//UARTprintf( "j=%d\n",j);
* Y. o3 d' Q. r F) o
UARTPuts("Data mismatch in buffers.\n",-2);
! ` Z- ~9 ^/ m' ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 m. Y, Z* Y/ v( Y9 s
{
2 T3 c+ d g0 W) U% U. |6 b
for (i = 0; i<upp_frame_size; i++)
3 K" j3 P" N) U% i- l. l) H! y
{
/ ?4 _8 }' T. V* `* h
if (upp_buffer_a
!= upp_buffer_b
)
$ F: M( x- H0 o4 h
{
: r0 ?3 Z8 n7 a; R3 Y: c
upp_error_count++;
8 w$ k! [* a+ S/ F! B3 [
}
6 p& [/ }/ o; @( |) G
}
! u2 c* o7 B3 D) {
}
: a/ D% u; C, ^# R( U4 k4 v) Y& D
; H7 @8 Y0 c/ f& N% v2 P
/* 报告通信结果*/
5 k2 ^6 b+ |4 ^, A# d: X6 A; Q* h; G
if(upp_error_count != 0)
) o& W0 Q& s& `6 a
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# b4 s, L% U: K! H) _7 W$ f' f
else
$ K& x0 J1 j/ ]7 `
UARTPuts("uPP transfers complete!\n",-2);
/ N8 q: d( c; o4 o+ [2 F3 g
3 ?# |, r/ X) p& i; m) q+ s% j5 x
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* p9 J% }7 q0 ~7 ?( L
UARTGets(ch,2);
) a( ^! O* z6 j; l w6 j
UARTPuts("\n", -2);
! Y; `4 d0 C) x8 \0 C
4 i4 p `( C4 P$ K$ O2 k& }
if(ch[0] == 'y')
5 o8 d T- ]) K% k4 d$ v% j
{
6 _6 _* I9 A) ]
/*打印全部读到的数据*/
2 L$ O" ]2 [* z2 ^6 ^
for(i=0; i<upp_frame_size; )
9 ^9 g% Q! c. I8 F4 ^
{
# \' s; s/ \6 @' D
for(j=0; j<5; j++)
' f2 |& V- D* Y' d& a6 ~
{
0 g( ]( L: j8 d$ k' s# i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) K- S) M" I G) K. G( n
i++;
* a4 s* H" q) x, H. p! e
//if(i >= 4096)
) R+ l1 i" j5 l$ q" c( X0 B
// break;
: P. `8 `' {' i) q+ q2 m- F
8 B( U% I: X/ f& Y$ s( h
}
% y1 i( Z/ e# m* r: P( ~
UARTPuts("\n",-2);
, Y. c7 g+ F8 ^/ J! A6 \
}
7 T/ Z8 p- b ?/ t6 N
}
* U& V# R, e* H
: L2 b4 h: V& H6 w+ q6 f& f
}
# u9 g& H- L# r5 j2 [) |
3 b4 ^/ L3 R: b- P! i
; M/ N# e# O2 E: f* h# {
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% m/ B# D( D% p0 k0 ?7 b0 R
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* K( i; _: V) I
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4