标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? 3 D! g; R$ y" h1 l) wVoid UPP_TASK(Void); m8 U# f- a4 i
{2 B" D$ X5 d2 W1 A0 Q9 \ P- G
4 O8 H- t9 C3 s% |; t; t# s& b* M ^" k
int i,j,k,target_int_count=2;- Q1 d- k f2 X* b4 H: d
char ch[2]; : z, ]' M$ e4 J- a- X + S. @7 {% h/ }$ g3 _6 p1 h+ v, X, B/ e1 I# ]( N3 D9 N: y
1 Y1 d& P6 D+ h W
upp_interrupt_count = 0;- c5 N: [3 ?6 g9 k
upp_error_count = 0;, s2 j# Q/ f U2 q3 e9 \
; G- ]4 E- L5 E5 ? K7 b: @7 j
UARTPuts("\tResetting uPP buffers...\r\n",-2);/ ~* S* l3 X- R
// Initialize data buffers 0 H0 F, r& x4 Q for (i = 0; i < upp_frame_size; i++)+ z' `$ T; v" a% f
{ 3 N: J! q% l* {. n/ u/ A( e upp_buffer_b =i;6 y: I9 P' a! c" k. v
upp_buffer_a = 0xDEAD;; M" H' _ W: W; Q6 s. f1 V; D
}4 B9 v3 i6 v2 s8 x& l
% R7 r2 Z, c% h5 z( ? //for(i=0;i<1024;i++) 6 ?$ J w: T8 M% k // temp=0;' c2 T0 u! B; d" z) G5 q
' R. B% L. h7 z: Z" E9 b
//UPPReset(); ; r4 W' m( k% u- y% [9 ] /*启动UPP DMA传输*/ ; G$ K4 z, B6 _1 _0 c) Y UARTPuts("upp_prog_dma_i\n",-2); 9 C3 |* a7 O9 w h- [3 y: c upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; 6 {% L1 `4 A9 e4 S upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; |/ [" y" t, Z, h! r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: z" y* t2 I* }& I5 l& Y' d7 W
- c( ] }* m2 O/ f% V6 n
UARTPuts("upp_prog_dma_i\n",-2);- [; T1 |7 @6 K; u- q4 g& n0 [: s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; . W0 l8 h0 S8 Z1 U8 C* N; f9 A upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 ^3 `$ B+ `' G: s, c0 n% F
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); 3 \. X$ @. e9 l! l$ [2 E . f5 ~8 ~; D. b* Z0 z# Q) M /*等待UPP传输完毕*/ 9 H) r3 f1 e- g: l //i=0; 6 R- l( y3 A4 O x0 Q) c& e, k5 h //j=0;/ G5 e: }$ v3 J; F0 ]( }) C8 ]8 j M
while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 f* ?: @3 `) b
{8 i! m. _9 M* v( {( p
/* 测试UPP传输的同时操作普通DDR数据 $ V$ o2 x) W0 U temp=i; 8 j7 i1 K) S5 W i++;- _0 J7 m8 Q! p& D1 Q8 d4 `
if(i==1024) + H4 o5 K; n' _4 r, O* P { ; Y% G/ J: w6 a% I3 s! w) ~ i=0; & ^* G% `% i5 r j++;; v& a8 _/ X2 p- M6 p
}4 \6 } U2 ~1 w+ Y) B4 F4 {9 P
*/! n$ p7 A: p7 _& c) u6 T& |! F( Q( C
& v+ g( v4 ^- C4 r asm(" nop"); 8 S; u. C' c f' b4 z" ~9 h4 U& C& E; U) V6 x( w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 3 {: r, R0 W. @1 b }5 J0 r6 W+ G8 E3 Z
0 L2 Z/ S* Y Y3 H; r
/*检查UPP传输的数据是否正确 (loopback modes only)*/' S- w, b" u9 ]
//UARTprintf( "i=%d\n",i);/ {0 F6 Y; k, n
//UARTprintf( "j=%d\n",j); K$ Z. p' j0 }* v/ W* z UARTPuts("Data mismatch in buffers.\n",-2); : B2 Y2 ~. j9 x: y if (upp_interrupt_count == 2 && upp_error_count == 0) # k! i1 f5 [4 Y) `. z w3 ] {- K- r( a) t* ]: z
for (i = 0; i<upp_frame_size; i++) c# _$ q( o/ C {* z8 M! D1 [1 S
if (upp_buffer_a != upp_buffer_b) 1 W+ E' {1 o# F7 Q& V- K2 V$ I { : ]: F4 D. d+ L7 B/ }+ x upp_error_count++;) d }. R! l7 ~ ^- p1 B6 w
} ( x3 i! ]9 x& R8 P: L } 0 `4 R( e5 \6 r% H, g Z5 @* m } 8 [5 k+ W/ k8 c% k; N; F. o: ^0 Y% c% o9 ]
/* 报告通信结果*/" t' u- e& d- [7 A. o3 } X1 A! d
if(upp_error_count != 0) ( [# m5 L& ^9 P6 Y; o4 s UARTprintf( "upp_error_count=%d\n",upp_error_count);8 ~6 x# L$ A8 `& o
else, R5 E/ a0 [, ~ q! J1 M
UARTPuts("uPP transfers complete!\n",-2);3 {) P, V* z' c$ A5 N4 I
* R4 J$ j0 B" |* m, C/ i0 c UARTPuts("Do you want to print all the data?(y/n) ",-2);/ X0 h D3 X/ V5 N
UARTGets(ch,2); * ]+ G3 E3 U! K. D% J UARTPuts("\n", -2);% a. |2 v9 |9 J; l: v
6 q1 P3 D) o8 N1 R& v if(ch[0] == 'y') V& t. S# \ p- ?. J( `/ u J {) Z: Y. N6 J3 r7 @6 \
/*打印全部读到的数据*/ 1 E1 {5 S& A1 l- X" b* d for(i=0; i<upp_frame_size; ) 9 g- m0 I- e$ U ]2 l {: i+ k9 c3 R% g$ e% ~
for(j=0; j<5; j++) 0 E6 X3 d/ }, `% L- s {4 o. v6 X" ? @4 o7 J
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); 9 Z0 @' r5 \6 U6 z, W5 R i++;2 \* W3 d k; _) r: W8 @
//if(i >= 4096). I& t% {9 ^0 X7 R0 i
// break; ' p5 M2 e- D1 K+ r% r$ s9 {2 j; C 4 `5 _- H/ x3 Y } ' E3 x% _ m- T, N u T, S UARTPuts("\n",-2);; a( X' G. t/ F
}# K8 Q3 c! s9 E
}* p: F3 m6 D* R; H