标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ P$ }" c& \# z% n4 a& P5 | Void UPP_TASK(Void) 4 ?5 t) U0 N+ U) a( V{ * H$ R- j. c5 e8 ]1 j$ a 2 Z7 X( t" f! i int i,j,k,target_int_count=2;5 |* @8 D T3 G+ O1 f+ T- ^9 F ^' S
char ch[2];7 c4 r% G# u0 o
[, P5 ?7 e- O- o5 [1 j, v6 W* K5 A9 `+ l) {( j
) m. r E5 ?8 B. I% h" e upp_interrupt_count = 0;! }8 U1 |8 X8 r
upp_error_count = 0; 1 c# x. @% `2 g; { & Q+ d: K# p" U+ }, ^; [ p! Y7 o. w @0 p Q UARTPuts("\tResetting uPP buffers...\r\n",-2); $ @4 A) h a. ]- P4 m1 i: Q+ ] // Initialize data buffers) ^; y5 V! g* f# [
for (i = 0; i < upp_frame_size; i++)0 k8 }) C, h D1 |5 D' B. k
{ r0 W0 F; T. r# ` X$ G) M& B% n upp_buffer_b =i; , {! A5 \% y5 T( n: i' u( Q upp_buffer_a = 0xDEAD;5 E/ y5 C+ Q& F; [7 c6 G2 _
} ; X* A* Y6 p1 N& a/ N% X2 }6 w" x3 P6 m" c* N& ]
//for(i=0;i<1024;i++) 7 R: g W* d6 A2 v; A // temp=0;! Z; w; T0 g/ S C$ N6 ~
m& U2 ^5 Y5 ~
//UPPReset(); 8 @$ \3 n! G6 y1 |. e& Q) l* h /*启动UPP DMA传输*/( V& K$ d( Y: V- L
UARTPuts("upp_prog_dma_i\n",-2);7 B9 h8 v3 @# [0 e! ~" a: H
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. n9 [+ r7 a: w+ C; j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 x0 q6 E1 N* m: ?7 s" J0 p0 _
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); # {; S6 y I, D L# p ( h, F4 T9 }0 {0 k& P UARTPuts("upp_prog_dma_i\n",-2);9 {) w/ D2 w) S! j; p. n: q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; # N. P% ~; d, Z f, h9 q7 s upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& V" o% s9 r; L) z* K% R: P$ p) |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( m8 ]" }# }9 k+ \% e& A+ [
7 a+ ~0 j# _" a/ F2 U E: r
/*等待UPP传输完毕*/. X) K/ ~; i$ F1 Y
//i=0; # G) l% `* ^7 H //j=0;! C, \. y s- r6 `! u1 v! G0 {/ L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)( X5 ~ J) n0 f5 b$ g
{7 H( k! j: Q7 K& v* q* `! }; Z* E5 F
/* 测试UPP传输的同时操作普通DDR数据 0 H6 B0 F9 b, c! X: M temp=i; 6 V' @/ R+ p7 C' Q6 t) d: V8 i i++;: V8 K1 f& Q3 {3 |6 W: q
if(i==1024) / g! i% T& t3 @ {0 ~5 F' l7 g, ^8 g7 }
i=0; 2 A/ ^1 Q" h" s; T% |. F7 d j++; ' T( g4 b' M! y5 `1 E' x } ( [6 a: @$ m4 Z4 j2 f */ 9 }2 z3 S' {4 @7 {5 j2 O 8 h( q7 D) X* A* L asm(" nop"); " n$ {! A t1 o5 z# D2 A' F% v; m; W" Y& g3 k+ i* r
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 1 H0 u4 I7 A6 N: n: v, g, o/ i }' m5 v. f: T' h p. u4 b- z, [! g
7 U+ v( d" t* a! \3 G' k8 W/ _ /*检查UPP传输的数据是否正确 (loopback modes only)*/5 Q* `( e# l& U+ k6 C b! I( `
//UARTprintf( "i=%d\n",i);5 ~( G0 _! r: O% o* n
//UARTprintf( "j=%d\n",j); ! p/ d/ P0 U4 m UARTPuts("Data mismatch in buffers.\n",-2);$ E/ ^" j- B7 `$ D0 P. }( ?$ a3 E
if (upp_interrupt_count == 2 && upp_error_count == 0) 2 r) z `* E9 Y) O! e { + W s, @4 g! c7 U9 G; I( u/ j8 C0 o for (i = 0; i<upp_frame_size; i++) 5 G* P! n$ m/ J) ]6 D {$ Z0 V0 F, j4 w& `& p) t
if (upp_buffer_a != upp_buffer_b); @ e- A, ], F* W
{ " O( B4 \! M/ V upp_error_count++; / R* b2 F1 ^ O# I. ^ }5 B2 F& A6 [0 ^, T. G( R
} ! k7 w' ]$ n* W } * c4 V0 e+ h" g; O" G7 v: Z) I% H% R( `6 J! L2 Y1 w+ t: i/ R. B/ |
/* 报告通信结果*/* ]0 g; |2 q3 B0 i2 n+ M ^
if(upp_error_count != 0) " Z4 n0 y0 c) Z$ p8 H+ ~, x UARTprintf( "upp_error_count=%d\n",upp_error_count); 1 e, }( l3 l1 o/ R5 H$ f2 @ else + V2 V1 D6 q B) s) p2 ] UARTPuts("uPP transfers complete!\n",-2);# z0 k0 ~+ F, m" z0 ^6 B# S6 Y/ ?; v( a
% D0 e$ i2 h# ?3 z S UARTPuts("Do you want to print all the data?(y/n) ",-2);. J: a; d+ D6 ~, A
UARTGets(ch,2); 6 q* M. m+ e- e# U6 y; v UARTPuts("\n", -2);% u; m% W4 L/ _5 C
- d' l: T% M0 @5 ^" t if(ch[0] == 'y')/ a" k: d, m& w4 d* v& r
{ . V9 s6 c( ~0 x /*打印全部读到的数据*/$ m) P8 l- K' M m/ C) @5 }
for(i=0; i<upp_frame_size; ) : k! P( f/ P9 P8 y8 X+ p {1 z4 u, Z# c+ j& M ?
for(j=0; j<5; j++)( D" o/ {! ~+ F2 e& Y" W5 r
{) I( H# n$ Q; w, P& k P! B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);% H! `* y" V$ E# N3 _ P
i++;9 ]6 A' c- C( u- T+ r. k
//if(i >= 4096) 9 U- _: K% t& `3 ` // break;! m: Z+ }- M* h
( X2 i p0 |; e# x& q V( p }* v( g% K' s0 w; W) K3 r& x
UARTPuts("\n",-2);6 D- J. q! M9 m0 F8 j9 g% W
}6 i) W4 m2 L7 Q# _" Q- D" e
}7 W; A7 Y0 _ f. ~9 i
& k' ?, U4 ?/ W1 x- R5 C}& v( _6 ?7 r2 O5 J2 M: a
3 d n8 j% T* n6 u1 w& E7 C" o5 s$ g' K# u: Q6 Q- @# v5 ~ 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。2 c+ e7 v) R4 I' X# f 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 9 V L& b) G I4 ~6 T: i: s1 U; s" ~