嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 A5 A9 y T- t1 }4 C
Void UPP_TASK(Void)
: y; Q/ N" v$ Q* C5 h' i' d
{
8 z1 f+ P' F% {5 P1 x/ y3 H" b
0 G. S/ O9 Y6 Q/ m+ @5 s
int i,j,k,target_int_count=2;
4 W1 B7 d. R$ s+ N, Q
char ch[2];
# Z$ C5 K! U0 N# h: |
9 h. M: F& y0 f
1 s G, @$ ]' d0 G3 y) ?, |- \
/ D/ l5 G7 d6 E% B
upp_interrupt_count = 0;
' ]2 q+ y3 a- v" {4 w$ L% s/ G
upp_error_count = 0;
. T+ q, p4 @' f$ D' u1 @! Q
# R* `7 e4 G! W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 t& f% x+ X# p$ a( f# H. U$ c
// Initialize data buffers
4 W! U& R4 V, K7 \* W
for (i = 0; i < upp_frame_size; i++)
) k8 R, E+ L: M9 |/ X7 ^
{
+ x q" g; M$ q6 y# V
upp_buffer_b
=i;
- |: S4 Y1 Q4 a1 B# z6 ~
upp_buffer_a
= 0xDEAD;
6 W+ o! E1 l; s
}
5 I1 ] ~' Z7 q6 ~ b' J
" x. S% `6 C* K2 C7 F1 \7 w
//for(i=0;i<1024;i++)
, d" [8 Q8 d& p
// temp
=0;
$ D/ K, E# ~8 B M' e0 ?( E
3 z: a4 l9 O5 `+ [3 Z# b
//UPPReset();
* _6 O( t/ K( K% V
/*启动UPP DMA传输*/
9 j# C* w* }: {
UARTPuts("upp_prog_dma_i\n",-2);
- E( U5 g) v7 `, o; ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 l% Z8 `. K( B: e2 v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 W9 q1 B8 {/ @5 S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ G4 P8 I" W4 \& a! ]$ \( h# c
. K" Q+ a" } z& V/ B: M9 u
UARTPuts("upp_prog_dma_i\n",-2);
- c7 {) A. E' w [) h5 q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 g% C) H% T* \) l2 j" h! Y ]
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 R+ N7 N. [% w, X$ z4 [ s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 a& N* S2 L7 R, k7 x$ q9 Q4 s
- ?6 ^1 T: P- P$ n: [: e( o( {
/*等待UPP传输完毕*/
! r( y* n, S: ~1 A# Q
//i=0;
8 `" {: m9 d+ T0 [( `9 F6 b9 {1 S
//j=0;
+ [; {8 s" r1 J( p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
x' P3 T7 g% _- S. R
{
% z6 Q( |, \( v) n
/* 测试UPP传输的同时操作普通DDR数据
! s" Z7 `2 _6 k
temp
=i;
+ s3 A4 }# P, n. Z! N1 _/ B
i++;
& K8 b& [. H' p' m2 i$ L* E
if(i==1024)
8 t- l, _1 ?- _* \2 P! W2 E
{
3 f. V, }+ @3 S
i=0;
- E4 S6 d1 t5 P( J, P0 s+ q
j++;
8 k( k* y, F! L; {/ e1 H; C
}
9 d$ k3 _( G/ f6 r
*/
1 N9 k1 E7 K( y9 u0 O a
1 e! i- g1 {& l4 [# p$ u
asm(" nop");
! Y% E/ @/ t8 I7 e7 D
: E( z$ A2 m: }, y: f8 Y" g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' u1 S0 V5 w5 f8 g- c" z; ?
}
5 }8 p1 B/ D8 F* a+ o4 a" ^7 t4 [
* b: Z8 o Q' |" B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" }# ^3 L$ O! U) w
//UARTprintf( "i=%d\n",i);
5 @# M" L; Q# A6 U2 b" O
//UARTprintf( "j=%d\n",j);
0 j; J# c; ?8 o) U2 d# j( j
UARTPuts("Data mismatch in buffers.\n",-2);
& A* h/ ]9 _& L' \/ Z" m
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 }6 @! d; C0 l
{
# n! ]) p1 q0 m: I( n
for (i = 0; i<upp_frame_size; i++)
( p2 x1 w; m* c8 b( l
{
2 R4 r2 y9 ^. F
if (upp_buffer_a
!= upp_buffer_b
)
. _; v& ]' Q u7 p
{
7 q8 H! g' P* m d; s' R. w. A
upp_error_count++;
" O* V k% N7 S) m$ a
}
; ]- l4 A& `! j' b# f" t9 p/ M
}
H( L! e% n& y. B
}
) ]- A3 V9 `( k2 Q) y
; F% o' U3 P! K1 L7 ^) c' a8 I% M
/* 报告通信结果*/
$ ? u. Z5 i" W* g N
if(upp_error_count != 0)
( O3 T! a+ H% T7 o- @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 v! \+ S# b9 ~) x3 U
else
# g: m2 G( @6 {3 ]
UARTPuts("uPP transfers complete!\n",-2);
+ }1 H; q3 H. c, X
" p) R! D- g! o E: Z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 D: `; E( [& m" ^& @% _2 F# q. O- n
UARTGets(ch,2);
( V2 I& `& o9 f; @0 N
UARTPuts("\n", -2);
3 O# }8 s- Y0 Y+ G4 n. a- ?
, [( K$ ^. T b. i
if(ch[0] == 'y')
9 y+ T- M$ W$ G# T
{
9 j- s3 j4 M# C5 s+ q, f
/*打印全部读到的数据*/
3 I7 E/ S5 ?: H; Y2 j, ?, O
for(i=0; i<upp_frame_size; )
" y. {. U" X+ F: g, ]1 x/ q
{
x: V3 S. u0 E; R8 `3 b+ V
for(j=0; j<5; j++)
6 d& F: H/ b8 J0 k( S
{
, S& C2 c. q: L( u/ K/ }8 q$ m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, a- D2 n7 ]* _! |; [4 H! r) t+ n
i++;
$ a7 J% k4 e" I$ N+ L
//if(i >= 4096)
2 \, a/ w& l* U3 f
// break;
; v% ]# i; F- O0 e# X0 v( E7 ?+ F
2 P2 a8 n# ^1 e$ r
}
2 c7 v9 q% y& [) u; Y1 R; i# s0 ^
UARTPuts("\n",-2);
, e9 R+ n1 Y- H) a" w- b6 t, |; X
}
; l7 C6 X, J6 ?" |
}
0 ^& ?0 ?+ u9 {' G5 R$ v4 \: ]
/ s/ c- R- o- x6 r5 _( ]' W9 ~
}
2 c5 y _+ t B/ j2 N- b" `% ?4 r4 T
4 ^9 k: T6 h& k2 g1 G
0 d$ Z1 D q7 W/ R
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* g2 C4 w& @+ P* U8 p
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- p* u8 ^9 s( E
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4