嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 ]5 o2 K1 G) u# l
Void UPP_TASK(Void)
% y4 E5 W$ }. {' `3 ^2 n
{
, \" Z- ^1 g% b
; u$ B/ j }: X! W
int i,j,k,target_int_count=2;
# ]" S2 O" _7 n7 \
char ch[2];
4 Y3 ?2 u6 P( P; A: K/ ~5 W4 T* G. o
* S" G9 b! ^" w/ E, `/ u& a- i9 J7 z
7 Y d) K5 F0 O
) N7 T8 h* j( G% P% [$ ~2 V( y
upp_interrupt_count = 0;
) r, [5 e5 A" E" Y; E& ^. g
upp_error_count = 0;
4 F# @" v1 Y. j0 ?0 b- v8 U6 }3 q
0 L& L& T* ^! [+ X$ T9 O5 \7 a( K
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- J( T7 j1 o2 f2 W
// Initialize data buffers
, P3 H* n. A9 C' w2 O
for (i = 0; i < upp_frame_size; i++)
/ o2 I8 l) A P3 d2 O4 `
{
' \- S% S9 B' C5 z
upp_buffer_b
=i;
& z( f2 y, t- j& L
upp_buffer_a
= 0xDEAD;
& A) k7 }0 c7 y& ?' ?1 i; j' H* w
}
" l; ^: J5 w& ^6 R* V
) r1 L. d% j" J( x4 j3 l6 y4 Y5 o6 j
//for(i=0;i<1024;i++)
/ l. T4 o1 }$ x0 T
// temp
=0;
) @4 k' N9 q% f( p: B
8 k/ x9 [2 K+ g- F
//UPPReset();
3 `) \! J1 \% O! p& y- z# Y U
/*启动UPP DMA传输*/
+ p* q! b* ~4 r2 z
UARTPuts("upp_prog_dma_i\n",-2);
7 Z, g6 @ i# {3 R' ?1 c7 l8 I# V3 Y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( \. O/ g1 f& l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 w" r: g, a: ~& I, }
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ d( V" y1 T8 c; j+ V! S% C8 d8 s
( ^/ G8 {/ K+ x ^+ a( a1 I6 x
UARTPuts("upp_prog_dma_i\n",-2);
$ M! s. Y% ]' ?, d6 v- h. A$ @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- }, U, F7 G- G
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: k; x5 A; |4 t/ [# W$ D4 r6 R
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ K& I5 Q+ w5 b& G$ i
) g2 ^8 R! W7 c& ^
/*等待UPP传输完毕*/
$ j8 ]( {! m/ g# K
//i=0;
$ t% F; \3 Z2 f. A" f3 K# @8 t m
//j=0;
5 x& [2 r1 d% W& \6 ?: C! @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ b1 ~) P6 O" F# X5 K0 M. P. S
{
2 F9 ^. z1 J" j2 S
/* 测试UPP传输的同时操作普通DDR数据
5 K! h' ]; [; F" b6 G: A
temp
=i;
i) _. T' C# W, C: K9 }
i++;
& M+ O9 m# I. A$ {
if(i==1024)
5 t. |7 T9 W2 b0 h, N
{
) u% g1 k3 s+ f+ O" w+ v# v
i=0;
* n3 n0 h' b0 {; q" T& G0 _
j++;
' i0 s) x$ l: B$ V. C' K3 C+ q3 o
}
4 }' c; n, n$ `* J0 r
*/
" L9 d! H- }; x# l3 X# r0 G
' e5 X3 u% }$ i+ E* S( Z: _# r
asm(" nop");
7 d$ q; e( g5 x- V
! c# w) Y( a" e! R5 D* R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- r5 n/ y) R4 J/ k8 W$ Z s; d1 L: K
}
: s& \+ C+ b) K3 F. R0 J5 x$ v6 v7 g
, F+ F- I; X3 U
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 x; {% b. O( N, g+ y! ~9 b
//UARTprintf( "i=%d\n",i);
5 l' Y& W9 N5 E/ p5 ^- X
//UARTprintf( "j=%d\n",j);
7 X* J: g `- l: x+ e# p* |
UARTPuts("Data mismatch in buffers.\n",-2);
. S3 C' \3 o t, C
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 N# k4 i. Y; ]; O5 Y1 Y6 |4 U& m5 c
{
6 j! @# ^3 Z) r) i# U
for (i = 0; i<upp_frame_size; i++)
+ K& Y5 z* c3 @$ Z+ R
{
7 d8 ~6 S) i' ~1 O! `
if (upp_buffer_a
!= upp_buffer_b
)
. f" [; b/ L" ^3 p7 B( n0 M
{
& ?- K p! k( U/ R
upp_error_count++;
/ v! ^' B7 B, s: F( w/ a" {
}
. X. ?* E% n# Y w
}
3 f# ^! d4 ~/ }
}
6 a, Y4 p( t! G) I1 e. L9 X
( L4 ]. W' N: f0 C& [
/* 报告通信结果*/
) a+ z: J8 M- A' ?! C/ j. m# x
if(upp_error_count != 0)
% v9 D. f- M2 D$ x8 P O8 v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ T5 c' l, l( ]) ^ @( }7 d
else
/ U2 g. t1 ^# v
UARTPuts("uPP transfers complete!\n",-2);
7 Y. y1 i1 U3 l+ K
0 F4 \5 D: s) l' M8 G- z% J$ U9 |& d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! [" K1 p% j* i& G# Z" Z3 q, J
UARTGets(ch,2);
0 ^ T* H/ _; K: v
UARTPuts("\n", -2);
! S, T* Y1 x1 N/ \& w F3 @
, F$ | h2 F% L3 _
if(ch[0] == 'y')
1 p# m. K+ U: a2 K/ Y
{
, m' n( m" y, t" \# S& @
/*打印全部读到的数据*/
* H; ] n( Y, I+ q+ r: J: e) m+ s
for(i=0; i<upp_frame_size; )
1 P5 r8 ^9 a& `. e+ t7 W w
{
E9 h3 X9 x4 p3 L) x1 z8 G7 |8 x
for(j=0; j<5; j++)
& w( S2 q' b+ W
{
# T% o* x5 c+ T& n" p. [) S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 I' E( ^: h5 n, H/ B- k/ [
i++;
# O7 {5 \) u$ r/ m' p
//if(i >= 4096)
5 ?0 K g# |3 e) F& W6 ^
// break;
, ~5 C' G q. U* i0 R% @' y% h
4 S6 l7 h+ C3 P3 B% H- H
}
. n! X+ {5 |9 m8 t* w5 Z9 ~
UARTPuts("\n",-2);
+ t! u+ ]' ^' e. o/ R+ X
}
0 E8 G; z+ M! W! Q" E
}
0 ]5 J2 B3 W( c% x0 y3 Z) v& y
8 {' O ?5 }% J; T5 C
}
0 U! b2 M, l# M/ x" ?
$ I1 v/ o* I. g2 i9 C5 f
, n0 k6 T4 E( ^ q% e- m
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 F/ [. J' \ d2 E* A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 n! @( t2 c& S- o" x. p- Z
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4