嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 Z8 w' Y7 j ~2 E4 w
Void UPP_TASK(Void)
+ q/ _- a/ \8 q; g0 W$ P! ^
{
* U" V( g W1 P2 g" {: c6 n
: _7 M+ D2 T* i u# E3 n. c4 P
int i,j,k,target_int_count=2;
/ u; ~- l( |& j& C
char ch[2];
! y8 r4 ~9 L: A t$ x% ?
! W6 s% F( l* {0 }
# r4 y* [. B) U
1 S6 }* M& x( m3 |# u4 L9 r, _
upp_interrupt_count = 0;
4 K% H% J* F! |3 [3 C" N
upp_error_count = 0;
2 Y: a$ o; Z" D+ D. w! Y+ P
/ ]- W2 t, o5 @+ B; x Y. t" V
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# I; M' ?' w; K& m1 P* v* I
// Initialize data buffers
% e1 H1 Z9 z+ E" u7 Z Q
for (i = 0; i < upp_frame_size; i++)
3 j; J9 _' W* \/ M+ H. q) U
{
/ q1 P3 {3 u( E2 ^# F0 m( _ t/ G" U. _
upp_buffer_b
=i;
1 ?4 c. |2 Q: o. w0 U; h
upp_buffer_a
= 0xDEAD;
+ s3 L) X8 `( S$ e" q: ?1 j* c
}
- N% e+ w/ I* Z1 `# p
9 B. y# u1 ]! f- T* n0 Q
//for(i=0;i<1024;i++)
* {) } f, d* X1 U! p1 q
// temp
=0;
0 V0 o! G' z8 a& z t/ h3 X& t
6 k/ \0 M$ O2 p& y0 @! q8 [2 n+ \
//UPPReset();
( G% J9 H H# l0 g6 z2 E) t7 Q3 h; ?
/*启动UPP DMA传输*/
' X. S" r$ S5 s# O7 W9 b. q
UARTPuts("upp_prog_dma_i\n",-2);
6 Y1 }) k1 d5 u) \1 Z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ y: j! d/ V" R) x
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; w0 I- t. z/ P/ J9 C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
Q% s0 Q( z/ Q; t+ l4 k9 E7 \5 X
& L* r2 u) W% _
UARTPuts("upp_prog_dma_i\n",-2);
" s. g) H6 g" G w6 ~2 n
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) i, o. Y' ? H; O* }8 Y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ d/ T4 ^6 M8 G( r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! {5 {$ Z' y+ W
2 N8 c% W; B$ Z* {# n* p
/*等待UPP传输完毕*/
8 M5 D# H# K" h/ G& P: Z/ q( W9 f
//i=0;
- f) h4 I7 h! Z$ y
//j=0;
+ h3 q% n+ W) }1 ~& X& O" v9 Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: Y) R2 n2 k3 F
{
W$ C8 l4 |1 E
/* 测试UPP传输的同时操作普通DDR数据
" _; L: G5 I% I$ t2 \/ S- K+ ~2 b
temp
=i;
+ k/ H- V2 V3 I, F7 i
i++;
- R7 x9 n5 j) Y# \
if(i==1024)
0 A0 R6 u* c5 T* }& L; d5 K8 p
{
7 i/ l, d8 z3 Q2 n
i=0;
3 |3 m2 V1 ~. c( t8 U
j++;
% X, h4 [' V3 |3 c, S7 V* h! c2 n" Z
}
Z, k, S" @' z# p
*/
2 i1 o. Y) k; m6 ^+ ]
# X! l# }$ F- q6 N
asm(" nop");
j0 h0 H$ c7 o6 E5 c
1 I4 b4 ~8 ? C2 d
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- v# A! j" F; v$ P8 x9 j/ j
}
2 l+ b7 N6 R8 s! Q
C4 }. g, J8 R9 E4 M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 [* Q. o/ N& ^4 {5 L
//UARTprintf( "i=%d\n",i);
' G6 z& Z1 Y1 P0 l; E3 @2 T
//UARTprintf( "j=%d\n",j);
1 m. A! @8 d8 a7 L9 z
UARTPuts("Data mismatch in buffers.\n",-2);
; I9 V, o/ r5 N- a$ E2 D, Z4 z2 Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
b0 z2 Q* H; @+ R6 P6 I
{
+ ?/ Y: }# z. U0 _' T( U6 j; W/ B0 J
for (i = 0; i<upp_frame_size; i++)
* d# X1 f$ d' ]
{
- F! R7 ]/ _1 u, i0 r
if (upp_buffer_a
!= upp_buffer_b
)
8 H* ]* n; {" }# _
{
8 Q3 p5 d" S7 k7 y
upp_error_count++;
* h* l* [- f$ v& t6 v- h4 V: |
}
- K R4 p5 T0 a/ s' W* L5 V& Y
}
8 L/ D K6 j3 O; n
}
* F6 t: K# F- T/ \8 }* [# d+ d
2 v7 i. k& O0 [; @
/* 报告通信结果*/
$ X( M+ R5 Q: U8 ]; D# w) P$ d
if(upp_error_count != 0)
- b, o0 m: C2 U/ [9 o* w
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 g6 h" ]% g$ b, H2 p
else
9 q0 R& L0 H" b1 T9 g
UARTPuts("uPP transfers complete!\n",-2);
: M( ?5 X5 i: d. E4 b) l8 m9 k
0 _' F. Y p' b& F% ^1 w+ B- ^& m' K
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' x& `" w+ u. r u
UARTGets(ch,2);
8 f6 K4 Z; P* x* s6 P6 _
UARTPuts("\n", -2);
. n, k4 u- l7 i$ E/ G0 R
# Q! \- \- B9 M9 }7 Y, L A, i. `
if(ch[0] == 'y')
+ u5 ]3 {6 S2 K% L, W
{
3 M2 L" t% W0 p/ T, O
/*打印全部读到的数据*/
2 i6 g4 P$ M% j0 S: T6 D7 i6 x
for(i=0; i<upp_frame_size; )
3 V& i- z0 a A4 r
{
2 g7 ~! F& E# P5 h" E) w
for(j=0; j<5; j++)
u- H O* R o$ t' t* q6 N3 t( F
{
/ u, D6 a+ O& {7 q G8 ?, y7 m* P# ^
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 T5 Z2 u1 H, K! N$ r- a; V: o
i++;
6 O- E0 z1 E. t5 D: U
//if(i >= 4096)
4 G" D d8 T% P1 G) Y
// break;
2 S+ ~0 n$ {' \9 S
- F* Y9 J& l, w7 p- ]) \9 {7 g( g
}
) _. _5 z4 g, A( j/ s: A( j6 r0 J
UARTPuts("\n",-2);
5 p( f X% r) c
}
* V, ?( p. s9 a" ~; x) S6 U
}
' g8 \, J; J$ E h8 Z
8 N; L4 V' Z2 @1 r$ Q9 n! h3 q3 t5 b
}
& h8 X% p ^: \) \
6 c* |# T8 Z! l- h+ ]
( D' P/ M/ ^5 S) H# w, A3 H) W
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
Z7 W0 j1 h" @' K% z
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; V! W1 h4 Z, w: u% t5 u
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4