|
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% F! Z' A" i8 B' Z+ ^
Void UPP_TASK(Void)% ]6 ?' V2 e" `. R
{0 i4 c. ^5 q! W! P+ `% Y' z
: N! {1 L/ T' T3 ^0 Q
int i,j,k,target_int_count=2;, T/ c8 h. `. N$ e2 [" m
char ch[2];
: ^/ ?4 s2 _) T N* h" ?5 A5 Q7 {! B
' \" C. h( |) R F2 N
3 Y" B2 `5 [& {& O: L4 o6 J
upp_interrupt_count = 0; b, j" P0 x( V. C9 m% ?
upp_error_count = 0;
* W! B y" k, _' ~/ ?" f' c$ I7 {+ Q4 y6 C" F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 R3 e+ I s5 b8 o) V R // Initialize data buffers
D3 D4 X+ _: a7 B2 j% N for (i = 0; i < upp_frame_size; i++)5 u$ ]! C* j& z* L( Y
{5 i! O- d# w- ^ A" p
upp_buffer_b =i;" f9 J. d) {6 d( ~; b8 n' o
upp_buffer_a = 0xDEAD;1 h( V! X, Q( ?( M2 d0 B8 T) u
}
0 A- j. C' N! h5 `: }( m/ h9 ?
" p! Y# D3 b- E //for(i=0;i<1024;i++)
) @8 C9 m6 ?4 b/ v // temp=0;
( n) c( T- b# S4 K
+ w- H8 \9 A) t9 A$ f //UPPReset();/ o% ]' [ G( o) z: n) ]
/*启动UPP DMA传输*/
$ O. c, Y& K: m6 F4 K3 D UARTPuts("upp_prog_dma_i\n",-2);
* q; O" g! u/ i upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ I6 |1 p. d- j' o3 X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 z( @8 V3 }0 ?7 @' r6 @
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 z9 B, a5 x, p) h4 g: u# \0 x( ~, O" b- _0 C0 x: e% O
UARTPuts("upp_prog_dma_i\n",-2);% P; A" U* J9 J O3 p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ u2 D5 p3 N& z" K3 `' E upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: P0 N% c+ L" {4 G* B upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 P5 v; X# U* }; Y5 h3 V
7 ]) ]+ K; N r% X0 Z, m7 H! [
/*等待UPP传输完毕*/! `& u! ]2 v: G3 L" R
//i=0;( F Z* H( p# s3 i( m: `9 W- a
//j=0;8 x! |7 u3 _) N1 a( E9 y7 E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 Z2 _8 b" _, ~. X
{
: d/ G+ X" N# g6 O$ g /* 测试UPP传输的同时操作普通DDR数据
; ]2 E3 ^0 @% K m( I temp=i;0 f/ T" g* x& \. ~: J
i++;# ~, P- i! l9 @# {5 l0 q, Z
if(i==1024)2 I3 a) f h1 r5 w* s/ c/ l
{
3 k3 N; i; X$ ~2 t8 V i=0;! C2 n4 X5 ?# r( y" H& h6 p
j++;
2 \, d) [; b6 P# |5 N. Z0 ^ }# {$ u& ]( l, v# P# Q
*/ ~: H2 [" Y* O3 A% f: w
- i% _2 J2 l! S7 g
asm(" nop");
/ g3 G* N, H! s" Y/ [
2 ~9 m# [$ [* l( `8 b9 T/ g //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 l! x) o; j4 ^9 v* s
}; q6 \; Y! v4 {* k" h1 e0 J
1 g& W& n. i( r9 D' v /*检查UPP传输的数据是否正确 (loopback modes only)*/' A+ g( N* g4 o5 p
//UARTprintf( "i=%d\n",i);* M" y8 Z1 W& P
//UARTprintf( "j=%d\n",j);- B* l- P7 T+ N4 ~% G" M
UARTPuts("Data mismatch in buffers.\n",-2);
/ j" d# D& T! g/ { if (upp_interrupt_count == 2 && upp_error_count == 0); L* o% w2 H& u/ |. G3 Q/ H
{
. R$ i! H9 ?; I( w( j for (i = 0; i<upp_frame_size; i++)! @3 l' c. ]& R( ^2 R1 _
{( q8 b" t' M1 y, F% b3 L
if (upp_buffer_a != upp_buffer_b)3 U" F) i+ l9 w: C
{5 G. g% w! U1 z
upp_error_count++;
- }; x% k; i* J6 O* U( q6 C }
h- a, y* M+ b% i9 N5 i }1 o& w! J* y/ ?
}& G5 K1 p/ h5 h3 i& T$ H
& ]( ?) T& {! D% U$ Y7 v /* 报告通信结果*/" d! h" {; C0 m2 P
if(upp_error_count != 0)) }0 ?' H# o( X9 m Y; M
UARTprintf( "upp_error_count=%d\n",upp_error_count);3 [3 g2 s) [) Z* X2 R
else3 H+ Q9 Y& t1 ?- f7 f4 ~8 C7 B
UARTPuts("uPP transfers complete!\n",-2);
, x: w# X+ |: @6 M) p5 V+ g# l4 ^0 I- U! d0 [
UARTPuts("Do you want to print all the data?(y/n) ",-2);$ Q' L T6 y2 o5 o! ?( h2 l/ {! n: g
UARTGets(ch,2);
% |8 a9 J K- A UARTPuts("\n", -2);; `5 |+ M7 B& M4 s5 @8 p
' p3 _/ [- q# z' N if(ch[0] == 'y')
" ~$ u( X' k% x' c: U% a @! d9 P {. g3 X6 W' k) {, E
/*打印全部读到的数据*/
/ |6 k( j2 f* D- h7 I! V for(i=0; i<upp_frame_size; ): W' e& I+ z7 z
{
7 J) E5 A0 D; @& o3 n0 x for(j=0; j<5; j++)1 p$ L' z: B4 ?4 X% W6 l/ S6 @
{1 Z. |# h! X* C2 U5 N: f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);
( c, G1 P# w1 z$ N8 m p i++;
8 Y5 c, I" B7 d8 l //if(i >= 4096)
3 n ^$ _4 P; X/ |- J // break;7 C0 M- Q" ~+ w7 F7 z+ o
e3 l/ v- n1 K- K8 ?$ _1 w }' S4 c7 v% M1 k- t
UARTPuts("\n",-2);
3 \0 U. H; L& h% n1 z8 w: c }7 \: t9 l. N; l0 l6 I6 W
}- d$ u7 ~! |1 {; c/ o
" G! V+ t$ K. i1 F5 X6 U( z
}
2 ?9 m; O4 Q" u
, w4 X, L& v# i7 ?7 P* Z# W2 m
/ h% u1 `$ o7 G" v4 K( e1 B |
|