嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& ^ H" ]5 b+ x0 W; ?* F
Void UPP_TASK(Void)
$ ~! I/ F/ w& M
{
3 [( c1 n# x( J( l9 R; u; ?/ o
3 j" `3 C( ^6 ~; l* |6 I) O5 B1 [/ K
int i,j,k,target_int_count=2;
: o' F6 J5 I& k) p6 R$ M5 w
char ch[2];
* A- }$ n e! |+ D3 @7 \
) E" q" m& h- W( d
1 Q! S$ G2 j5 y" d6 a, c! j) V
2 [! m% Z4 O7 G/ k
upp_interrupt_count = 0;
9 v0 J# `, K* E2 W6 T( W1 V2 K" V
upp_error_count = 0;
+ G8 W* {" g3 s7 U f0 p- r# N
5 _. |- `% ] R$ \# C; T: u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 S2 D/ ?+ _6 K1 q- W
// Initialize data buffers
* s$ D A' q. b. X8 }% ]2 ~" z
for (i = 0; i < upp_frame_size; i++)
5 p1 `! T7 D8 g+ Z1 R5 n
{
: S. h: ]7 M; I6 r
upp_buffer_b
=i;
" v; Z/ g( z6 m+ _: W# m
upp_buffer_a
= 0xDEAD;
9 E, w& x0 Y" ?0 Y' I9 ~6 \: Y0 ?( R
}
6 `2 u! t- s$ k8 ^# v
) ]3 C: M, `- V
//for(i=0;i<1024;i++)
$ ?9 t$ ~, L4 M+ |1 M
// temp
=0;
. o; r; u4 p- m* ~+ h
0 i2 b, c2 |/ s9 Q
//UPPReset();
`, |: N- s8 U, J6 q" B5 c
/*启动UPP DMA传输*/
2 ?2 V0 F2 @8 b# ]
UARTPuts("upp_prog_dma_i\n",-2);
- L% ^( J* Y6 A9 P4 f1 w1 v }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; k z# X8 t/ ]) r1 S% Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 f6 E3 L4 J1 `, W' t. q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 m: _3 Q1 r# j7 D' P) \# `- |" A
8 B8 q# I2 A3 Q& a) G& n4 E# ^7 W1 T' K
UARTPuts("upp_prog_dma_i\n",-2);
) S# N) y/ @. h9 H4 t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 m7 M( O; E2 A7 i. Z2 X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# ?8 Q$ z9 E1 k" r$ h
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 ]/ Y6 K# j9 I8 r, p( G
/ x% x( Z0 ^! }2 j! U
/*等待UPP传输完毕*/
6 q0 [$ U8 H j1 L. ?
//i=0;
* C7 A" M7 c1 E" R
//j=0;
( X% c( h8 J3 G$ t+ N1 Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; Y# H. _, i0 [" H2 r0 ]; I1 \
{
? U' k! O5 I g9 S9 M
/* 测试UPP传输的同时操作普通DDR数据
& t5 ^" f% h4 s
temp
=i;
5 t7 [; O: Y6 z( T) X+ G x
i++;
' F; q* _* Z6 |) C. x' |1 O
if(i==1024)
9 Z8 C! D4 F8 v( b
{
7 J) P* Y$ L* N* u: e) T
i=0;
1 Q( l/ f- H. [* f- T
j++;
2 Y! y( E' A3 W5 q$ c
}
' c8 y! h; A* Y! M- w4 P; l
*/
) g8 Z8 [' P% u* y
2 G) ~# ?$ f7 v. M" U+ t U* K6 T
asm(" nop");
. Q6 `! ]+ v( s: z3 X! n5 ?: Q8 s
3 s+ ~: z9 J9 Z; [1 v; f% E0 @5 \$ a
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- e5 r/ r! [+ K6 [
}
1 a( F) `; h z( u2 l/ y" _! }6 J
) P# x" N* B% S W- o6 M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 [) H6 b, O7 g% ? N O
//UARTprintf( "i=%d\n",i);
0 R0 R+ L. O& o( F
//UARTprintf( "j=%d\n",j);
2 y* s: a% q5 y8 C/ L
UARTPuts("Data mismatch in buffers.\n",-2);
* |1 j% {9 ~; n5 J E4 T0 m
if (upp_interrupt_count == 2 && upp_error_count == 0)
, P- C L% d2 M
{
, b9 G% m, W$ ?+ h: y
for (i = 0; i<upp_frame_size; i++)
, ?4 N# J6 L) z4 Y
{
1 [1 w: T& p: z
if (upp_buffer_a
!= upp_buffer_b
)
4 G4 u" C4 e( x% B1 t# @
{
4 u0 o3 w* {* e" w' O( b9 E
upp_error_count++;
/ X; K _: n! h, o1 e
}
2 u* [# h7 G, L
}
( V* v" R \7 z
}
& F) y% h u: z+ p2 y
9 G! S. q1 F+ a1 ^1 U2 T
/* 报告通信结果*/
8 D- X8 `# ]7 u7 w
if(upp_error_count != 0)
. t4 i. v1 a- e8 O, ?+ }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 z8 J1 |' A0 n% U4 ]7 ^
else
# w8 u5 c7 o* U$ b; ^3 k3 |
UARTPuts("uPP transfers complete!\n",-2);
" W0 n: y' s' i3 Q! B
; F( V5 b5 d2 R9 y' N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) p; V9 N7 d1 U: `7 w
UARTGets(ch,2);
0 Y: I& X! ?; o) z7 M
UARTPuts("\n", -2);
( r5 g9 }$ v2 W1 i# ]0 e7 r# C9 Y8 |
8 _3 g) V$ V# ]
if(ch[0] == 'y')
o' A5 ~/ U' ^. G: w5 N, }1 M. P1 V
{
! y X4 q% k$ @" s$ y/ a$ b
/*打印全部读到的数据*/
, z: M2 r9 H2 ~( J( l3 k
for(i=0; i<upp_frame_size; )
: b# J }7 R o& v
{
9 l/ O( X: r7 w5 I% F5 r+ D# Q3 K
for(j=0; j<5; j++)
- v4 g5 u! D: ?/ Q+ g
{
+ r v$ O% V& {- b0 ^
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; v. N: [) L) a
i++;
# I0 R/ o4 A" ~1 f
//if(i >= 4096)
0 b! e G; Z( z( K; V( m
// break;
V( x" y) ], D k
. ~5 l3 T- `9 r) b+ O( n) c
}
* s$ g4 c3 c/ r0 R c4 q3 y
UARTPuts("\n",-2);
! E2 z Q. c }0 d- X
}
. Z: }" g Q1 e- S
}
, V( q, j+ q8 g4 S6 v% \
$ m8 ?' n' G* S; F( P; z! [
}
6 I8 e ?6 g- a% G
5 q; k2 @1 j2 i3 _% v4 o- ^4 a+ H
* g0 j1 G, u" x% o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 b0 s; n6 z6 ]6 |9 E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! F0 A' C& S2 x
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4