嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; G4 Z: e4 O. D) }$ k0 E0 `+ o
Void UPP_TASK(Void)
& [# \2 }1 W% x& h- [: t5 B7 u
{
( ?& `: k0 P& k j8 E
" k7 h: ~6 [: A1 m
int i,j,k,target_int_count=2;
2 g2 ?+ F1 p- W, Z$ V: n
char ch[2];
, l: T4 d2 e1 U, L7 M" Y4 _9 h
! `) O1 p/ V% J4 _$ B; ~2 M% N
8 {7 k* Z; V. H
7 B$ i. f1 Z! W7 D4 `
upp_interrupt_count = 0;
+ j: e$ X5 Y v" A" U: ^: R
upp_error_count = 0;
; t# M1 O6 B$ u8 x3 R T# u9 @2 r
& h0 Z. p7 ]3 H+ R! i" N- }* ^
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ d+ {* q! H1 P2 E( n
// Initialize data buffers
8 x+ q, u) L& J+ S) z3 F
for (i = 0; i < upp_frame_size; i++)
1 s* t* |- w7 a
{
6 L$ n( e/ c y( u4 z: |
upp_buffer_b
=i;
; P, U6 p! Z4 n5 `
upp_buffer_a
= 0xDEAD;
& s- Y+ P+ q: j$ Y5 z
}
+ o# N( j3 }8 D; \6 G# ~! V& A
/ o& k' d6 F7 S7 }
//for(i=0;i<1024;i++)
3 b& o% N) ?; U, [
// temp
=0;
, c, ?4 w& [6 b* f6 K0 u& u
h4 ?* Y8 z' O# k7 t
//UPPReset();
1 }, ?- t0 F$ ]* K
/*启动UPP DMA传输*/
1 y2 L1 I8 ]( E6 C& ]: D
UARTPuts("upp_prog_dma_i\n",-2);
1 G `0 C$ r/ M' f) y0 z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ E8 a8 Z: A, |. D" |* z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* j% q: v/ v$ M- }" ~1 H0 o! ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! I9 S9 g) B# X( }1 Y' [' L* e/ O
, ]. Y8 M$ b! ~$ C2 q3 q* P0 v
UARTPuts("upp_prog_dma_i\n",-2);
5 A6 f3 @* `& A. q- H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 D+ D( Z. [4 M: s
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 ~. ?5 J& z- f1 M9 ^2 J; K3 l
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* ]* ?, O) r! r" w9 w
: k8 _ J/ x. S/ O/ R, g& h
/*等待UPP传输完毕*/
. w7 z1 Y5 Z) U# E
//i=0;
* @) e' ? K! m% s' z" {( B
//j=0;
8 G( I5 r% G2 l5 V. [$ F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! }. N) f9 ~: h, U) q' [8 y$ P; Y. n
{
' a+ R9 r# b+ }" h: b7 o0 J
/* 测试UPP传输的同时操作普通DDR数据
6 A5 D+ m- t: i0 _! |) R
temp
=i;
, k( R, A- B1 P! Q. }) L0 g! D
i++;
6 e r6 e" R/ F8 E7 j+ q7 @
if(i==1024)
' j2 q% V- Y8 G: ]' |
{
" i8 D8 U& z1 S
i=0;
5 v6 X' ?! Z" n7 W P2 y
j++;
3 S* W4 c: ^ H Q
}
* i2 B3 k2 i" L. u$ c E: ^& ]
*/
) \% _1 m7 A0 D/ X8 p9 l* I
" e5 Q$ e1 g4 ^" N; G3 W
asm(" nop");
( J$ ]1 V7 c4 M8 B% r- s
- I7 I. b7 U9 u/ |: B, W1 ] t$ l
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( r: B9 z$ ]" v
}
7 i" _9 U& y; u- e* Z
2 A# W9 |/ U( H! p% ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; \) m1 A8 |+ c0 A, X
//UARTprintf( "i=%d\n",i);
( y- I- e, G* |" N2 S' {1 f
//UARTprintf( "j=%d\n",j);
: G2 ] x R3 G4 g! D2 v
UARTPuts("Data mismatch in buffers.\n",-2);
$ R/ C4 f' A b& L& }
if (upp_interrupt_count == 2 && upp_error_count == 0)
: V1 ?2 u8 k! t5 ~; x+ b+ \! v3 J
{
" L4 ], o0 D" t0 ^ ~ ~" Z0 ]
for (i = 0; i<upp_frame_size; i++)
% [& g2 c. a) X; b. d6 V% ~9 ?* Y
{
]% a0 G6 H2 Q9 c. v0 j
if (upp_buffer_a
!= upp_buffer_b
)
* P# V' b9 i3 \) D2 m! R8 E C
{
* ~) S5 w& J0 I+ p2 t2 V( F
upp_error_count++;
" b) C1 y4 b/ y, C5 k
}
3 O( _$ C4 ]1 P) @& e
}
7 C( d# o5 H$ w* D- w
}
+ T* V; J% I, @+ [8 K) L J) a
3 j `1 p/ G7 {% }& y
/* 报告通信结果*/
8 ]7 D4 n% w5 k+ \6 R" \* D
if(upp_error_count != 0)
& h2 T5 a+ ]6 B+ ^. c
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 g' W P' u) N# E/ I$ n
else
0 r0 i& a6 z: F U$ r
UARTPuts("uPP transfers complete!\n",-2);
$ v$ J1 j( x8 r& |
5 Q( ~9 d# m& O( H* w6 s& i& y$ m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 h3 M- a# z$ q: Z% G- b6 e
UARTGets(ch,2);
3 t, l; N7 t! v4 T; n9 c
UARTPuts("\n", -2);
5 S8 }6 u6 k% o9 _0 c; ?7 x4 Y' W
: e B! }9 T9 c* c2 o2 m. t
if(ch[0] == 'y')
1 }' e0 r+ h6 K6 h1 d7 B8 _
{
' s8 Z. ?3 C" D& [9 y9 W) X
/*打印全部读到的数据*/
* _1 x0 b- W7 ^1 W% J7 K8 ?
for(i=0; i<upp_frame_size; )
0 z" i! k/ P( v/ R6 _, s8 [
{
3 a9 d/ ~8 U, l0 f9 U
for(j=0; j<5; j++)
9 T4 m( U7 {# i# c
{
# u; | s4 E. ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
|* j, A P& ?5 D1 |" A
i++;
5 N/ R5 u0 c: H W( _
//if(i >= 4096)
+ z* C5 X) ?& j4 p! F1 s- @/ @3 I
// break;
" X$ P0 n X: t# f
" U/ J# l, g6 S$ s
}
5 \! Y! P& |% m* z5 X2 X4 e3 H
UARTPuts("\n",-2);
# d* N D# q/ x$ p$ @- ^
}
! ?* U2 R5 [) n4 Y& U
}
+ i3 j- H7 D' J x. ]
5 S% e! q, Y8 K
}
0 g/ @3 {7 ~1 }0 V' l
/ @; S# t1 Y% a) `3 g
9 b( O4 E+ d2 ^
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# l- X( m( q( W4 u; c& R
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 Q: E8 ~4 X4 S
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4