|
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 ~; K7 _1 |0 R+ A* F8 CVoid UPP_TASK(Void)
- h* T4 b* [ A9 S4 t{" A) A$ L0 ~% K' A) P! n
; \7 K" i3 w! s7 Y" M/ P
int i,j,k,target_int_count=2;4 P* S; P6 H9 O* X7 u! k, a5 f
char ch[2];
+ e8 l! T* h' R F* h' ~. ^8 H# ]" N( L9 [. @. }" V
; C: \, V+ X t$ E+ o
: X% ?% B4 p( S' J- V/ p e' n
upp_interrupt_count = 0;- V5 X9 Z2 H6 _5 A* N# |
upp_error_count = 0;
3 e3 y( L( T$ F
. ^! L5 z3 v2 Y8 [% y* s* U UARTPuts("\tResetting uPP buffers...\r\n",-2);
. j) @, t7 f( z. G$ b4 C // Initialize data buffers% `$ E' D! X3 \% B$ E
for (i = 0; i < upp_frame_size; i++)1 }# i" X) K9 u7 g* l0 ~
{
% h: T0 L* {5 \5 k upp_buffer_b =i;
/ Y- @" g2 @) X3 z# x( h upp_buffer_a = 0xDEAD;* P& M; p8 f3 B) C7 n: T
}! R$ w9 P# x5 ^
1 y* V, {+ y" C/ A. D //for(i=0;i<1024;i++)) h$ p2 i2 _% J2 H. a3 k
// temp=0;
: R6 u3 w7 ]; h: n4 r. `( P: @ Q0 n
//UPPReset();; M: e+ s6 C1 E
/*启动UPP DMA传输*/, P) B6 ~' S+ Z a& l0 q3 |" R
UARTPuts("upp_prog_dma_i\n",-2);2 \( o) f+ b+ ]9 I% t% k
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 s8 R- v* A" G- ?8 | c
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 Q' R4 U6 x# |* t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# f1 `6 B# {9 U I5 x
$ I5 \) _, Q! g- N" [- j" F UARTPuts("upp_prog_dma_i\n",-2);
+ J7 _2 q; N% m upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;$ L3 x k3 y) A5 h3 q/ L
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 K9 e" h, E) @2 m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 P% a% f, d8 A( ]+ e# J& Q. ?, O
/*等待UPP传输完毕*/
" @8 y& ^6 l6 B& s9 } //i=0;7 a- ~# l; k$ [ S, p8 N, o+ T
//j=0;; H) B& P& ~9 x9 Y$ j- }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 }: l- k( u, H- ?* ?2 `# [' m {
( x/ T* J. ]6 E/ _( A /* 测试UPP传输的同时操作普通DDR数据
7 X: A* n* K1 |' f# E temp=i;
" [7 J' R2 r2 u! s4 y9 H; g i++;& {" l X |' _0 t3 O! k
if(i==1024)6 V1 U" {0 y- W$ r! g
{
( i% M! U* a7 [) Q i=0;
% M0 N" ]( M4 H. C1 e) Z j++;
; p/ S; C. f. x2 d; r; \2 m& q* _& _9 a }" z& }- F2 R% K/ h* o0 a
*/' Y) R: K( O0 l
, G9 S, T7 _3 U. b0 `& @2 N- v asm(" nop");
( ~8 D, H$ l! U5 e+ \5 H4 x
( O: W& t0 [6 N' F# X L //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);$ I& d$ D3 e# b
}+ ]2 K$ T: |3 m9 L
: O2 h6 p* Y2 k: Z /*检查UPP传输的数据是否正确 (loopback modes only)*/1 k- y/ H2 t& Z R4 |
//UARTprintf( "i=%d\n",i);6 M# d7 o' H b9 _+ W
//UARTprintf( "j=%d\n",j);& Q* J6 k5 f: E2 } m1 r
UARTPuts("Data mismatch in buffers.\n",-2);- k- R( k+ V2 I* Z& u9 r
if (upp_interrupt_count == 2 && upp_error_count == 0)1 t+ C" C3 O6 j
{
. F& p% a% o; s for (i = 0; i<upp_frame_size; i++)
$ B J( N5 L% A- u7 D {% J0 F8 X& L0 d
if (upp_buffer_a != upp_buffer_b)
% w# b+ G }6 m( P- j1 e {
; i& z0 [7 z# t6 N upp_error_count++;* M" X+ V: b' J4 B6 ?
}% S; r- ^: w y; D
}7 y; j" g6 t% ~# A
}
; e2 `0 U2 _6 I. ^& n- X
r# a8 }" ?8 _1 N% S& C! Q /* 报告通信结果*/) p! E8 R5 A6 n9 L
if(upp_error_count != 0)
3 |7 M8 A ]& m UARTprintf( "upp_error_count=%d\n",upp_error_count);' z; H5 z/ `$ M" i7 c$ w
else8 w) f; M* G( ~: Z: v6 D
UARTPuts("uPP transfers complete!\n",-2);* O0 I* a: v8 L# U9 {& @' D8 S
% `$ f6 W/ ~* x3 V+ Z7 t
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 q" c, @! l: B& R9 a UARTGets(ch,2);
2 C* Q* G+ M1 b( A% G8 g1 W. { UARTPuts("\n", -2);
; d+ r( V# M: g# X: }. }. [- s4 i$ a; I
if(ch[0] == 'y')
" j5 M2 x' ?% u0 U {: o9 Y7 j9 K( V- N6 A6 q+ Q) V
/*打印全部读到的数据*/
! y, O. V: U1 ?, X! h$ v- [9 x for(i=0; i<upp_frame_size; )4 L! \$ C H2 a
{* R8 d3 U4 y2 |2 o3 S# k% i6 U
for(j=0; j<5; j++)* p( f2 N( S0 n: S) W
{# u" r0 G% l# R+ \/ H; `0 ~, Z3 f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);! M \0 n9 K( U ]
i++;
" i. X* g- Q5 Y" W' ?( b) I //if(i >= 4096); d3 f: e8 \2 t) v8 d. X1 z1 P
// break;" J- j# J6 p! C
# X) s T- k/ D* P" n- ^6 m
}
t& F# d) v. D UARTPuts("\n",-2);- v [0 C3 {! y% A9 R
} {1 K/ |. Y' l5 A3 l. p* Q
}
/ U2 w& Y% F. B2 g' G& i9 J0 E4 x8 o6 P. A
}5 \6 `, I4 M) m: h+ W/ F
* A! Z+ p; d6 \0 a8 W4 C
" d/ `) M0 M- r [* M9 j, z
|
|