嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 h. [' V; ^4 f0 Q& K
Void UPP_TASK(Void)
: J' h& A% ^" ^% c, Y
{
' ] ^( R; ?' G$ p: K4 C
+ Z+ u+ d4 R* R* q! [
int i,j,k,target_int_count=2;
8 P% J) P1 L! t6 G0 E6 r" y
char ch[2];
+ H- W& F3 R9 a! ]* u! q0 i* c
# ^6 ]$ X. ~$ ]5 J) D7 O
3 T( E0 p& q& l+ l! L" O
( T! w- z, s- @# i6 J+ [$ D2 [" o8 v
upp_interrupt_count = 0;
* Y9 p* h% k! U% j
upp_error_count = 0;
) L' r" e2 u) X
1 M7 z# \: u3 f- j. e6 s
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; Q% T9 ^# ], w1 T- c
// Initialize data buffers
! u, N6 n, u8 J# e
for (i = 0; i < upp_frame_size; i++)
6 H( ]& B& g9 m6 c2 e0 O
{
0 V$ v$ i) c, u/ i
upp_buffer_b
=i;
, L, F( ^: C2 _# I5 I8 K6 X- u6 n
upp_buffer_a
= 0xDEAD;
; o& } h4 m' j3 W3 d
}
x: M! ?! f) S: g0 B
7 F- U0 X6 W" c0 c: A
//for(i=0;i<1024;i++)
' U: e1 r* m' D s; N7 u ^1 u
// temp
=0;
' _8 ]' F% \! O
x5 V7 U" I5 k0 x1 _
//UPPReset();
$ T9 Y5 _( J. ]7 D7 ^6 n
/*启动UPP DMA传输*/
! u, b; R* W2 n; N
UARTPuts("upp_prog_dma_i\n",-2);
) h1 O' R5 h$ G5 _+ T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 B a! r+ \0 Q# G5 @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 z0 I3 w2 d& \" \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: y M; K. H& H% x* z
* r; I, w8 c3 H7 u( \+ E3 {
UARTPuts("upp_prog_dma_i\n",-2);
U# i# `! O7 a; s4 I- D8 ~9 Q5 F- Z8 o
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& Y) j0 W+ E1 E7 b7 b4 e6 A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: {% E5 O9 \- Y7 R4 N8 h( }4 [; J
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) u0 @( V7 H: b, `/ F
4 w b @ Z! f6 }6 n$ u4 i3 T
/*等待UPP传输完毕*/
# d# H' [- d1 y& ^& R7 N* @
//i=0;
! P# e) G; O. U) B9 l! E
//j=0;
& H* l* J6 h% U. S) Y$ ?
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ U" b$ _; J/ L
{
: j A6 n) {4 q7 }
/* 测试UPP传输的同时操作普通DDR数据
' M! K7 L& K4 Y7 s f3 l$ E, }
temp
=i;
- } B5 n4 v- c6 P6 Z2 C0 Y9 L: \
i++;
7 y! H' Y, t6 x
if(i==1024)
" O+ h" |; C$ B: N6 s
{
# M& y4 P" X% g9 Z4 o; L
i=0;
& }/ R- R* q. n# n; _& W, G" l7 X
j++;
0 w5 k. @- ~0 L$ v5 U0 J0 d
}
% V$ _* D( n" y$ p7 [( k% I+ ]7 C+ L
*/
7 ^2 S1 p$ {* o
* a0 P& s. f1 | K' T4 y
asm(" nop");
* z" A& l4 O( d; `5 Y8 h" H1 G
- k5 k7 n0 {9 _+ o0 k/ S
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 Z9 T! d6 V! |8 W% u2 k
}
9 G' b7 U0 j2 q2 G. ~5 e0 c/ K
" o6 d. O* g% L1 z0 a
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# `4 R! ?9 @" s+ z$ r: H& j
//UARTprintf( "i=%d\n",i);
]1 D7 ?! }9 e0 A, Y/ C5 o$ s+ i
//UARTprintf( "j=%d\n",j);
6 v$ r% g+ b! p- L/ y
UARTPuts("Data mismatch in buffers.\n",-2);
$ `* }; ^6 D% D
if (upp_interrupt_count == 2 && upp_error_count == 0)
" P6 E7 S, _9 y- \6 E
{
) q. _% _, r6 e+ u0 r0 t* |
for (i = 0; i<upp_frame_size; i++)
, G1 U; O0 F ^, E2 a7 o ` h' S
{
1 g3 z, P+ o: n0 b# u3 B6 l
if (upp_buffer_a
!= upp_buffer_b
)
& F% v+ s" l. V, [- G6 x2 @
{
2 @2 o3 U8 E$ j
upp_error_count++;
( ~/ g* b2 v+ T! K2 _
}
5 D9 }9 H e7 a7 N: s m8 f; a
}
8 I |" a: I( K0 m1 E& q
}
" c0 a/ M/ {! @1 ~% {
: n# \! u. z9 Y. Z1 A! |: Q
/* 报告通信结果*/
, K% w; z* @7 p
if(upp_error_count != 0)
5 u" X0 [% x3 y! l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 c$ O5 V( X4 e; @7 W
else
1 Q9 d) p2 L. o/ [& K$ [
UARTPuts("uPP transfers complete!\n",-2);
$ _$ |1 R4 A7 }7 W2 o
: T& f& u" s4 p( ~7 h
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& N5 ^1 R: `3 o/ {+ e, }. q
UARTGets(ch,2);
* K- u' R9 `2 b T& {
UARTPuts("\n", -2);
$ B, N' [2 u: ^/ z: A8 W+ }" o: g6 f
1 v @+ t, g/ I% R# h
if(ch[0] == 'y')
% `# y5 Y. {4 a5 c/ ?5 v- @, X' Q/ U
{
) W+ | a+ b8 w) B9 q0 B
/*打印全部读到的数据*/
4 ~' F, _ D1 l' `4 d5 l; t2 d1 X
for(i=0; i<upp_frame_size; )
. A q! k1 I: G9 P- N- D6 c5 h# g
{
% {1 N3 c' C1 a" _% Y
for(j=0; j<5; j++)
2 N* w' v9 e, n! e0 n" Y+ F6 m: }
{
) u' ~0 a1 q v& o4 v! y0 n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
L' {" ~8 S1 j# x
i++;
/ Q8 s# Y2 k7 Q& f( ]
//if(i >= 4096)
+ u4 R) E: D& m! ^
// break;
4 [, ~5 R5 r# l) X
' x+ i( R/ m5 i+ G& U
}
. _. V8 W" E2 ^% f' U5 U1 w" u
UARTPuts("\n",-2);
- U& V0 j0 A: I* @% } R; [2 c! k8 b
}
' M+ y! |7 a+ @7 N; P: P+ x5 C* j9 C
}
5 ~+ j+ E3 U. I2 ^1 Z( U. P4 b
. k- ~' l+ x: M
}
6 d4 a4 X) d* g# E7 M c
" W7 s9 z+ _" M4 i" E1 M
* Q0 ]6 {" W/ g* r
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 ^7 y' M' L4 e) C3 A* [3 S
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, E0 z0 ?5 e6 f; B- B
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4