|
|
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! n5 O; F& L0 @* g
Void UPP_TASK(Void): P6 w2 s" P5 @7 e' h. r5 d
{5 m6 V! P7 d* Z U. p
* y3 a% S6 @1 C% _) w V, L, s
int i,j,k,target_int_count=2;" g/ c( B V. n, [% x. A
char ch[2]; }6 v- x A3 r
) r' X6 a0 W2 [$ K- R
5 R+ L+ P9 {9 x) x) S+ L! G* H. B$ p3 f' {8 I% ^
upp_interrupt_count = 0;" I6 `( p, R! D0 N
upp_error_count = 0;( J( U" q2 r; O% Q. o, J9 O1 b
2 j4 l. s& d9 B& b4 j% m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 l& o- p- E! X5 Z; m // Initialize data buffers% Y0 o. p/ Q; w6 e3 O
for (i = 0; i < upp_frame_size; i++)
* h" `% T! I$ a0 o V {
. A% s1 y+ V! E upp_buffer_b =i;% f1 Y* ~4 V# ^. v8 `1 n; l: E0 \
upp_buffer_a = 0xDEAD;
) i+ \* d( w$ r& V% _ }
6 |5 n6 {0 @5 A) w& }+ F7 { c3 m9 ] G7 e3 e; Q! [1 ? l' t
//for(i=0;i<1024;i++)
6 r( I4 t' e7 Q0 z$ r# c" t // temp=0;
9 i! }6 S8 c" E d' M/ g9 w4 W
; a9 `3 D v& e+ A7 ^ //UPPReset();
/ S# U: j3 R8 t' W: I /*启动UPP DMA传输*/- [ N$ X- P' \) T! U
UARTPuts("upp_prog_dma_i\n",-2);
/ p3 m7 M) I& z) _4 b$ }( \, s upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! h4 M! j0 p) J# ^ upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 g- H1 D8 L7 C$ b7 x* T; V
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, t9 _1 d7 P9 R/ ~, @$ a* c
2 O3 T4 a* ?. K! }# `1 H UARTPuts("upp_prog_dma_i\n",-2);
% t* h; w6 [, T' X5 } upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ e) n' O/ v5 V/ J4 g upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ S! X5 K, K, O% x: k7 |6 I upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" [6 M0 P. C3 L, ]* H
6 f9 |1 X& {3 {3 j( [$ |6 {' l /*等待UPP传输完毕*/0 n3 ^( T' ]% F0 o! j
//i=0;$ m4 u2 P% S4 S6 U) B5 o/ k
//j=0;
9 g: n7 X7 [! ^ while (upp_interrupt_count < target_int_count && upp_error_count == 0)
w7 |. C5 u& G* r {* \3 s+ f( h3 @
/* 测试UPP传输的同时操作普通DDR数据
- e! t% e; q0 E6 c4 Y8 K temp=i;
5 j9 {3 v9 s# p4 e i++;: r* Q: q$ x, i5 ~( M/ y* _
if(i==1024)
: z6 l! i% t8 D- R" Z {
8 o3 u5 |# u# q) o- M i=0;/ f1 b8 M' g, {7 ?0 Z
j++;
. {5 M2 Q8 J" _2 Z) N }: L8 F) w! \. |9 K6 Z" P
*/
6 o8 p+ o [) A& \0 x+ r
6 P0 Z! o: I: Q7 | asm(" nop");' n9 r9 E8 `7 H8 [4 B
( _6 a% j9 T1 m9 D2 k3 ^" K6 \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 m3 [% A Z/ y8 F/ W$ ~( s: ^ }
/ X0 t" t& L3 J7 C0 L Q7 N- Q
- J% ~8 [1 E5 Y: d& Q /*检查UPP传输的数据是否正确 (loopback modes only)*/8 ] E# }" {0 b/ P% q% a
//UARTprintf( "i=%d\n",i);% Z" q, P8 k# K. e: ~9 A
//UARTprintf( "j=%d\n",j);0 Z. v n( f* R+ B5 P
UARTPuts("Data mismatch in buffers.\n",-2);4 M' C8 M" |& u7 K
if (upp_interrupt_count == 2 && upp_error_count == 0)+ l+ h2 E2 M3 V$ Z# g9 S+ Y c
{
, `5 E+ A3 ` k for (i = 0; i<upp_frame_size; i++)* X$ f: _+ f8 D/ P5 Y
{
O* m2 j! W0 h; t( e( u9 o# Q* V( ` if (upp_buffer_a != upp_buffer_b)
- y2 K1 x8 y" ?' I9 ~ {- k/ n0 g$ V( u, @1 g0 f
upp_error_count++;
, G* ]/ D" @: ]" M0 ]2 B }8 {; r1 l/ A9 [
}) b7 p. j/ D; i( d; x* G
}4 @# d6 d9 w6 t9 X
% D R+ x0 J( E /* 报告通信结果*/$ M8 T4 t3 \6 z6 E
if(upp_error_count != 0)
5 ]' c6 q- B1 s4 T- {0 s UARTprintf( "upp_error_count=%d\n",upp_error_count);
( _. \8 i* ]3 B6 p# _( N/ `- J+ C else! m" {% l8 h+ U6 D4 F6 U
UARTPuts("uPP transfers complete!\n",-2);
9 F& Q' z4 i; F+ H" ^% Z0 w2 x9 A* n
UARTPuts("Do you want to print all the data?(y/n) ",-2);0 s9 u/ _- K5 T! V9 _# N4 R
UARTGets(ch,2);- `* K* u9 ? L' L
UARTPuts("\n", -2);& V/ |4 T8 a/ y, b! p
c q* Q n5 i* N0 y if(ch[0] == 'y')+ R, @6 P$ p# ^- c) Q7 f
{% I( _- ~: ~+ j
/*打印全部读到的数据*/
: a2 p* _, [0 C for(i=0; i<upp_frame_size; )+ b" C! p) J& h0 y; M: s( N6 g
{, g. R4 ^; d* N; j- Z+ C
for(j=0; j<5; j++)
3 N& n! \; A" E! u. C" Z- `% X {
7 P; _ z" u$ B' Q v" O7 k% ~ UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);
) |2 Q1 m3 \( a, l w i++;
$ J- i; Q0 d9 X //if(i >= 4096)
% A r8 A$ f( E // break;, y, T& U5 B4 N0 h) N) o
: A+ f+ w) B3 z8 I5 |6 [+ x/ p
}
- F- w: d+ Z7 @' A o" P% Y UARTPuts("\n",-2);
/ d8 a) ^$ g! V) ^ }/ ?0 A4 G4 i1 o: Y
}
f2 L, ]* X' F2 ]7 g4 o# \4 b2 i- I% n7 k# c
}- }) g8 |3 s# m& l5 Q
, x9 }, n1 b m0 b9 b# Z
6 J) K. h& `) X. Y% } |
|