嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( M. k1 Q8 o7 d. `' n& r" H( R
Void UPP_TASK(Void)
& O. M' {/ m4 B. d
{
: c @8 E; y* ^1 ]0 w
. z& z/ J; z& D
int i,j,k,target_int_count=2;
# G0 P7 g5 ~% f% K" d+ @. w G
char ch[2];
2 @* H) V) ~$ j) Z
* Q9 \* E, c$ P( U
) ?. g( S8 Q9 F; O+ V9 x" N8 o. \
7 Z5 @' r6 t/ e6 f$ m5 Y* h
upp_interrupt_count = 0;
9 a! U6 @6 J \
upp_error_count = 0;
+ h: b' [. U( u- l( A
9 w% {# n- Z: m1 Y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; y* R! n5 z+ ~6 C- L! t
// Initialize data buffers
& x2 s8 B2 a" j, m( o& P
for (i = 0; i < upp_frame_size; i++)
6 s" S5 l- s) b. G# t! Q. E
{
: C' W' z3 m0 w: r6 o
upp_buffer_b
=i;
- \$ _& b f M: v0 Y/ @0 S; ~
upp_buffer_a
= 0xDEAD;
7 U4 C2 q- S0 L V- g
}
, K" v: |* s( y( y e5 s `
; @7 m+ U% l$ c. p2 r
//for(i=0;i<1024;i++)
0 g+ O2 w6 F: ?+ ]. p
// temp
=0;
+ f! C M; @9 E
) t. ^* |- b3 M8 p' K. N% g% k
//UPPReset();
+ w" L0 p' K: x: b. Q5 B
/*启动UPP DMA传输*/
; J& G$ P# M' s5 Z/ `7 ]" x3 @
UARTPuts("upp_prog_dma_i\n",-2);
' \# n1 p9 _# W, ]5 b' Y( K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ a$ Y W! i* q g j& V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 H/ `8 a* ~- t A" @
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ F0 ?6 ]# }! d) h6 O2 o! G7 r+ Q
- {& x* e' _$ V; S4 ?; Z! M
UARTPuts("upp_prog_dma_i\n",-2);
$ j, e) z; w9 O- ^8 S# y1 s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& @7 l0 \# ?( W. {; ]' Z3 R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 A' s0 N3 @5 T
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 K) |' K0 A6 @6 L# {
0 _$ v5 Y* t/ `" `! o J, y
/*等待UPP传输完毕*/
3 q( y% a/ D( o5 b H$ Y' |: q
//i=0;
4 y( d. U" z! M. n
//j=0;
* v% j% E+ L1 `. |; i& a
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, B0 v5 q; t; w0 e; }
{
! j8 d/ D, E/ n5 b- B) w: b' B
/* 测试UPP传输的同时操作普通DDR数据
5 B8 r4 N# V- w7 d. L2 m
temp
=i;
# J" e4 u- P$ {9 _: ?) G
i++;
% E- K% E% c; r# p
if(i==1024)
: B& M: C1 Q3 e
{
& F( k& [ O: C# w) h
i=0;
' m, B" G i8 \' ~5 s1 g2 ^8 ^
j++;
! p. Y1 t) b2 l3 t; x1 c: P% o5 c
}
9 C9 q- v& ?( h- _
*/
o6 R$ C1 k B) f1 c4 g, R6 m
1 ]! j( T1 s; m" ]2 @4 ?$ O k
asm(" nop");
- ^( \7 E2 X E f9 Z
( D" b+ e" u+ J" b
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ @! Q% I) O; V* F) D
}
5 _* W3 ^' V/ M2 }
( V2 ~& h# ]$ n. I. B# U
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' a# w6 |8 w6 S( G! h- e" K
//UARTprintf( "i=%d\n",i);
- N: B! K9 r4 W; a* E# \
//UARTprintf( "j=%d\n",j);
4 e* b' N3 j1 g# T+ K( }" H8 G
UARTPuts("Data mismatch in buffers.\n",-2);
" s# g* I5 {6 g1 }; g0 O5 ^7 h3 [
if (upp_interrupt_count == 2 && upp_error_count == 0)
: ?3 b( @+ N- [% Y w# c
{
8 {/ f- F. M+ ]; Y. |
for (i = 0; i<upp_frame_size; i++)
B% {- S, D) h
{
1 I# ?; l0 U9 Z! c* g' K
if (upp_buffer_a
!= upp_buffer_b
)
% ?' _2 a/ e' y
{
- f X0 j6 u" f6 ]6 a! v
upp_error_count++;
- t% i% n: ^' m" O& w
}
* W4 \" u8 x& H. [$ m& U
}
" L4 ]. K$ h# L, o4 v+ E
}
! i/ @! x. S$ V# L ]3 I& Y1 e2 v
& w$ `8 b) b# o$ i& w d: s
/* 报告通信结果*/
+ x7 Z4 _2 f2 E; v! x8 z6 @
if(upp_error_count != 0)
$ B. J4 z2 I2 Z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
H1 y( c- t' v$ x* L
else
+ N5 m5 o! ]/ z8 u: R' I: L2 d2 Q
UARTPuts("uPP transfers complete!\n",-2);
7 `8 g6 ^; e$ O9 F( O
: @* `( e9 S0 q: T& Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; ^: V1 Z, O, n/ h4 C8 ]
UARTGets(ch,2);
* N" c) X1 s w6 y# X
UARTPuts("\n", -2);
5 L( G$ g% x7 `& y
- H; x6 ?3 o# ^4 t4 ?, v
if(ch[0] == 'y')
3 J P, o& h* Z; z+ X _
{
- R! K/ A$ M6 H7 ~3 [( [
/*打印全部读到的数据*/
4 `2 \' _" c. ]. F& q
for(i=0; i<upp_frame_size; )
( [( m# S4 I4 n0 o! I# A
{
i$ y1 q6 b; W4 _
for(j=0; j<5; j++)
" o; A8 J, @0 }1 P+ h+ @" }/ g
{
4 V L+ b4 b+ U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; H, S0 i/ w& g) I
i++;
. x! q1 M9 V. O( d# D. l+ H. k
//if(i >= 4096)
+ W l8 T; d0 B
// break;
5 a7 ]( R- D5 |/ m0 o
; n1 F7 n K& o
}
; j4 O4 |( c' ]$ T7 e- B
UARTPuts("\n",-2);
0 ^& s* ]3 d1 T' g1 |3 E: E
}
2 T" h: q& j, _. i! H1 h! _. ]
}
1 |6 X% I; V4 `5 h9 C+ }: f# b
2 `4 x8 I6 C" s4 C5 `2 X4 }, c6 ~: a
}
5 Q9 t; |3 J' c/ W7 {( \
+ \5 A' B, S$ n' g( l0 ?
$ v" D9 \( B# W3 T
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* W7 a' N3 N: o* L3 M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' f0 F. O9 Y6 f' i! X
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4