嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 P2 H# N. ^& C- q: E1 P
Void UPP_TASK(Void)
7 b# l! B$ t- D8 N+ ]
{
2 j3 {5 E1 Q+ B
% z, _! b7 e' j- t* r& H( |
int i,j,k,target_int_count=2;
( ]8 C1 f/ M) i( r7 E5 Z" `
char ch[2];
0 [9 p$ A+ d& C9 n9 X6 O
7 u1 I0 ]7 m$ y- u: M
- h1 P: q: O3 i8 s
; X) }: @% P% D( C
upp_interrupt_count = 0;
: E7 t9 S! O, |8 b* H
upp_error_count = 0;
8 W2 j9 k( @! m3 {! h; K
, Y! J6 i; J: x. l9 X: t. F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) @+ L7 g* i3 ~2 i, H
// Initialize data buffers
~1 R! c4 v7 H P
for (i = 0; i < upp_frame_size; i++)
) Z) i9 [" _' b
{
- O# y: c1 q0 g9 @5 g0 B& {# u$ M
upp_buffer_b
=i;
, b! C( `( x' @, q# p: p
upp_buffer_a
= 0xDEAD;
- V# D$ Z3 X2 U7 v9 D; ]
}
5 H2 n1 P; v# o7 C" t, f2 Z6 k$ v
( Y9 o# y q2 ^3 \1 z& y
//for(i=0;i<1024;i++)
5 E2 n% E1 e! z7 }7 O# g2 g
// temp
=0;
/ T4 G0 P5 ?, Q
$ P+ f; {: {, T; u
//UPPReset();
' C! Y4 N L+ d9 \
/*启动UPP DMA传输*/
: Z# s! [7 L) F/ [3 y; d
UARTPuts("upp_prog_dma_i\n",-2);
$ s! y6 d ]# B) _) t
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 X. M/ H" _, v! ?! p
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, c. D' J4 E; ~6 B; B$ U9 n' \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! t+ G4 @( Y, H3 J3 z9 \1 w" E
% S' O" C' Y2 J6 p* y. U
UARTPuts("upp_prog_dma_i\n",-2);
, l# }3 K0 ^; y0 x4 i2 m9 K
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ d: m9 }: i Q6 M' ?
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 h% j) f- v6 q/ O) n3 h. |; @/ W: M
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# A6 N3 I4 N- H5 l; i
/ A" h3 y1 q0 t& m9 g1 G" ]
/*等待UPP传输完毕*/
3 e, z/ _- u3 c+ A f0 K0 }/ B& h
//i=0;
4 P9 \4 C- z4 l0 s
//j=0;
9 A8 m9 k9 @# `- X/ j: b' [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 c, f: d, L$ q' n6 O
{
7 @0 d1 Z5 G8 y# G2 G
/* 测试UPP传输的同时操作普通DDR数据
7 g5 D3 R: Y7 T) J$ @
temp
=i;
% P" s# |- @. ?2 {: W
i++;
6 Z) R7 J4 w$ A$ D! L! Y2 ?! r
if(i==1024)
5 s* W$ O3 |/ B& G+ O z: F( s f2 I
{
4 N3 f5 ]9 z2 f+ h: |% p0 S
i=0;
2 F- q0 V$ \' Z' F+ c$ m2 q, P
j++;
% s0 H7 D: _5 b, ?, ^8 [% j4 h
}
( H( S% e: D/ w1 h' ]6 F9 u; c
*/
! `' u1 ^/ t9 ~3 y6 V9 n" h
8 f% h3 d4 A+ e4 r: f( m# `
asm(" nop");
) I! M7 K( y3 t0 i" m3 _
% l) c$ b6 \) n2 A3 Q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 p9 S! m( B) X% {2 a$ ^$ x# M* b
}
2 l2 t5 }5 v; L2 I# d) v1 A2 O
- l/ b F/ d- a, l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& Y% B0 {) |* `: E/ N
//UARTprintf( "i=%d\n",i);
9 G3 o7 s2 O6 ?9 y
//UARTprintf( "j=%d\n",j);
+ ]( F3 \: {. ~: e- e
UARTPuts("Data mismatch in buffers.\n",-2);
( c* K- E3 G4 }& z; p3 m; D
if (upp_interrupt_count == 2 && upp_error_count == 0)
: ~4 y: j8 z E6 A- B ^
{
9 o) I# V: B7 B) m Z9 n# i% s
for (i = 0; i<upp_frame_size; i++)
% Y& V& X; P- M, K# D
{
0 d3 a2 D4 m- Y& x) A. G8 ^
if (upp_buffer_a
!= upp_buffer_b
)
$ ~5 d# E) h; K# u l) l/ b
{
/ o2 g& m+ y: J0 ?8 R
upp_error_count++;
- ^* X3 _- u2 I7 t: n
}
+ Q2 g! t) I: B% X, Q3 C9 J
}
6 v$ ?. U$ x% e
}
# q {. T- n% Y, e- \
I/ A' v& }' m) p, J
/* 报告通信结果*/
8 S( i2 { _; U
if(upp_error_count != 0)
0 Q4 y1 B7 w5 l- V. J7 n" t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 c. g; R2 k, `8 l: g" C7 u# e
else
/ F$ `8 W) D5 A1 q
UARTPuts("uPP transfers complete!\n",-2);
$ G6 m9 j: r) h+ Z0 D6 }+ l6 Q
3 ^- k2 f% ?! w& M) ?9 N% D0 J, }
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ N, O5 s) y& O Z" u/ A
UARTGets(ch,2);
: ^8 u \% ]& e; q- L
UARTPuts("\n", -2);
: i% ^) ]5 a2 E$ K" p, _
% F& Y, c: O0 W# E
if(ch[0] == 'y')
& c6 h& @: @% W& @9 `7 `. j
{
/ J7 `3 [9 m2 Y) F
/*打印全部读到的数据*/
! ~0 N! @ U/ N1 B( I- x
for(i=0; i<upp_frame_size; )
0 C- ?$ l* I# `5 |% u
{
: A; g2 U, |9 s6 c9 L9 O# S
for(j=0; j<5; j++)
- i: F4 U" q1 i
{
' m4 z% V7 F9 J! T
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ S# j4 a2 V2 g
i++;
F2 E$ @0 \! L3 [: O6 Y$ U
//if(i >= 4096)
( p6 j b0 p- q7 M: I. |
// break;
2 X- \* J5 _+ F5 @5 I0 H* D
4 |7 c3 J, Z3 x+ f8 [. ~
}
3 E7 n4 ] t5 n/ H% R. r, |6 ~
UARTPuts("\n",-2);
8 X: `( O! n$ o; G
}
: z/ [+ W- @3 G+ A1 Z
}
0 f! T# M4 g) T) v" q" I
% X* d; [& q% p8 l
}
7 G* \0 z) l5 T1 N' S/ ?0 @
" U4 c! j, T/ F, ^
& r8 T; c; v) w, x# M& E; m
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 g7 i. S) H: g, ~' y, ]- D# Y% _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: g! v: R U6 K! K) }
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4