嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 I, A3 G) p0 k6 j
Void UPP_TASK(Void)
) r: M5 ^3 _ O2 t' ?0 F
{
' C6 i! R; _2 A
% d- A+ M# q2 U f4 `8 a
int i,j,k,target_int_count=2;
1 y" B0 h' r+ h. E! h7 L; K
char ch[2];
& w$ y }, O5 b0 \5 N
! t; w( P+ h. ]7 L
9 K& j4 g R8 L1 Q
7 ~4 r; N& l7 q4 L9 P# l$ _
upp_interrupt_count = 0;
! Y6 l" t8 I. W' C& m* v! L$ B
upp_error_count = 0;
1 B$ O5 b4 Z: ^: y: s9 U
6 ?/ q9 E# ?+ M. w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 s* {& \* h, w; e- b
// Initialize data buffers
+ k0 V7 _, z' H8 _3 E3 O* Q
for (i = 0; i < upp_frame_size; i++)
6 a" \! j% a7 h0 Q% a# h
{
+ ~% F1 G1 T: v! b9 d
upp_buffer_b
=i;
0 D1 f6 x) P. N! \+ F
upp_buffer_a
= 0xDEAD;
8 p# t" ?! M1 e7 b
}
4 G& s' H. p( m& a8 K* Z- S9 I
% o- _' H- }4 f
//for(i=0;i<1024;i++)
/ X; T0 S3 ?8 {, [2 ^7 @2 b
// temp
=0;
5 F& o' b0 e+ G& A1 ~
' b+ E( J9 G5 W# R! X2 H4 G
//UPPReset();
! J* F7 R3 a2 p& f. ^. N
/*启动UPP DMA传输*/
4 D# P- V( O" D7 h$ H/ g
UARTPuts("upp_prog_dma_i\n",-2);
v! B( I W1 \7 U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% a/ D7 ?, J. |) d9 O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- y5 Y3 g0 d$ Y% t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ q5 n j; Q {6 ]; F
3 E' s* @+ |* b$ R L
UARTPuts("upp_prog_dma_i\n",-2);
( L6 Q, t- J; d" }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ C/ C8 V& c& P' V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- t3 ~$ g3 |, _6 z3 d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
z2 Q; M! a" q- F/ R
2 N6 z4 ~# ~8 y/ S8 }8 `5 z& f
/*等待UPP传输完毕*/
* N$ p2 L0 S+ U' y2 r+ t
//i=0;
; y6 i, l, t2 x! K$ o, u, G% f
//j=0;
T9 B% J2 g7 l7 x( @' G, P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! h/ k8 B( e/ \4 D4 C
{
& v* F, W* A6 Z& g7 A
/* 测试UPP传输的同时操作普通DDR数据
) Z' M# o2 ^1 P. N& V
temp
=i;
, `5 ~6 P8 A2 V9 A0 s3 Y. h1 ]
i++;
0 D; Z& d8 \; |) |8 O
if(i==1024)
: r" y0 y7 V2 s9 t- {/ _4 n
{
4 n7 z8 z0 X3 _1 d
i=0;
+ }( K* U4 J1 ~, n: b: y3 G
j++;
4 [8 P: b' P' g7 v+ s( f- A
}
8 Z% e1 c: |8 L( d L$ t
*/
) n) F/ H" L: w1 B- {
; y: u; }) M; X/ o% l
asm(" nop");
# K& O" C3 q) V' \0 U* \* K
8 k B9 K- ^' f6 Z# P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 a) T/ l- G' [1 K7 S2 ^* g$ z
}
1 A3 H6 l3 v' ~4 M4 v4 Y$ P& @" L
- B* r1 |* R, F3 P. o7 W1 q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 ?7 u# y8 e) l/ x$ L. G$ _4 w/ k' T
//UARTprintf( "i=%d\n",i);
8 |# S, a8 \ ]
//UARTprintf( "j=%d\n",j);
* j8 E( b C2 M$ G$ X
UARTPuts("Data mismatch in buffers.\n",-2);
8 b' i0 W! b0 p, A# z- ]4 Q _4 T
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 T/ o5 a6 `1 g- b. j+ ~& e
{
. x# b9 x/ J( h/ \4 ]) J
for (i = 0; i<upp_frame_size; i++)
5 y( g* E( K4 L. L' ?$ u
{
( Q1 J% T4 }+ v4 k/ C7 L- N
if (upp_buffer_a
!= upp_buffer_b
)
2 F) b; b' Z" i: r
{
5 D: @7 S# S! P% _& l* p+ F8 F
upp_error_count++;
! M3 R, @2 n4 p) l/ q4 f# Y
}
( ?9 S# O! d: T' E
}
( _7 B( S5 @& Y5 o! ~
}
3 s3 H7 F* \3 O# C6 @6 `
8 R4 L% |% e- \4 e
/* 报告通信结果*/
) x. X r. Z" |/ ?" H! Q
if(upp_error_count != 0)
0 k" C: |0 U7 O9 J, y3 G
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 R6 s# \' P& T$ |: j
else
0 r q2 P5 e+ T% B+ Q
UARTPuts("uPP transfers complete!\n",-2);
* K. K: q- x1 @6 U* G2 [
! ?* K; ~: Q& Z, C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, |' b( T' v% j$ S/ ~
UARTGets(ch,2);
; x! \ f8 z) G1 c, T2 ]. T9 C5 E
UARTPuts("\n", -2);
. O! _ O6 @# i8 E
3 z* O! e2 R+ n0 M
if(ch[0] == 'y')
$ d* D/ T+ S5 s: @( R
{
$ k8 N6 G6 W" U* W
/*打印全部读到的数据*/
b x/ L$ D/ [: z
for(i=0; i<upp_frame_size; )
/ T/ p& A9 v& c+ L b. [. O0 x
{
, x+ p; K2 b2 W: m2 g3 m/ S# s; Y
for(j=0; j<5; j++)
, ^0 G* s' X6 r) E
{
4 ]1 r- a$ X- C. t0 M3 S# d* R0 Y, V
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# t$ O. e7 ` a, u
i++;
& E. p) v: X# D. T a
//if(i >= 4096)
# S/ e2 `2 [, u( `. u/ T
// break;
( f/ W* b4 y' Y: a6 V$ f# b2 R6 f
8 a% u9 H' o, b: y% M( b3 S
}
9 t; L: f( M# h% x9 |; n# L9 d
UARTPuts("\n",-2);
! _2 ?. k z' v( b: l8 S! |
}
* \- d3 p# F$ b, r% s
}
: ?4 c, u3 V& L8 R- w
5 |' b* P- O _" p1 ]
}
, \* g8 s7 t- i8 T; R1 ?
4 @# @# A% a$ {5 X8 m" w3 p9 f
5 g/ u- i- B" p, E" q/ b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, D- j A# Y! E$ F3 {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 ?) ]7 B0 S: ^( h
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4