嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 I- g3 V8 H- W2 ~- j
Void UPP_TASK(Void)
7 d4 h9 [. w& V4 K1 {" r; E
{
9 h* ` p9 Z4 A% r5 Z7 V
+ D5 H& d( U6 M8 r/ [: T
int i,j,k,target_int_count=2;
# \4 j5 r, e0 x; [* j9 H: e- K
char ch[2];
3 W9 T* _9 \2 N3 a3 c/ R- z
) e& {' u4 j$ l4 S. X" K
1 ]& F& A/ x3 x# u# X$ z5 O' Y8 `
( j! n! \. y8 H6 P w
upp_interrupt_count = 0;
t5 I0 m; c( b* ` C. v
upp_error_count = 0;
: s, E: e( P# f) g% \& ~
" ^4 u' @5 M; c) |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 J0 j1 A( p. W8 a% P) [2 m4 G* b
// Initialize data buffers
J t" D9 E- [: G5 \
for (i = 0; i < upp_frame_size; i++)
$ Z$ `! }$ U. C( i
{
" W4 P" D! a+ d
upp_buffer_b
=i;
& y6 `4 h5 d0 q: u+ m1 U
upp_buffer_a
= 0xDEAD;
$ _$ `2 k) I) R2 `/ E; r
}
+ p4 {, w: {6 M) t
: Z1 N( J( A* F7 D4 Z% F
//for(i=0;i<1024;i++)
4 v5 f7 Z4 G6 ?3 K9 \6 D( s
// temp
=0;
+ |' v5 X- u, V
+ r" D' a2 v, v$ k# r7 t6 `2 ]
//UPPReset();
; t& E4 Q! e M4 i( L6 A1 r. t5 d
/*启动UPP DMA传输*/
4 o. [7 r5 B/ I: v( c( l% S
UARTPuts("upp_prog_dma_i\n",-2);
6 P& g/ _7 M3 V4 t$ ^4 ^. M
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 M: s5 i: x$ H l; U) b4 K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 @ R( {( N" C, R) b' X) W6 ^
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 |% r9 b8 b3 z4 d. C* C0 z
% E& M: W1 c7 {) G t6 d
UARTPuts("upp_prog_dma_i\n",-2);
. q4 R1 B$ z5 H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 C# m0 K" w8 t& A- Y; L8 g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 J5 ]3 ~# B0 w% F+ u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 T# o! E! v" x* h" p6 n
/ q. F& k; z9 I" |( D
/*等待UPP传输完毕*/
9 \5 U9 q& m4 n9 r5 U/ O
//i=0;
" h1 l8 F/ n% S# F. c8 m7 m3 P1 L
//j=0;
8 c" Y' M) N$ v1 h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
W6 H; w# \* _' H+ T
{
1 {' s9 o0 [7 G# r; h8 a' @
/* 测试UPP传输的同时操作普通DDR数据
& r- I4 l K. |, H( k
temp
=i;
4 Y7 M# U* o, z7 x4 {) J
i++;
9 F! K; i3 R2 w
if(i==1024)
% y: L: }3 d/ d# T
{
) |' T% \" Y2 S+ f
i=0;
0 i/ C! r7 a" R3 e3 P) q% T
j++;
" }6 D1 E; a7 @3 A! q4 K
}
4 P+ j5 v) q& O6 n
*/
* J# ^7 K q" A6 Z. U. G- h- r
2 ]) b( w6 T! g
asm(" nop");
" j8 ~5 W; g& c! y8 J) Z$ N
1 }# ]4 `9 y0 `+ g9 L
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ ^, _ p6 ^. v
}
* [; J# _) E0 H T
1 O' P" y! Z: }! H1 e# T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% T- w- f B8 q6 [
//UARTprintf( "i=%d\n",i);
$ I8 l7 e2 W! [. s
//UARTprintf( "j=%d\n",j);
% E9 W$ Z& n }6 k( x9 ~. ]/ n
UARTPuts("Data mismatch in buffers.\n",-2);
6 F3 _, Z, k) n" L5 N# n
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 R& e; K5 K9 [' b' V7 e b
{
" P/ @$ Y3 g$ [0 g9 `) ^" t- K
for (i = 0; i<upp_frame_size; i++)
* i5 z& m: ?1 G$ H+ z( `! [. \
{
8 f3 u, ^' e; t: r4 w. }! C- B3 e9 ]& J
if (upp_buffer_a
!= upp_buffer_b
)
" M- B. j, A/ z
{
5 X0 D9 f, t) e0 h
upp_error_count++;
4 c. N. ?$ W* h
}
; {" |5 K& t% E" t, H0 f9 R0 ^
}
& R$ @0 E# E: M0 b
}
- M2 i) j3 m3 W0 P9 @
: i/ F: G' K) i2 C E
/* 报告通信结果*/
7 Q2 F7 l* i6 @5 b H5 |2 E4 D0 ?
if(upp_error_count != 0)
4 j+ J5 V+ Y) N: x# F0 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, B5 ^- A% h, \! C& n6 x2 ]% Q- G
else
d% {& X7 y" j
UARTPuts("uPP transfers complete!\n",-2);
3 v4 _7 p% H2 U3 I2 S! h
: c, r! [9 b5 {; K
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. d- M; I, u4 x% z) p
UARTGets(ch,2);
1 o: l3 `! ?2 }* f! N
UARTPuts("\n", -2);
) f2 ~! u, v5 W! W- n
% W! s% V5 l+ _$ Y4 I4 K
if(ch[0] == 'y')
+ E2 Q. n: p2 L- q, k5 w
{
3 q. [% F# W- X, Q
/*打印全部读到的数据*/
' ]) q2 q! P9 X
for(i=0; i<upp_frame_size; )
( e) y' \" _) i( C
{
% n( C, u" V5 H: N+ B
for(j=0; j<5; j++)
- z" K, W* a2 U9 `* e) ^
{
0 U, |, f. ]& A4 F) M* E1 Q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 D. d4 j% i- C3 D3 V3 [
i++;
n5 i8 j7 ]$ A5 v
//if(i >= 4096)
( _% C. _3 Q5 R |
// break;
1 D2 U# R9 w" a! y+ ?, c0 \) j' Y$ w
$ y5 k: A8 v" ?/ e
}
% R. ?5 s6 B* C, G" q+ [/ Y/ T
UARTPuts("\n",-2);
0 S" b: q( F2 h( ]- g4 m" Z+ \% Y
}
+ ?8 _3 h' j% a9 j9 N
}
( Y$ U7 Y6 \, j5 V& ~( \9 V* G
& L/ d- }& N! Y7 c4 z1 `
}
7 }& D8 q" A2 ?& L# z/ q
. w$ j+ S& _+ O6 ]8 N7 ]
& a$ l o% E, T; Q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* e/ t% ?2 m3 t( W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) L$ l2 V% J/ p& D
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4