标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? ) {* R+ d# p" g$ W; \4 uVoid UPP_TASK(Void); c% s4 y2 k0 {6 O5 o
{8 t9 |- Y; e, [$ X3 M3 O8 O
! U7 L' I! @8 j
int i,j,k,target_int_count=2; 8 ]+ T. {& o8 @ char ch[2]; 4 k0 ^; X6 |* P c9 y! I & T; K' X" P" p, ~) M* ]) n - y) E3 H2 F0 R$ F ! {' {5 w0 W) W9 { upp_interrupt_count = 0;5 y5 {1 n& _$ C) b4 }1 h) \
upp_error_count = 0;: J' f/ s! M/ q
$ p2 m4 V' O7 U5 x6 _' j
UARTPuts("\tResetting uPP buffers...\r\n",-2);9 o! ^! r$ x0 _. I. Q8 G. o1 s
// Initialize data buffers) `- E+ R; V6 F
for (i = 0; i < upp_frame_size; i++) 6 ~; ^* Y- t: R% x& h- E, m4 l8 l" b { ( Z: U8 N9 t1 N V upp_buffer_b =i;0 n. ~# c; \9 g' G: V
upp_buffer_a = 0xDEAD; 6 Y4 S" X6 ]- Q, d2 p }/ P7 v/ Q% Z% `5 `
$ P* y. c8 Q8 _6 J8 _, n4 M //for(i=0;i<1024;i++)% r. G2 [( _ N: q
// temp=0; ) r7 M" J5 Z4 D( Z% J& Q4 @/ f, a' b $ @$ {. |& r+ }! k" z //UPPReset(); 8 y6 x- x& j0 F7 U! N8 h9 B/ m /*启动UPP DMA传输*/5 {, [' g1 z6 ~) F; R- [% L1 _, V
UARTPuts("upp_prog_dma_i\n",-2); & w# {4 }" R! U) w upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# E8 k) w: p/ L; E5 f8 \4 |: A0 ^- C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% M/ C4 ?$ I& J |
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); 0 J. { b$ Z1 l" R& x1 u3 [( W$ j 5 l. ^# @" G' j& e" x% C3 q UARTPuts("upp_prog_dma_i\n",-2);- |0 k# d! K6 o5 A. w* X# L" w6 H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ Q" E, o4 c8 H/ N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 2 g7 h, G4 d' f! |/ P2 w) w; Z upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: t: d7 t% E- B5 F, x
' z3 W2 {& Q3 Z /*等待UPP传输完毕*// s$ U) C+ ~7 S; n v) k
//i=0; 2 ] A }& P8 n- d7 f! u //j=0;3 T3 ~, q' E o' d
while (upp_interrupt_count < target_int_count && upp_error_count == 0) `( J) q+ _0 T' N' f. c { i8 c* M" C4 T* _1 x! t
/* 测试UPP传输的同时操作普通DDR数据9 T9 O$ R7 f( B0 A/ a+ y1 V
temp=i; 0 H/ | o; x( H5 e4 b1 A i++; 0 U! C3 s5 j7 V) G if(i==1024) 5 ~ F% f; V# B( h( `! ~. m { . _: O( C- x9 q. W5 S i=0; 4 {9 R6 L; N9 R5 }. T8 h j++; ' y$ v5 a0 A4 i( u$ [/ |/ M6 W1 {3 G }/ U4 ^# [2 T; n6 K7 q9 G
*/, F4 `0 M( z% ~; @
" J4 h ]/ ^6 A# {$ X asm(" nop");" A9 {5 E4 ^' z
2 j. M. v. j9 q. M2 @' _ //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); d( I# ^) F1 M
}: r- c9 _; N. n+ m- Z* ~5 j) Y
* K* R4 y( ]8 I7 W /*检查UPP传输的数据是否正确 (loopback modes only)*/) v P, _6 ` x! e% [0 V
//UARTprintf( "i=%d\n",i); + h) @- Z8 c) }9 n `' l //UARTprintf( "j=%d\n",j); : `3 f; F1 U1 t: N- `" \) _ UARTPuts("Data mismatch in buffers.\n",-2); " Z( u8 g/ T& s+ G R4 |/ c if (upp_interrupt_count == 2 && upp_error_count == 0) 6 Y& p. j5 ~8 q { 0 E* O5 t1 Y- l" o$ ^5 e/ W' o for (i = 0; i<upp_frame_size; i++) : K, m+ C3 R4 Y! M& `. C { 1 g$ G/ o& g1 y/ j if (upp_buffer_a != upp_buffer_b)6 Y8 m6 h! i0 W
{ # R1 s* n9 c- v9 e, Q upp_error_count++;, X0 n1 `1 u, f2 e
} 8 W/ p8 I8 \8 P& N4 S/ C2 a! k } " N' M3 T/ Z q9 `* |$ _ }3 C# b1 w6 W2 X
0 R1 h6 C* G& K n: {
/* 报告通信结果*/ ; C z P6 U) p. e if(upp_error_count != 0)5 T: V# d3 o& ?. F6 F% S
UARTprintf( "upp_error_count=%d\n",upp_error_count);/ Z: f- ~7 C# q% L7 C) _
else& t6 x/ u H3 l1 L
UARTPuts("uPP transfers complete!\n",-2);/ ^* y/ h( {& S. `: c- E: _
7 X3 w8 f$ {2 v UARTPuts("Do you want to print all the data?(y/n) ",-2); 8 |' G) ]0 N: d l8 M! c UARTGets(ch,2);4 I/ u: [) U6 L) `6 ^
UARTPuts("\n", -2);/ U1 Y/ @; x z% h: M2 {' v