嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 l0 t4 B" T, q0 u6 M: F
Void UPP_TASK(Void)
; A: P2 C- A5 e
{
7 ]7 d# }2 n5 y* {* N- ^/ C
3 n! r* R' v2 e$ ] W5 w
int i,j,k,target_int_count=2;
4 e9 p- d: ~6 c8 I5 u) K# j
char ch[2];
' z. ]( y6 C# R# e0 {+ Q9 y
`1 |7 s+ ?) i: m& {' J0 @/ j8 B: }
$ X; E( n1 T! o# P' S. H
4 n! e8 h8 u+ P" T
upp_interrupt_count = 0;
: z' L$ _, m7 |
upp_error_count = 0;
) s) T3 m8 I8 {% X% m
8 k( D" Q& v4 ~5 h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 |' M7 L- x3 ~" a) m( ^
// Initialize data buffers
! F: c1 ]! `: j8 {; k$ B# t
for (i = 0; i < upp_frame_size; i++)
# I' o0 F' K1 W+ P; S+ u
{
4 p* \$ v; L% v9 l+ K |
upp_buffer_b
=i;
( W/ t+ i- i8 q I6 o! r c
upp_buffer_a
= 0xDEAD;
: c1 p. s) ?- O+ t, Z1 e8 ^8 k
}
/ o* ^4 b( v: ?
* K. J1 c7 i% B) p
//for(i=0;i<1024;i++)
@. J! l; L$ }1 p6 u! j! Y4 Y
// temp
=0;
j9 p% f" @2 t6 f- V0 X0 c
5 N/ Y) e: \. N: k% J' l# P( K
//UPPReset();
& F! |8 d" U2 g% k5 Q0 {
/*启动UPP DMA传输*/
7 v. W* ~/ ^3 C/ o9 D, p) F9 Y' P
UARTPuts("upp_prog_dma_i\n",-2);
# x9 t( Y' G. Q5 `6 m. R4 M+ Z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 q( c. Y& x# b( }
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 @! S; u. y# v
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# _& I/ h8 n" H( w
* d* g* Z4 P0 |/ ^' b6 d% A5 p, ^
UARTPuts("upp_prog_dma_i\n",-2);
* m/ d' L) q8 {7 a2 P
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" J; `) c6 q' w
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* ~ j& I! l' C- L% ?
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
k1 K: D& _# _- G5 ?+ ?+ i0 d
, F* w5 c$ `- G. e; D# |
/*等待UPP传输完毕*/
5 \6 y- Y! }; ]2 ~. S! [
//i=0;
' T; e' O( t$ v0 T& k3 m
//j=0;
) T8 ~" u' F* {, s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! {$ I! t7 J2 R' m+ C( ^4 a
{
6 F1 x9 c& O* _* P) S% s& g$ W
/* 测试UPP传输的同时操作普通DDR数据
4 k! I3 J/ K0 L) w8 x& H3 J
temp
=i;
) n- l; `% d+ d
i++;
3 N5 `9 ?2 n, J2 w
if(i==1024)
% [% ?& @2 N6 W, K6 Z
{
+ p. E& c1 G( i
i=0;
: |, l$ g9 p1 w& v' T
j++;
# O9 [5 g) f7 e5 U/ k" x- w# C
}
( _1 R/ v! b% }6 }6 T' j! X
*/
0 z" N6 J( T) B V7 V
) a1 p& v1 @2 o
asm(" nop");
) g* q. E/ {9 U6 x) |
K- b& Y( i% G$ v/ O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. n& i9 h1 Z1 i! K% g8 E
}
, w$ J o6 n, |1 l0 B3 D
; n4 E( ~# V6 a+ t$ m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 p8 i2 `4 G. D, w* |7 q" t
//UARTprintf( "i=%d\n",i);
+ T2 x. G- q1 f8 a1 H4 T p
//UARTprintf( "j=%d\n",j);
- @$ r: E# ?+ ^
UARTPuts("Data mismatch in buffers.\n",-2);
, M s; s+ h7 Y% G9 k) q' I
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 q/ W5 W' b& ]& g% i7 a- R w
{
6 p: U, ~2 s s2 x3 `
for (i = 0; i<upp_frame_size; i++)
7 J m' d- N8 ^& H/ n
{
9 F; ` _8 s& x+ W' g* s& |
if (upp_buffer_a
!= upp_buffer_b
)
' r! {$ c8 Y" B$ y( E: f/ J
{
' |, s- k0 H' G% |7 }
upp_error_count++;
* }, i+ K. h9 F# o
}
D& L# n* c6 X8 {" `( M' }! N o
}
* a, Z, n/ T) h k# O5 P
}
, C/ [" O* S$ [
# k1 ?1 K1 K0 }! z1 q# B" n3 |) A
/* 报告通信结果*/
! D8 n4 \" V0 R! y6 {$ w$ w
if(upp_error_count != 0)
+ Y) J$ w; K3 Y! b. U) q1 u
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 m: z; r! ~+ o0 z5 J! N
else
! ~- c3 K4 n; P+ G2 ^; h. n, y
UARTPuts("uPP transfers complete!\n",-2);
: ?9 F' w9 ?7 V& M% @9 |
; {0 V9 A6 n! g! b) T+ e: d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) V/ [: i3 O2 I. l5 B
UARTGets(ch,2);
5 ~# d( |+ z, g1 I. n3 l% F) z
UARTPuts("\n", -2);
) ]* n. Q- _" t# D0 k& x
% M& n# }$ ^" J. Y* X( Q# c
if(ch[0] == 'y')
* L2 W% |$ f" ?' ?/ f, B
{
- m( m. c Z d2 S
/*打印全部读到的数据*/
: C/ l8 {6 L3 [$ u: R. Z
for(i=0; i<upp_frame_size; )
4 w8 X6 K- m5 y
{
- W. x) O5 r G4 _% M
for(j=0; j<5; j++)
! ^0 t: l: @3 w7 F" M G/ F
{
h7 J( |. ~) }4 c w& ^
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, ?- c& }* g1 n+ y" d: e
i++;
8 E7 \; p+ Q% K
//if(i >= 4096)
4 w$ `# g4 c4 ^: D0 u
// break;
0 n0 U/ J+ N3 F( P$ |& d! d
4 n( J) s4 j0 v& ^8 x$ x7 S
}
. Q- g) R( ]$ p% e
UARTPuts("\n",-2);
# `3 S5 J- B5 Z$ U, A' G! ^
}
$ a+ I- e: j% d% W2 M
}
1 `3 ]" h6 w E% ?4 r
6 M4 C4 L+ S0 |7 ~3 R. M6 o
}
: m( I5 h/ a0 a& A+ H9 Q( I
" ?: M8 `+ K1 o7 G7 W# i( m* }
, [+ ~- r9 K! U
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. k0 k& l" r [% M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 S3 k S( m0 ]# [/ |' ]% L. O) ]2 b
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4