|
|
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 b3 }; b# q. |. J) S2 ~, `: q. k [Void UPP_TASK(Void)
9 `! ^6 F: w+ Y# m/ O4 O& f{
0 t2 \. w4 X5 c* F5 |' X1 @7 y7 W% ]) b' w, J% O
int i,j,k,target_int_count=2;
3 N6 U% g& }; j/ }5 C char ch[2];3 u/ }+ n2 d& E7 g1 N/ G, g1 A
* d8 g) @. S* J# @+ ^8 E% B8 c
" {, f7 N4 z; Y! v7 d& [; a# L5 u1 u- I5 E. h; j+ j) p
upp_interrupt_count = 0;: ~( m0 ]; k' u+ x4 K
upp_error_count = 0;
0 r0 Q# V1 V7 W! b: T7 E
$ M' q3 h" r3 o; r4 S UARTPuts("\tResetting uPP buffers...\r\n",-2);, v; D9 @7 F: h2 a
// Initialize data buffers* u3 V) ?) T) D; l) p
for (i = 0; i < upp_frame_size; i++)3 x1 a$ }, n% q6 Z: }* `
{
/ |3 o2 O9 Q9 z) d' j& {5 A; G upp_buffer_b =i;
: ~# G: C5 g2 Z w$ S upp_buffer_a = 0xDEAD;, |8 @3 Y6 Q( O
}) ^. D, P/ J% }2 M: |$ m
8 E( c$ h6 N _. | //for(i=0;i<1024;i++)
+ s/ P. M- q0 V3 V // temp=0;
+ C! R& {% R6 M* m! @0 d ?$ _- W( S
//UPPReset();" l' \ H4 w$ W' \* d( R
/*启动UPP DMA传输*/' U; ?" q5 M7 w' \# c: ]- {* J/ B4 c
UARTPuts("upp_prog_dma_i\n",-2);
1 u/ S; V8 y% w5 p9 c" O upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- U0 b3 U. s6 o* T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' L* A5 d4 i0 @ A s upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% s/ ^! g2 z$ @7 y% q8 z% {6 W& Z$ k2 h" i9 v3 c
UARTPuts("upp_prog_dma_i\n",-2);7 _2 ?3 H) Y9 d# L/ ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 j8 {; ?. b3 M1 ]+ |7 i+ p upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 V4 r* l& U5 |' h1 _ upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, G7 l" T0 I1 N8 _1 k+ x8 G5 B0 s; M4 M' O8 ], U. }% C) d1 S( q
/*等待UPP传输完毕*/
6 ~6 H1 g6 f" g. ^ //i=0; L$ f* a" D6 j* k/ `8 r
//j=0;# j3 ]3 e8 d7 l7 P; O2 k# q3 X
while (upp_interrupt_count < target_int_count && upp_error_count == 0): e* k: {0 E. W, B! ?9 _
{
) k6 F" r, a2 ] /* 测试UPP传输的同时操作普通DDR数据
/ r; K- E: |5 p) u( A temp=i;
. [7 q2 h! \- V/ D# t i++;
e L) A7 O& M7 `# x if(i==1024)
0 }# R7 K' X, F+ f {
+ v; c) Y! T0 Z0 q i=0;$ |/ @/ [, L8 C( w( P1 o# u
j++;
6 c# l& v: @7 `$ s }/ U0 V2 ]8 H: Q2 Q7 @: @$ S+ H
*/
8 ^8 b" \# I- v) E" E. }. k2 A# I, H: G1 C, b
asm(" nop");: Q+ O X7 o3 W8 m" T; M& V
# O$ H" \- l6 }! I: s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( E. l. C% X: H }# r( H* B) N8 X, \' Q' z
9 c% U' Z6 r2 b9 O* i /*检查UPP传输的数据是否正确 (loopback modes only)*/
" c+ O# Q, |& K7 N //UARTprintf( "i=%d\n",i);7 {4 b# w7 | f+ @- w R
//UARTprintf( "j=%d\n",j);
1 S8 G) C+ I' P! w4 H; s# m& [ z \ UARTPuts("Data mismatch in buffers.\n",-2);( t7 Y5 d# T6 R* s( R: H7 K4 g
if (upp_interrupt_count == 2 && upp_error_count == 0)$ Q: Q" f A$ n1 J7 W
{% m$ g8 m* o7 x8 d, D
for (i = 0; i<upp_frame_size; i++)
. i$ H* C: |1 H; R6 q$ C {
% W$ L" L& g. q" A% l5 H if (upp_buffer_a != upp_buffer_b)
/ u z. S/ i+ ?/ M {/ m7 E- C' ~6 Y7 e5 e- L0 n
upp_error_count++;4 Y# _* N2 N: p& Y5 E; u
}
! e) _" Z% o! [! R }4 S" f1 ~) w' Q
}+ t5 u4 N5 e) |- S# E
% \' M7 `; b& u3 k: d2 [ /* 报告通信结果*/
1 F D# H6 [9 T( ^, l) t8 z if(upp_error_count != 0)) x. o4 t4 a) n
UARTprintf( "upp_error_count=%d\n",upp_error_count);/ W% n# g( _5 g
else* P- B7 R9 n- y. |7 D
UARTPuts("uPP transfers complete!\n",-2);7 n8 k: l: P! R
2 r$ A9 p6 y( \8 y UARTPuts("Do you want to print all the data?(y/n) ",-2);5 [6 a* |' R; s
UARTGets(ch,2);/ u- A' v6 l' F- H$ r" a
UARTPuts("\n", -2);4 V& |% R: O M: A# s$ k Y% U; n
, ] o+ T/ Z" Y% c( Y# |6 u if(ch[0] == 'y')
9 ?+ I7 A* ?) C7 p {7 _ } x% C0 M; s2 v
/*打印全部读到的数据*/
4 w& i- E) t4 Q for(i=0; i<upp_frame_size; )
; v; s k+ W4 N {0 e. G. o" Z! l# t) H
for(j=0; j<5; j++)6 e6 G8 {, t5 G+ G5 }
{
7 Q* V3 E. n, [9 D6 C UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);3 |2 f1 ?, |! Q {
i++;
4 k0 i ] p2 i8 a //if(i >= 4096)6 ^2 H! W t, A
// break;5 i' j6 _# g- V* t4 C/ a5 m/ L
) U; ]: n% \+ O( E* q8 T }
/ k u7 e" x. l, O# I UARTPuts("\n",-2);
o9 e- @& m! J J6 k }7 M4 e4 ?9 {- G( d; b8 q
}
# p, z8 o. I9 d; {1 g$ n% m1 ]
: i" g) U# ~& R}
. I7 X) O3 ~& b' _* D# h+ `! X- d/ G) b$ \& E' \
( J7 K+ G5 h, F8 Q
|
|