嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# H% B# a0 [+ c% i& z
Void UPP_TASK(Void)
) V( v# N$ P/ P/ n7 m6 S9 R4 R
{
1 a0 _$ U7 A5 J. @& k* g$ v: B3 _
1 L+ J1 v4 P3 D4 ]+ g b3 I& R6 A
int i,j,k,target_int_count=2;
6 V# q# |$ q( _6 U) \
char ch[2];
, d' n3 D% q2 x
4 T' T, i% X9 F- Q' e5 a4 N
& g6 p& O2 _# ~, U. P$ F* C4 Q
7 j! \4 n9 Q5 }& B/ w
upp_interrupt_count = 0;
1 k1 n" H+ t; y) V
upp_error_count = 0;
* ~. _ s# V) f* _) I- n
- C- x) I1 H& O0 Q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' | H5 H2 T- ]# c0 d" P
// Initialize data buffers
% H% c/ s# I w" w; ]0 N* y( g% I
for (i = 0; i < upp_frame_size; i++)
4 W$ j0 x1 |- q6 t# _
{
* x' G! o6 I w9 m6 N0 g
upp_buffer_b
=i;
$ E3 {1 ~' Z4 ?& R O, V2 V
upp_buffer_a
= 0xDEAD;
# G9 D8 O3 {: j6 ^6 g
}
. S5 p5 r" i- p: r
( s7 h) }4 z9 g8 c i0 c
//for(i=0;i<1024;i++)
% f9 h" j' R1 ?- }1 y. c8 d; W9 J
// temp
=0;
4 S" f" K9 `3 s) i; E# ~
( P3 t3 L2 e! u+ Y4 C4 E
//UPPReset();
' Y9 \! ^9 C2 R
/*启动UPP DMA传输*/
+ K9 [2 O' ~+ k5 R3 G
UARTPuts("upp_prog_dma_i\n",-2);
$ p1 i# T C( @6 ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% B }" q% H" w X& H* I
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 T" y+ n- E, R1 i0 R! ?
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 w+ G) ?* f1 g) n! o
& Q4 |% T+ q" | e! B- }) p
UARTPuts("upp_prog_dma_i\n",-2);
- _# J8 {9 {8 C; X
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" \# O( e; I0 i e
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* e1 S* |+ H0 n# q8 x8 d( m- o, |3 u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! H6 R) }1 j! S1 _. Z! {/ `* ], m* M
1 N) e% h7 |3 I% n1 h5 w2 e/ i1 F
/*等待UPP传输完毕*/
/ j: Q Z$ N0 c$ N
//i=0;
" m6 ?3 [5 v6 h" u, B6 [7 Z
//j=0;
5 c4 f9 y2 c7 Q1 L8 x: k
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# F) i" t# W j" ~ I
{
k" y: E' g2 v# c. ]" q+ {
/* 测试UPP传输的同时操作普通DDR数据
( g' D, `- m2 R+ y h
temp
=i;
# f1 Z0 L+ n3 P( H/ q) i) K" j' ]
i++;
& u7 _& ]9 A a# v
if(i==1024)
; x* U5 F4 @/ S
{
) G7 w/ E1 F2 W6 Y! j1 R: P2 S
i=0;
' d) L, Y1 D% ?4 Y# |
j++;
- I9 i# Z' G3 C* }
}
2 d2 t4 G! ]3 D* t
*/
" t: f, ~& c/ A! \
6 G M, y; w/ V5 |/ A; u: C/ z
asm(" nop");
7 G0 K- K7 h4 O
7 s7 h- a; N: d) l
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 Q9 s/ b! W$ a/ A7 f5 M0 _9 W
}
7 k0 K# J+ d- [* w- X
" \: F: V; m4 c! h! ?( ?
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, s5 t9 {) z. D) ]
//UARTprintf( "i=%d\n",i);
' z7 i0 \3 k; j$ m( n
//UARTprintf( "j=%d\n",j);
6 {1 R+ O4 {' j1 X/ `
UARTPuts("Data mismatch in buffers.\n",-2);
) ]- ]7 {1 }+ K2 _; A6 s/ r
if (upp_interrupt_count == 2 && upp_error_count == 0)
* ]( P9 [7 g* f2 c
{
* Q! l K4 l3 r" q& A
for (i = 0; i<upp_frame_size; i++)
* E7 `; v0 C2 v! N8 t0 G) E" O: i. O
{
5 ~3 {% I+ g) A) ]2 W5 N
if (upp_buffer_a
!= upp_buffer_b
)
# V* [3 ~# Y S1 g" S- H0 a/ _
{
8 F* T5 x6 _8 o% x
upp_error_count++;
w" Y+ @# [1 E m s
}
0 r3 E9 C7 x3 P" m/ r9 P" X
}
" l J* K% b( p, h3 b( }0 I' _
}
7 A# n# w0 u9 b$ l- \$ j A0 ^
5 F9 O# R7 N# p; A D: ~' h
/* 报告通信结果*/
) t4 U$ \8 e0 o2 n% r
if(upp_error_count != 0)
- T/ V* C6 f+ Q' R0 b5 V) ?# h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 d3 v7 w. `, y+ I. N5 f' ]" x: o
else
/ X( B7 B" T- f. w- t0 T
UARTPuts("uPP transfers complete!\n",-2);
0 g1 C, @0 N" \
+ C0 M2 d c* r7 }7 I5 M: V' n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ L3 H5 x' I' s4 u
UARTGets(ch,2);
# [& q) u, Y: }; X9 s" m* O
UARTPuts("\n", -2);
4 o4 ^. `" }1 Q) k: ^" {
/ D4 ^0 M- n2 L: A5 L
if(ch[0] == 'y')
4 v% k; v& P5 J# ]2 n* {; t
{
0 Y& ?, p% H8 u* c: ]2 y& t
/*打印全部读到的数据*/
- p0 x/ ?7 {) L8 n1 I" R
for(i=0; i<upp_frame_size; )
, q. r$ s. D; _; U! m: n; l+ t3 g
{
1 E3 W5 Y1 x! x3 j1 w
for(j=0; j<5; j++)
0 ~# }( P# o9 |4 l) U6 l: g6 ]
{
. I# v+ ~9 Z/ K
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 r8 d. T9 j H5 e3 C7 X) C
i++;
: M1 _0 r$ q( a6 Z/ ^/ o
//if(i >= 4096)
) p- k0 T7 t ~ M0 o5 _! c
// break;
0 }" }1 l0 i! j3 d T* c* Q) P; b
/ h% W+ ~0 F# ~% j4 Z
}
( H- D8 L- P; ~6 L1 P
UARTPuts("\n",-2);
. ~9 u$ w' q8 h! M% G
}
1 }( t6 u& g P
}
" n8 A9 l, Y4 b7 J7 u
( f5 z# s i, t+ a
}
0 F' u8 u* ?# c3 g2 \4 _( K: @
0 y8 H# [5 m! L0 _/ V
( w3 Z- |6 H3 p6 W w8 T1 B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 v+ v; J" C, T2 n# X% Z5 [; X. G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
U8 G/ x; g/ ]; U( g( x2 q7 g( A1 A
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4