嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ f9 I; S. _0 i8 h
Void UPP_TASK(Void)
) @ c6 I- t% L9 E; u$ q
{
% |+ w( x$ o# V* s) l
6 a! E3 r# z! x- G @* p% [7 d6 v; J
int i,j,k,target_int_count=2;
- ?0 b* i/ S- I' o |: x% h0 M* \6 k
char ch[2];
4 ^% v, ]6 u! Q8 a
: Z1 P5 q5 l- \% B% u
% d9 c" _; {; m. {8 n
5 l, U& v: f q2 }
upp_interrupt_count = 0;
- t% m6 n; v" P3 K/ C) `5 R" l
upp_error_count = 0;
6 b( x$ ~; h0 L* u, @0 q: R- [; F
6 _* o( w, Q! w3 Y7 N
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# f$ l4 @( q) C4 E
// Initialize data buffers
8 X5 ]. g; g, S8 c/ p2 V, Q& o
for (i = 0; i < upp_frame_size; i++)
; _5 S" l5 N9 d4 o. _9 X9 i
{
. w4 _& ^, `3 p; l2 K2 R! {8 G
upp_buffer_b
=i;
b; {" a' m' D' k: w
upp_buffer_a
= 0xDEAD;
( m0 D! F# }# Y1 J
}
7 k9 E" M( u0 }9 U$ K5 P6 p
3 y7 k) W- f/ l. ~+ S
//for(i=0;i<1024;i++)
( \: o) m; r4 v5 g6 n; H2 i0 r3 J
// temp
=0;
" Z+ y4 S, _1 i! y: @
* \) }' ]' y9 o# g0 R
//UPPReset();
2 E; w9 D5 X0 G7 Y* x7 k& n
/*启动UPP DMA传输*/
" X4 p4 r, M: x U W4 I- y% r
UARTPuts("upp_prog_dma_i\n",-2);
% @$ z. S. t. U: F5 q6 b9 W, i9 i
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* A2 D' Y6 `. u% E8 S* @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: R3 r! m# r! K6 Y6 Z5 t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 m, n( i Y$ [0 U4 F& {
b3 z7 C" B9 Q& I5 m8 c8 C
UARTPuts("upp_prog_dma_i\n",-2);
A, ?4 Z! x; W, m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 k$ Q; [6 }9 t, g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% h& i( {+ c$ S- s$ @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 ^, \' a! H9 ~! G; x, w: f. w* ?
. ?, B9 m2 n: _% v+ S O* x& e
/*等待UPP传输完毕*/
, U9 x. b# _6 Z8 `& L% ^5 Z
//i=0;
1 P, J) [; g* p9 g, m
//j=0;
- @6 l6 J. y) c) f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ t0 U/ L1 i4 W& R5 o
{
9 s+ {( s S" G9 v
/* 测试UPP传输的同时操作普通DDR数据
! I+ J" n+ {% @. ~6 J, t
temp
=i;
% Y) B `0 L0 x( z
i++;
* ^8 C. u! x7 Z3 T: e! q) l
if(i==1024)
9 N7 X3 |. m g7 o, \" X" s
{
5 \1 }: q) }$ D$ c- q1 W# R5 K
i=0;
2 g! c, I9 C$ F7 d# N- O
j++;
$ h N( Z: N: S/ x# z
}
8 j- d$ K! J# ^# @
*/
' a+ o9 L" d4 f( @" h ~& n
& T( S( [( K+ n
asm(" nop");
# Y' \9 n( v# z. ]8 S
3 R9 O/ X0 f: k$ p' J+ m% A+ k8 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, P, j" a/ b+ w# U
}
: z( h* u* ]) i+ s0 F
) i+ D, B7 x+ N5 I {5 i7 n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ V( z5 w* P! E% h) Z. y
//UARTprintf( "i=%d\n",i);
1 C# l1 q7 E( H: X, ] |- @
//UARTprintf( "j=%d\n",j);
& U1 A' `! w7 I9 y
UARTPuts("Data mismatch in buffers.\n",-2);
. V! E8 {- C V3 [ }7 M6 v
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ T- h0 z: Z0 u; C4 \
{
( G/ j% T" m5 y* y
for (i = 0; i<upp_frame_size; i++)
' ?+ b- g, {( S# a; ~
{
4 l% s$ H+ X* Y+ o4 I W
if (upp_buffer_a
!= upp_buffer_b
)
3 Q. d4 G) }( w0 N+ T
{
! Z+ F; M+ `; p7 w: k# V
upp_error_count++;
( [* |% x. O9 [3 \
}
! l0 X) a( N) c/ j1 |' [) X
}
Y4 j: y) w& g0 {* l3 p$ _/ P4 y
}
9 T8 H. u, s- l& L
) K) @! x8 s- m% |3 G; Q8 p( F$ k
/* 报告通信结果*/
! L! z8 @* p' k; |" z
if(upp_error_count != 0)
, M# }& m( @7 {
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 J" H9 v; x3 d# Z$ q3 U
else
) c6 o3 x; p$ K+ i
UARTPuts("uPP transfers complete!\n",-2);
d9 D: B0 }8 ]$ ]; W7 g
( u5 c" O$ x8 ]2 W0 ]# O. ?; |+ ^' S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: u. D+ C1 j4 k
UARTGets(ch,2);
; j% b7 G g$ t2 K! e) R9 A" z
UARTPuts("\n", -2);
7 g# O3 W" H; _; Z" p& f
! c: J+ T8 [! g+ l' Q: m+ b5 I
if(ch[0] == 'y')
; P& d/ p( Z) r9 @, g" S
{
4 ]7 ]% i) D, a' A$ X z$ w
/*打印全部读到的数据*/
) J9 }8 ?* j1 L4 r
for(i=0; i<upp_frame_size; )
) I8 I2 _$ Q! h: o: U/ j% V
{
" C* v; h1 u5 X- w
for(j=0; j<5; j++)
2 b6 a2 }, L; w) i% T
{
9 ~% Z' q0 H& r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" ^! x' S/ B( B1 Y( i
i++;
" K5 V' E5 d K3 ~, ?% z" T
//if(i >= 4096)
" c" U2 c( l2 Z) A5 {7 O6 S7 x6 W
// break;
* @5 e9 N) d8 z2 V- I6 W E
, a- t3 r( g. s) k9 r2 ~% z( I- s6 b
}
0 u1 J$ T; N1 W* o" I; l g: n. c# i
UARTPuts("\n",-2);
- y8 {9 U7 N0 M5 n6 s' B7 `
}
# E3 F+ L6 k- d7 p0 H8 Q, P
}
6 i5 d# w6 @' E& ^; L0 P
: R1 X0 F+ `& r8 s
}
, k4 X' _( P. x' A
; Z& z8 f( t* w) K/ q. {' d
" V; t* A& h! J
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' \5 R0 |0 }9 T- b
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 @7 I! t+ a T. p
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4