嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' a4 b# t3 J' t' o1 F
Void UPP_TASK(Void)
, v* m* l; g# I- m/ R6 k
{
/ V+ U! U3 X" v9 O: Q/ T. M
; {; @6 w a* p N/ c
int i,j,k,target_int_count=2;
0 |) a9 |. L g$ N
char ch[2];
5 L* G* K6 y# @+ G
! c% Q& W ]( p7 ~! ]) V
* u; W# y; m j$ S1 _
2 r+ ?6 o- y) P l, X6 V2 \; x8 T T. U
upp_interrupt_count = 0;
+ N: \# A! A! ^2 R' ?* \
upp_error_count = 0;
6 M2 l) k0 G4 ]8 e1 _0 E* K
4 B: p6 \7 R* S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ t3 C# k) g7 U8 k8 \* o
// Initialize data buffers
' g& k2 ^6 A% R0 X
for (i = 0; i < upp_frame_size; i++)
% S. Q6 F* \3 a
{
: k6 L+ y" F- i9 |: y
upp_buffer_b
=i;
2 W6 ~, e' y" @. q3 y
upp_buffer_a
= 0xDEAD;
4 X c% |: k; D1 o7 T: R
}
" Z+ i* ^0 q4 v6 `* E- N: A
* L; B2 P& \! G
//for(i=0;i<1024;i++)
: L+ S% ~5 p( `1 b6 R* P8 p. x1 R
// temp
=0;
+ J ^$ k6 T. b
1 j* J6 A0 t. `, A
//UPPReset();
0 t$ e% g& l$ [! W- j7 b6 w3 k( f
/*启动UPP DMA传输*/
% F2 ^: y& x* u: c
UARTPuts("upp_prog_dma_i\n",-2);
$ D8 G5 W! J8 V, g
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) l8 p$ ]+ Y1 s" D
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 q! z. h- E$ d/ L( ]' m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ c7 T! F3 E) ]. B
7 B( Z: M; [9 q6 x3 Q! W' A
UARTPuts("upp_prog_dma_i\n",-2);
0 F/ u; e, ~3 G3 E6 t: \- G7 x& [6 n
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. S8 R7 c4 O/ e# p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) m' m) h5 H7 k
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 Q0 B! k2 Z, l
. X: k2 g( e! J2 I6 Q
/*等待UPP传输完毕*/
4 s8 q% k% R! L: f" @8 N9 o! d
//i=0;
' n5 Y! L4 e; f$ m& G
//j=0;
4 Z! x9 S$ `2 A4 v% v. @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' V$ t; J. ] @" [1 v3 i
{
0 z6 a1 U* A9 A1 W' K
/* 测试UPP传输的同时操作普通DDR数据
. F6 m' L. @8 `6 e2 n9 l9 I: D
temp
=i;
- T+ m0 \6 H r( r3 Y
i++;
0 v6 Q# }2 u, P$ V& w
if(i==1024)
! M! V) p) }( Q! G# ^$ r; ^% C& N2 w4 z
{
" |" z% z; }" q
i=0;
6 @* {' ^4 g8 o
j++;
l" i7 E" Z+ ?9 C, D; z; V( m
}
4 l9 s$ Q% |+ W8 G: r5 R
*/
, @9 V8 X1 \* B! k8 c
! b. G& y( S& [3 d: q
asm(" nop");
7 H! ^+ ^# {! [8 ~# s
$ L( o0 Q0 B0 Y6 H7 C
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 m1 ^( P/ ~5 G$ _' K8 a- d' ~
}
. g8 H6 m( T5 l- d0 w
$ |2 S& y! k5 p3 W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 O, ~+ T4 G5 I6 ^" {- x+ l; K
//UARTprintf( "i=%d\n",i);
2 E m8 _ S+ q0 c- n6 l6 {
//UARTprintf( "j=%d\n",j);
7 K1 Q' ? J& i- S
UARTPuts("Data mismatch in buffers.\n",-2);
9 w6 F& C% @" b) ?; U. P( s
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ e [9 s- n8 F1 k7 W
{
9 D. |6 \$ \! W: n ~' z
for (i = 0; i<upp_frame_size; i++)
8 V( H$ n% X# o3 e6 { ~
{
, k) f7 i$ F$ I
if (upp_buffer_a
!= upp_buffer_b
)
$ m6 ^' H: t9 g1 H/ F
{
' v: `: }! d2 y1 x
upp_error_count++;
: }" G0 U) a/ f* Y. _4 h
}
4 l# R3 W5 B& [# J! G
}
/ r7 o+ T; Q7 P1 ^* W- g* ?9 P
}
- j9 S- o* h: Z! S
4 \2 ^! n" ~% o( |; k
/* 报告通信结果*/
! X, d3 i# ?3 H$ y( Z9 s
if(upp_error_count != 0)
. ?+ I0 I* i7 A0 r& l2 [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- {2 [' t# c" ?% x/ e+ h
else
6 G, a3 |6 u$ n% v3 v! F# d4 q6 |
UARTPuts("uPP transfers complete!\n",-2);
7 i+ z @+ e. W6 l5 a; h2 B0 n4 D
8 W$ ?# R. }. G! b* d1 b3 T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
x, R% a" c& [5 r: F! F8 B
UARTGets(ch,2);
7 Q+ V+ O7 O) E* t0 x+ v
UARTPuts("\n", -2);
5 q ?# h5 }, _$ \0 \5 z' I
6 @/ u& z+ U9 f, n& X
if(ch[0] == 'y')
# W) X. Y# L1 E/ D
{
_2 B! n4 b0 l& {
/*打印全部读到的数据*/
9 I* k/ m8 E5 I& X- X
for(i=0; i<upp_frame_size; )
$ r: }0 [: _; r5 x. u) V
{
6 E5 r) b; F3 r
for(j=0; j<5; j++)
0 ]. Z p+ S \% R$ H
{
- }! l4 u1 I6 p; M# _% O( j. j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- v e p. A/ H [7 |
i++;
8 P, q4 q/ \9 _
//if(i >= 4096)
. Z; w, N: u; R% ~) G
// break;
3 \1 {0 N( e! Y8 }
3 O- C# ~# N% Z' k9 x
}
5 t* g" S/ G4 f, {" w
UARTPuts("\n",-2);
/ l( J# H i2 b/ t+ [% z
}
0 j5 V1 A4 R. Y$ F# A
}
% A8 }3 z$ \6 t A
$ t" b9 |! y2 l
}
# \/ w0 S' I* h9 G2 V
" z g u7 k4 z$ u
7 b3 ~# p/ J2 D) B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ b' [$ _! O, s, B: J6 x# _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" ?+ y% y! V! A6 I J% E, v: i4 i
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4