标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? + ?) {5 e% R0 v9 I. l0 PVoid UPP_TASK(Void)3 s8 B2 k- l( U
{ % o/ p5 R9 F, S' v/ D* x N* Y/ D. `4 W6 R7 r5 J3 s int i,j,k,target_int_count=2; 3 S0 S' `% I" Z K5 u$ m& p. w char ch[2]; 0 |# K5 l' }& {! s) E M; p3 G# I7 G
2 K4 D j0 {. y
3 F" {1 B5 z$ K; X upp_interrupt_count = 0; 4 n) f7 v; O( v. p" n7 S6 f upp_error_count = 0; $ E. Z+ l. K) U+ t8 U: J2 g# R 7 e1 H1 @+ ?) Y6 B- D" q UARTPuts("\tResetting uPP buffers...\r\n",-2); & L( h: X! ~2 m( }! F // Initialize data buffers1 n) `& J% Y/ u3 G. z* ^
for (i = 0; i < upp_frame_size; i++) 1 g. r o. ^8 Y9 @% s+ G* Z2 ? { # | L0 A9 B( p" ]$ C0 ~ upp_buffer_b =i;; H! B ?2 Z% k9 Q
upp_buffer_a = 0xDEAD;) H8 a, j' @4 ?' F6 R0 S
}" d4 v" J! D: M/ v6 [
# O" s5 \+ q" ]3 N3 J
//for(i=0;i<1024;i++)! k2 w. m) ^) g# ^1 L7 f
// temp=0;1 N3 z6 r; a; K. c
% g; g- g2 B B5 i% C1 I) n! R1 v //UPPReset(); 5 C0 \2 a6 w# x6 D/ B" J0 d5 m /*启动UPP DMA传输*/8 V, E: y! x3 s9 g& L
UARTPuts("upp_prog_dma_i\n",-2);$ T1 e j7 `; [0 p$ j# r' o
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ ^* B6 [, I* R, k0 N; A! e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); - J6 j, v% p' Y( u% a- b' n4 J- [ upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 W; ~' P9 O" E" b9 c6 p# m
; p9 M' J6 B$ [2 r+ o+ w( l# {' i' Q3 b UARTPuts("upp_prog_dma_i\n",-2);& I t) w% b5 j- o9 q9 L6 F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: G; H! J; H! s& B0 a. g9 Q& i; ]
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); ~7 P1 _& N: g# j! u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); 3 ^; j( e% D& ]; [ 8 N3 G8 W* m9 E6 R. g9 w /*等待UPP传输完毕*/4 H- Z0 H) ~) @6 j: V- s4 H: u
//i=0;; g1 D1 C e7 }, J
//j=0; & L! }5 ~6 X9 O while (upp_interrupt_count < target_int_count && upp_error_count == 0) 8 J: q4 x$ e- ^4 p5 x4 @ {0 q0 c& s. J) j( T, x5 ]- r: T
/* 测试UPP传输的同时操作普通DDR数据 1 z/ ?9 [3 p/ i temp=i; 0 X3 j' K- W# r1 C7 r( H: g, y i++;, v6 R% r( R: `$ U) t
if(i==1024) ( {8 J$ X2 L$ [# V! q9 P {/ X2 Y! N: R3 ^2 D8 d# r
i=0; ; v/ L2 ^ G# d6 Z j++;) d3 S: x8 T# z$ l. g
} ( X/ n6 m7 S2 \7 B/ x7 w l# l$ z */ G9 Q/ q! F8 W6 ?, a/ s8 L6 _) _& [% @* f6 B' S3 g
asm(" nop"); 0 V6 Z/ C9 ^, e$ [% S' B/ L " _, c$ c, {! l4 ^: m& M" W$ y. m //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: {) R+ B2 T9 t; Q. c1 e
}1 N& s9 L8 b7 [% d" R4 o$ q
5 U: i% Q& n3 p( t /*检查UPP传输的数据是否正确 (loopback modes only)*/ d$ x( m3 c8 I' W; B
//UARTprintf( "i=%d\n",i); 1 S( w" ~9 l# y& F: D5 o //UARTprintf( "j=%d\n",j);5 |: h, u5 U: o/ P1 t; S( R
UARTPuts("Data mismatch in buffers.\n",-2);4 ]+ w. d, K' Q% d& O1 t+ C, |
if (upp_interrupt_count == 2 && upp_error_count == 0) ( }# h, j k0 {$ Y' q { " J% f4 S6 ~0 ^- i. g3 N; p for (i = 0; i<upp_frame_size; i++) 2 L) a# L2 @5 C5 n) n7 s$ [ {0 v# y0 o2 C2 A! W
if (upp_buffer_a != upp_buffer_b) 1 p* F" S% o% R# W {! p% W7 Y+ V, c
upp_error_count++; 9 Z( F( b5 I/ g' {( V) h } # |, Y& g2 f: r. @ }1 K/ l8 D; o5 q
}( q3 Y! u$ J7 N- }
' x: h: J. q R2 L" m /* 报告通信结果*/ 0 D- {! j- M S. j: J2 c if(upp_error_count != 0)3 l7 q, T b. t
UARTprintf( "upp_error_count=%d\n",upp_error_count); & k3 F1 a* h, v) ~2 b else + n3 t+ {; D' B( b* A' f# i- b& U; J UARTPuts("uPP transfers complete!\n",-2); ?8 n0 ?* G3 x
+ L0 A. K$ ^0 | P# c( `6 y0 v. J UARTPuts("Do you want to print all the data?(y/n) ",-2); 2 B' T) h! b6 ]5 E+ }* [ UARTGets(ch,2); 5 |/ x7 ^" u: x+ o UARTPuts("\n", -2);: C% j& R: _2 a4 T6 t8 M0 A
5 @- [! c8 ^6 Q7 ^6 n2 @* d if(ch[0] == 'y')/ Y4 n+ M# Q7 ^$ X7 y
{+ A( O' H/ Y! [$ L
/*打印全部读到的数据*/- l7 J% y( Q! h0 h0 ^
for(i=0; i<upp_frame_size; )# d8 N4 Y6 q& A7 z* ?! ^! d, }6 T
{) x$ K: {" F4 I
for(j=0; j<5; j++) 6 I; s+ j1 B1 S B+ n {: ]3 _* i3 T0 a" ?0 t8 n5 e. k9 K6 w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);! D+ b+ x$ p$ ~0 }& |* t
i++;( P4 Q7 T* [. a0 B
//if(i >= 4096) 6 D) |# H7 u! q/ a // break; ) X. @/ X4 p) t6 c/ _& L% T4 v; Q( {1 a! {8 v2 x
}' R: S% H/ `9 t
UARTPuts("\n",-2); 7 P$ q* S$ g" j } 0 i" [1 s; W# Z/ h B/ u: Q }9 P, S$ F. o3 Q& F, f6 j" W
/ \$ h5 _8 e8 S% j8 _; D}9 x \; T9 b2 W9 \% Q0 R+ N
5 g% |' C. D3 F7 T) x3 Z2 f * c+ s% c9 i8 l6 y作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ T) ?- D# {' h; `- H 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 / y3 T3 J% o( a