嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- k2 L, j+ L+ x3 `" X" ~6 X6 M
Void UPP_TASK(Void)
, w6 b6 ?6 |( V' {
{
5 l+ V9 I+ K0 O: ?
/ l+ f5 ?+ x) F( g/ l/ z4 B
int i,j,k,target_int_count=2;
9 F6 h# c8 {4 a- u3 D+ T) `
char ch[2];
+ p3 b* K1 W1 R/ g
8 e/ A" v! c; l& N" b, A# u6 l
# K: [7 }; ]! Y$ K
7 j7 |/ r s6 x! a9 F
upp_interrupt_count = 0;
& A5 v* ~. l5 ~1 A, R
upp_error_count = 0;
, N9 u7 i: b& E- E
; t3 s7 u5 J1 |" ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! E! |$ m; }5 C) t( @4 e5 b$ Q
// Initialize data buffers
/ G4 I3 {$ ]$ a: }7 }' j
for (i = 0; i < upp_frame_size; i++)
. C; w; u& Y/ ]* r
{
% u7 d. B8 l8 ^- `( F
upp_buffer_b
=i;
2 \8 q4 v+ P! ^6 P( h
upp_buffer_a
= 0xDEAD;
9 F7 j, r1 `: @% I0 e
}
3 F8 W( Q# h3 t% g9 S0 U* U- u1 E
7 [" \+ y0 n# ?: |- J- x: x2 J
//for(i=0;i<1024;i++)
7 |; h' ] b! A8 `% ?. f6 `' R
// temp
=0;
" x- y' S, O+ C
# B- H! M5 ]2 j3 Y: r& n9 q: T
//UPPReset();
7 Z, {0 P2 Y a5 l
/*启动UPP DMA传输*/
! v& M( C( ] A' S
UARTPuts("upp_prog_dma_i\n",-2);
# [7 k& _2 G d: C
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" H0 ]/ Z$ A; f7 W) q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ t$ Z8 S+ P6 u6 f8 u" w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" Y. n/ e7 N, ~
5 v4 n0 h+ G# s$ A7 h9 ^
UARTPuts("upp_prog_dma_i\n",-2);
* ^* f; o# Q6 }- K& @2 \* L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# s, j+ c) L+ K: _! P6 _1 X0 ^
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ ?, k( ]+ P% S1 ?2 U
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% e& c) p6 r$ Z# Z/ I5 W7 z" e
% z" F' M) K: W2 b/ _. J& b2 I& Z8 t7 V- X
/*等待UPP传输完毕*/
: ? A5 i4 T4 j, s7 w; K0 y+ e
//i=0;
+ _- |' I* Z; [6 L4 u6 w
//j=0;
- D' P# B; R, s/ t5 n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' i& X% R" y5 ^8 a
{
8 D2 M" P* z! j1 R2 t* W
/* 测试UPP传输的同时操作普通DDR数据
( x! Z( {5 J) X' f/ S8 M
temp
=i;
! |. X1 E9 U7 {- w; _; V& R
i++;
8 _# k7 I0 ~3 b1 o) u+ @2 V0 A
if(i==1024)
1 I) G, x& Q& i9 R+ F/ y: `, o2 [( w
{
' E0 W$ {$ v" L# U0 t" Q: X) `
i=0;
- C5 H5 o1 A* [" f9 Z
j++;
0 O% e. Y! p3 h6 H" D5 k) D( ~% |+ M9 [
}
. ]; @+ R5 C1 y+ f5 Q0 s
*/
$ D, H. ?4 x: v8 ~! y
( i3 S+ _, b) G5 a0 j( o
asm(" nop");
8 x7 I: B) |8 C. f2 `8 n4 _
' d/ f8 e$ @1 e, l& F( @# X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; R9 I! m( ?) W2 d8 ]" [% ~$ T/ n
}
) |. R* U& D/ }7 L# _% m
; R2 ?* y* f) t$ c( ]/ K5 \
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 F& N' b+ V) E
//UARTprintf( "i=%d\n",i);
8 e# }, W* o0 M. ? G; V- q, q
//UARTprintf( "j=%d\n",j);
8 X. n- G1 J6 Y, n* p' F* m- y
UARTPuts("Data mismatch in buffers.\n",-2);
" e" ]/ _2 V+ N+ H% R, b; S
if (upp_interrupt_count == 2 && upp_error_count == 0)
" H1 v' ~; X0 ^0 C/ N5 S9 L
{
4 Z8 a9 S! e* e7 x: ^! n2 M
for (i = 0; i<upp_frame_size; i++)
! O( b; E4 j1 n
{
7 Z& F1 O. p( [& z* u
if (upp_buffer_a
!= upp_buffer_b
)
- k Q! A$ u u% F6 W$ \- ?
{
6 R; w+ z& Q. N5 r+ Z; e/ h
upp_error_count++;
" i7 c( H$ S6 E. F$ R
}
+ D& M9 Z2 Z9 _; _) M0 j9 E
}
4 e' W E/ _. e! ]
}
' ~* S8 C! g/ }
5 v( O% Q! P9 ^
/* 报告通信结果*/
( m% @* S( d5 V- F6 |! E' B8 }
if(upp_error_count != 0)
! D/ {5 Q0 [ T$ @ E8 `/ O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. d, Y7 U: m, B3 p c
else
8 s; `0 g0 t- g, j5 e# c5 s/ }
UARTPuts("uPP transfers complete!\n",-2);
1 E) U: R. B! A/ t: t, H3 a
, q* B1 n- d; ]
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& G' Y( f% d/ x4 }/ g
UARTGets(ch,2);
1 r: e6 R8 s# M, ~/ v2 a1 N i( m
UARTPuts("\n", -2);
+ @3 J; h: _. N' r" Q; {1 ?6 \
# t: r3 K' l/ u" l
if(ch[0] == 'y')
/ w. J& c6 k, e T
{
2 J" F& w" g$ [+ K
/*打印全部读到的数据*/
d$ j+ [4 C5 k; ~. s5 q% x
for(i=0; i<upp_frame_size; )
% Y- e( ~. f+ ?" t$ a6 A6 N6 Z
{
0 E9 F5 F, `9 k! i3 c% d2 n2 Z
for(j=0; j<5; j++)
! A% a! K+ q% C# E# z
{
3 k" |' }; s5 l1 i8 }& B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! V* W5 K, B, g4 o5 B9 \
i++;
( M9 J7 {6 u/ q% y. A$ c; i
//if(i >= 4096)
# ?7 k' t( S' j! A6 I9 E
// break;
! u* y( d* d1 B( e B2 {
* ` @4 g: }4 g5 [8 x' i) B* u
}
^0 X) J( p/ |& b
UARTPuts("\n",-2);
2 t6 x E7 h# Y, i r4 b
}
1 _4 Q) q0 X# C2 [& s
}
7 ~* m2 L" \: t, Q# ?3 y0 Y
$ w, v. B& X: c9 F7 I' C
}
/ [. i* j- s* A; ?0 ?* {6 n
4 |/ b- c8 f, ?0 C! B
) P( C$ ?% I6 q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 d9 w) r4 D6 u, ~9 o
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' |. @! z* M3 v4 R- g4 I
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4